Мои файлы имеют следующую структуру:

11
--11a
-----a.jpg
-----b.jpg
-----....
--11b
-----d.jpg
-----g.jpg
...

Я хочу, чтобы все файлы .jpg находились в одной папке:

11
-a.jpg
-b.jpg
-d.jpg
-g.jpg
...

В основном у меня есть подпапки со многими файлами .jpg, и я хочу переместить их все в один каталог (например, родительский).

Я пробовал: mv */*.jpg all но я получаю -bash: /bin/mv: Argument list too long .

В некоторых сообщениях предлагается решение xargs, а в других - решение find, но, к сожалению, у меня ничего не получается.

2 ответа2

0

Если имена файлов уникальны, используйте:

find {base folder}/11 -name "*.jpg" -exec mv {} {base folder}/11/ \;

где {base folder} - это место, где находится каталог 11 .

Это запускает команду mv для каждого файла по очереди: это будет намного медленнее, чем перемещение всех файлов в одной команде mv , но не будет никаких ограничений на длину списка аргументов.

Если некоторые имена файлов могут быть в верхнем регистре, вы можете использовать -iname вместо -name . Вы также можете добавить -n чтобы убедиться, что вы не перезаписываете файл, который уже был перемещен (вам нужно убедиться, что у вашего mv есть эта опция - если не использовать -i , хотя это вызовет конфликты).

Вы можете избавиться от любых пустых каталогов с помощью:

rmdir {base folder}/11/*

Вам нужно будет изучить все каталоги, которые остались после этой команды.

-1

Это должно быть так же просто, как "mv /.your_extension ./"

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