Как эффективно переместить все каталоги в один каталог в одной папке?

Как эффективно переместить все каталоги в один каталог в одной папке?

У меня есть 100 файлов в одной папке, включая папку с именем «target». Я хочу перенести все файлы из этой папки в папку target (за исключением самой папки target).

Есть ли эффективная терминальная команда для этого?

решение1

Если в вашем каталоге находятся только файлы (и целевой каталог), просто используйте mv, вместо find:

mv * target

Он сообщит, что «цель» не может быть перемещена сама по себе, но все файлы впоследствии будут в цели.

решение2

Использовать это

$ mv target ..
$ mv * ../target
$ mv ../target .

решение3

Это тоже работает:

find . -maxdepth 1 ! -name target ! -name . -exec mv "{}" target \;

Одним из ключевых преимуществ findчрезмерного использования автодополнения bash является то, что вы одновременно получаете скрытые файлы. mv * ...этого не произойдет.

Возможно, вы могли бы пойти чем-то вроде:

mv -t target * .[^.]*

Или, как указывает Джеймс, вы можете сократить команду find, чтобы она просматривала только файлы... И, как указал LoremIpsum, если их миллиарды, использование xargsбудет немного эффективнее:

find . -maxdepth 1 -type f -print0 | xargs -0 mv -t target

решение4

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

Итак, для каталога git просто переместите его так:git mv * цель -k

Theопция используется для пропуска ошибок перемещения/переименования

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