Назад | Перейти на главную страницу

Как мне найти все файлы определенного типа в RHEL в командной строке?

Ищу файлы типа .flv, .avi, и т.д

Я хотел бы увидеть список всех файлов (на моем сервере) этих типов файлов (я не возражаю делать это один за другим, т.е. видеть все файлы .flv, то все файлы .avi).

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

Есть несколько способов поиска файлов в системах GNU / Linux. Двумя основными способами являются locate и find:

  • locate для поиска документов использует базу данных файлов, известных во всей системе. Это очень полезно, но требует, чтобы эта база данных постоянно обновлялась (с updatedb), что может занять много времени;
  • find ищет файлы в заданном каталоге. Обычно это медленнее, чем locate (у него нет постоянной базы данных), но он более точно настроен.

Итак, если вам нужно найти все файлы в вашей системе, которые соответствуют вашим критериям, вы можете использовать locate:

$ locate --regex "avi|flv" | grep '\.\(avi\|flv\)$'

тогда как, если вы ищете в определенном каталоге и хотите убедиться, что нет эффекта задержки кеша, вы можете использовать find:

$ find /path/to/your/directory -regex '.*\.\(avi\|flv\)'

Теперь, чтобы скопировать эти файлы в определенную папку:

$ locate --regex "avi|flv" | grep '\.\(avi\|flv\)$' | xargs cp /path/to/specific/folder

или

$ find /path/to/your/directory -regex '.*\.\(avi\|flv\)' -exec cp {} /path/to/specific/folder \;

Расширяя комментарий Рафника, вы можете сохранить канал через grep, вставив в регулярное выражение команды locate или find: '\.avi$|\.flv$' - он будет соответствовать файлам с расширениями .avi и .flv.

Возможно, более элегантные способы сделать это с помощью find -exec или xargs, но вот быстрый совет:

updatedb 

затем

for fred in `locate *.flv | awk ' { print $1 } '` do;
mv "$fred" /my/dest/folder/
done

(и т.д)