Как объединить выбранные файлы из нескольких подкаталогов в один каталог - PullRequest
0 голосов
/ 29 ноября 2010

Я знаю, что это, вероятно, элементарно для юниксов, но я не нашел простого ответа в Интернете.

У меня есть каталог с подкаталогами. Некоторые из этих подкаталогов содержат файлы .mov. Я хочу объединить все movs в один каталог. Мне не нужно беспокоиться о конфликтах имен файлов, потому что файлы взяты с цифровой камеры, и файлы именуются постепенно, но делятся на ежедневные папки.

Что такое Unix-fu для захвата всех этих файлов и копирования (или, что еще лучше, перемещения их) в каталог в моей домашней папке?

Спасибо.

Ответы [ 3 ]

1 голос
/ 29 ноября 2010

Как насчет этого?

find "$SOURCE_DIRECTORY" -type f -name '*.mov' -exec mv '{}' "$TARGET_DIRECTORY" ';'

Если исходный и целевой каталоги не перекрываются, это должно работать нормально.

EDIT:

Кстати, если у вас есть смешанные расширения (x.mov, y.Mov, Z.MOV), как в случае со многими камерами, это было бы лучше. Он использует -iname, который нечувствителен к регистру при сопоставлении:

find "$SOURCE_DIRECTORY" -type f -iname '*.mov' -exec mv '{}' "$TARGET_DIRECTORY" ';'

Убедитесь, что переменные $ SOURCE_DIRECTORY и $ TARGET_DIRECTORY заменены фактическими каталогами и они не перекрываются (то есть цель находится где-то под источником)

РЕДАКТИРОВАТЬ 2:

PS: Я только что заметил, что Хачик поймал этот с его правкой

0 голосов
/ 29 ноября 2010

Если вам нужно справиться со странными именами файлов (пробелами, специальными символами), попробуйте это:

$ cd <source parent directory>
$ find -name '*.mov' -print0 | xargs -0 echo mv -v -t <target directory>

Удалите приведенное выше «эхо», чтобы фактически выполнить перемещение, а не выводить, что произойдет.1004 *

"mv -v" выдает подробный вывод, "mv -t ..." указывает целевой каталог (возможно, специфичный для GNU).

"- print0" и "-0" являются расширениямисправиться со странными именами файлов.В не-GNU системах вам может потребоваться удалить эти опции, что приведет к разделению строк новой строкой.Это все равно будет работать с именами файлов с пробелами, но не с именами файлов с символами новой строки (да, это возможно).

0 голосов
/ 29 ноября 2010
mv `find . -name "*.mov" | xargs` OUTPUTDIR/

Обновление после комментария thkala:

find . -iname "*.mov" | while read line; do mv "$line" OUTPUTDIR/; done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...