Я хотел бы переместить все файлы и папки из одного каталога в одну из его подпапок. Как я могу это сделать?

Я использую BusyBox и Linux.

например:

переместить все файлы и папки в /my/path/ в /my/path/subfolder/.

Копировать, а затем удалять решения не по карману.

Благодарю.

5 ответов5

1
mv * subfolder 

Конечно, он не сможет переместить каталог "подпапки" в себя, но все остальное будет двигаться

1

Решения, которые используют * (расширенный оболочкой), не будут работать со слишком многими объектами в /my/path/ . В таком случае вы получите:

argument list too long

Этот подход не использует *:

cd /my/path/ &&
find . -mindepth 1 -maxdepth 1 ! -name subfolder -exec mv -t subfolder/ {} +

К сожалению, -mindepth и -maxdepth опции find не совместимы с POSIX; я думаю, что нет -t вариант mv .

Этот вариант должен удовлетворять POSIX:

cd /my/path/ &&
find . ! -name . -prune ! -name subfolder -exec mv {} subfolder/ \;

(Я адаптировал этот ответ Unix & Linux SE). К сожалению, он вызывает mv для каждого найденного объекта, поэтому он медленный.


Быстрый альтернативный подход, если только вы можете создавать каталоги заново (изначально не должно существовать ни /my/path/subfolder/ ни /my/subfolder/ ):

  • переименовать path/ в subfolder/ ,
  • воссоздать path/ ,
  • переместить subfolder/ в path/ .

Обратите внимание на файловую систему, основанную на inode, это должно быть одинаково быстро, независимо от того, сколько объектов в path/ . Код:

cd /my/ &&
test ! -e subfolder/ && mv path/ subfolder/ &&
mkdir path/ &&
mv subfolder/ path/

В этом случае я много использовал && чтобы подчеркнуть, что процедура должна прерваться, если какой-либо из ее шагов завершится неудачей. Однако такой подход неудобен, если вам нужен path/ или subfolder/ чтобы иметь права не по умолчанию, владение и т.д.

0

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

Смотрите аналогичный вопрос переполнения стека https://stackoverflow.com/questions/4612157/how-to-use-mv-command-to-move-files-except-those-in-a-specific-directory

0

После еще копания и экспериментов. Я нашел ответ:-prune используется, чтобы избежать повторного использования в подкаталогах. ! -name используется для исключения целевого подкаталога, а затем exec выполняет операцию перемещения. {} Заменяется именами файлов / каталогов из команды find .

find /my/path/* -prune ! -name subfolder -exec mv {} /my/path/subfolder/. +
0

Самый простой способ сделать это:

mv !(subfolder) subfolder

«!'НЕ, аналогично языкам программирования, где mv будет перемещать все файлы и папки в нужную подпапку, за исключением подпапки.

Дополнительные вещи, такие как перемещение скрытых папок и точечных папок, описаны здесь: https://askubuntu.com/questions/91740/how-to-move-all-files-in-current-folder-to-subfolder

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