Подсчет файлов в каталоге

Я использую следующий код в конце одного из моих сценариев для соответствия количеству файлов, которые я обработал и переместил в тот каталог.

# Report on Current Status
echo -n "Cropped Files: "
ls "${Destination}" | wc -l

Моя проблема связана с тем, как я обрабатываю дубликаты файлов. С прямо сейчас, я проверяю на присутствие файла сначала (поскольку мой сценарий является разрушительным по своей природе к исходным файлам, я обрабатываю). Если это обнаруживает файл того имени, уже обработанного, я изменяю имя файла следующим образом.

Дубликат файла: foo.pdf

Изменившее имя: foo.x.pdf

Если существует foo.x.pdf, то я переименовываю снова к foo.xx.pdf. Повторитесь по мере необходимости. Я намереваюсь войти позже и оценить каждую 'версию' и выбрать лучшую для держания под рукой. Но здесь находится моя проблема. Я хотел бы считать количество файлов, которые не содержат .x. .xx. и так далее. Как я разделяю их из ls вывод так wc -l может считать уникальные файлы только?

TL; DR: Как я получаю количество файлов в данном каталоге, которые не содержат данную подстроку в их имени файла?

5
задан 9 February 2018 в 14:19

3 ответа

Найти количество файлов в каталоге, которые не содержат .x.pdf, попытка:

find "${Destination}" -mindepth 1 ! -name '*.x.pdf' -printf '1' | wc -c

Найти количество файлов в каталоге, которые не содержат период - один или несколько x - период - pdf, попытка:

find "${Destination}" -mindepth 1 ! -regex '.*\.x+\.pdf' -printf '1' | wc -c

Вышеупомянутый поиск рекурсивно через подкаталоги. Если Вы не хотите это, добавьте опцию -maxdepth 1. Например:

find "${Destination}" -mindepth 1 -maxdepth 1 ! -regex '.*\.x+\.pdf' -printf '1' | wc -c

Обратите внимание на это, потому что мы используем -printf '1', этот метод надежен, даже если каталог содержит файлы, имена которых содержат символы новой строки.

9
ответ дан 23 November 2019 в 08:47

Без подкаталогов:

echo $(($(for file in *.sh ; do echo -n 1+; done; echo 0;)))

потому что:

for file in *.sh ; do echo -n 1+; done; echo 0;
1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+0
2
ответ дан 23 November 2019 в 08:47

Можно исключить файл или файлы, которые соответствуют к шаблону от ls команда при помощи (один или несколько раз) опция -I, --ignore=PATTERN (ссылка):

ls -I "*.x*.pdf" "${Destination}" | wc -l

Или Вы могли использовать метод вычитания таким образом:

echo $(($(ls "${Destination}" | wc -l) - $(ls "${Destination}"/*.x*.pdf | wc -l)))
0
ответ дан 23 November 2019 в 08:47

Другие вопросы по тегам:

Похожие вопросы: