Переместить все файлы из подкаталогов в текущий каталог?


13

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

Я нашел этот вопрос , но адаптирую ответ на:

mv * .

не сработало; Я получил много предупреждений в виде:

mv: wil and ./wil are identical

Файлы, содержащиеся в подкаталогах, имеют уникальные имена.

Ответы:


22

Вы также можете использовать -mindepthопцию:

find . -type f -mindepth 2 -exec mv -i -- {} . \;

(Вместе с -maxdepthвами можно также ограничить уровни иерархии, с которых нужно собирать файлы.)

Я использовал mv -i(«интерактивный»), чтобы сделать mvзапрос перед перезаписью файлов. При большом количестве подкаталогов могут возникнуть конфликты имен, о которых вы хотели бы получить предупреждение.

--Опция прекращает обработку параметров, так что mvне пугайтесь именами файлов , начинающихся с дефисом.

Очистите целую кучу пустых подкаталогов с

find . -depth -mindepth 1 -type d -empty -exec rmdir {} \;

Есть ли способ пропустить вопрос о перезаписи файлов, не перезаписывая их?
Филнор

2
Опции для mv:: -n, --no-clobberне перезаписывать существующий файл. Возможно, вас это тоже заинтересует -b, --backup.
Флориан Дженн

5

Попробуй это:

find ./*/* -type f -print0 | xargs -0 -J % mv % .

Больше информации: попробуйте найти находку в одиночку, она должна дать вам список всех файлов, которые вы хотите переместить (не включайте -print0). Пример:

probe:test trurl$ find ./*/* -type f
./test_s/test_s_s/testf4
./test_s/test_s_s/testf5
./test_s/testf1
./test_s/testf2
./test_s/testf3
./test_s2/testf6
./test_s2/testf7

с -print0и xargsвы сейчас создаете список операторов для выполнения. В -J %означает флаг, вставка списка элементов здесь, так что mv $FILE .выполняется для каждого найденного файла.

Выше работает для BSD XARGS. Если вы используете GNU-версию (Linux), возьмите -I %вместо-J %



-2

1 быстрый трюк, работает, только если ваши файлы имеют расширения (с точкой):

mv *.* subdir/
mv .* subdir/

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.