Баш, чтобы найти отсутствующий файл

#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.