например, у меня есть каталог, как ABC . И этот каталог содержит следующие файлы (он содержит количество файлов, я просто включаю 4 файла здесь)

2014-04-29T06-19-20_17368f93ce.mp4.uploaded
2014-04-29T06-19-20_17368f93ce.mp4
2014-04-29T06-18-20_17368f93ce.mp4

У меня есть одна переменная file_name она содержит одно из имен файлов, которые присутствуют в каталоге ABC .

т.е. file_name=2014-04-29T06-19-20_17368f93ce.mp4

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

ls -1 /home/ABC/*.mp4 | wc -l

Так что я просто хочу ignore файл в количестве, которые находятся в переменной file_name

Означает file_count просто игнорировать файл, который находится в file_name.

1 ответ1

0

Прежде всего, никогда не анализируйте вывод ls. Вот несколько безопасных подходов:

  1. Используйте find и grep (wc -l терпит неудачу в именах файлов, которые содержат переводы строк):

    find /home/terdon/foo -not -name "$file_name"  -name '*.mp4' | grep -c /
    

    Флаг -not заставляет find игнорировать любые файлы с именем $file_name .

  2. В этом конкретном случае, когда ваши файлы не содержат пробелов и вам, вероятно, не нужно иметь дело с переносимостью и языковыми проблемами, вы можете использовать ls . Это просто плохая привычка. Итак, чтобы использовать ваш оригинальный подход, просто отфильтруйте имена, которые вам не нужны, используя grep -v:

     ls -1 /home/ABC/*.mp4 | grep -v "$file_name" | wc -l
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .