Как найти группу файлов со строкой в ​​имени файла (или тексте), а затем переместить все эти файлы в определенную папку?

Как найти группу файлов со строкой в ​​имени файла (или тексте), а затем переместить все эти файлы в определенную папку?

Скажите, а что, если я захочу переместить каждый HTML-файл в нескольких независимых каталогах со словом «heavengames» в имени файла (и в качестве второго вопроса, все HTML-файлы со словом «heavengames» в тексте) в новый каталог с именем «heavengames-threads»?

решение1

Чтобы переместить файлы, в названии которых есть это слово:

find /path/to/dir1 /path/to/dir2 /and/so/on -type f -iname "*heavengames*" \
-exec mv -t /path/to/heavengames-threads {} \+

Чтобы переместить файлы, содержащие слово Word в теле:

find /path/to/dir1 /path/to/dir2 /and/so/on -type f -exec grep -q heavengames {} \; \
-exec mv -t /path/to/heavengames-threads {} \+

ps. чтобы проверить, что все правильно, добавьте echoперед mvпервым запуском.

решение2

В zsh или bash ≥4, в зависимости от имени файла:

mkdir heavengames-threads
mv **/*heavengames*.html heavengames-threads/

Для большей гибкости (например, чтобы воссоздать иерархию каталогов, найдитеzmv(естьмного примеров на этом сайте).

Используйте grepдля поиска по содержимому файла. С последними версиями утилит GNU (т.е. на невстроенном Linux или Cygwin):

grep -RZ heavengames . | xargs -0 mv -t heavengames-threads/

Для более переносимых команд используйте find. СмотритеОтвет Раша.

Связанный контент