#bash #find
Вопрос:
Я считаю файлы в папке с фотографиями:
% find . -type f | wc -l 22188
Затем я подсчитываю файлы на расширение:
% find . -type f | sed -n 's/..*.//p' | sort | uniq -c 268 AVI 14983 JPG 61 MOV 1 MP4 131 MPG 1 VOB 21 avi 1 jpeg 6602 jpg 12 mov 20 mp4 74 mpg 12 png
Сумма этого составляет 22187, а не 22188. Поэтому я подумал, что это может быть файл без расширения:
% find . -type f ! -name "*.*"
Но результат оказался пустым. Может быть, файл, начинающийся с .
:
% find . -type f ! -name "?*.*"
Но также и пустой. Как я могу узнать, что это за файл?
Я на macOS 10.15.
Комментарии:
1. Я бы попытался сохранить выходные данные в файл на различных этапах конвейера (особенно непосредственно перед и после
sed -n
шага) и сравнить их, чтобы увидеть, где меняется общее количество.
Ответ №1:
Эта команда должна найти отсутствующий файл:
comm -3 lt;(find . -type f | sort) lt;(find . -type f | sed -n '/..*./p' | sort)
Ответ №2:
Возможно, файл со встроенным возвратом каретки (или переводом строки)?
Было бы любопытно посмотреть, что это порождает:
find . -type f | grep -Eiv '.avi|.jpg|.mov|.mp4|.mpg|.vob|.avi|.jpeg|.png'
Ответ №3:
Не могли бы вы, пожалуйста, попробовать:
find . -type f -name
Он будет подбирать имена файлов, содержащие символ новой строки. Поддерживается ANSI-C quoting
bash-3.2.x или так далее на macOS.
Он будет подбирать имена файлов, содержащие символ новой строки. Поддерживается
*n*' ANSI-C quoting
bash-3.2.x или так далее на macOS.