Ищу файлы типа .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
(и т.д)