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

1 ответ1

4

Как правило, если вам нужно "зациклить" набор файлов в Linux, вы не хотите писать реальный цикл Bash (например, с for), но вместо этого используйте find . Следующее должно работать для всех версий find , а дистрибутивы Linux поставляются с GNU find , чье руководство вы обязательно должны прочитать в какой-то момент.

Будьте осторожны со следующими командами. Если вы не знаете, что делаете, или сначала не проверяете результаты, вы можете безвозвратно потерять данные.

find /mount/drive -type f  \( -iname "*.mp4" -o -iname "*.avi" \) \
-exec echo mv '{}' /mount/drive/ \;

Это напечатало бы список команд mv . Как только вы убедитесь, что он делает то, что вы хотите, удалите echo из команды и выполните его снова.

Замечания:

  • -type f ограничит результаты только файлами.
  • find перезапишет файлы с тем же именем без предупреждения. Чтобы избежать коллизий, используйте mv -i , который подскажет вам в таком случае.
  • Вы можете добавить к этому дополнительные условия для поиска файлов других типов, например, -o -iname "*.mov" и так далее.

На втором шаге мы удалим все, что не находится в корне диска. Для этого нам понадобятся две команды, так как вы сначала хотите удалить все файлы ...

find /mount/drive -mindepth 2 -type f

Если вы уверены, что в этом списке есть все, что вы хотите удалить, добавьте -delete к команде. Здесь mindepth 2 гарантирует, что ваш root (со всеми видео в нем) останется нетронутым.

Затем найдите оставшиеся пустые папки:

find /mount/drive -mindepth 1 -depth -type d -empty

Как и выше, добавьте -delete к этой команде, чтобы фактически удалить пустые каталоги.

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