Я хотел бы переместить все файлы и папки из одного каталога в одну из его подпапок. Как это сделать?
Я использую BusyBox и Linux.
бывший:
переместить все файлы и папки /my/path/
в/my/path/subfolder/.
Решения типа «копировать, а затем удалить» не по карману.
Спасибо.
решение1
mv * subfolder
Конечно, переместить каталог «подпапка» в себя не получится, но все остальное переместится
решение2
Решения, использующие *
(расширенные оболочкой), не будут работать со слишком большим количеством объектов в /my/path/
. В таком случае вы получите:
argument list too long
В этом подходе не используются *
:
cd /my/path/ &&
find . -mindepth 1 -maxdepth 1 ! -name subfolder -exec mv -t subfolder/ {} +
К сожалению, параметры -mindepth
и несовместимы с POSIX; я думаю, что ни один из параметров несовместим с POSIX.-maxdepth
find
-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/
вы хотите иметь нестандартные разрешения, права собственности и т. д.
решение3
Самый простой способ сделать это:
mv !(subfolder) subfolder
«!» означает НЕТ, аналогично языкам программирования, где mv переместит все файлы и папки в требуемую подпапку, за исключением самой подпапки.
Дополнительные функции, такие как перемещение скрытых папок и папок-точек, описаны здесь:https://askubuntu.com/questions/91740/how-to-move-all-files-in-current-folder-to-subfolder
решение4
Вы можете проверить mv
команду. Вы можете попробовать выполнить поиск всех файлов и папок в каталоге и исключить подкаталог, а затем скопировать все найденное в этот подкаталог, используя find
команду mv
.
См. аналогичный вопрос на stack-overflowhttps://stackoverflow.com/questions/4612157/how-to-use-mv-command-to-move-files-except-those-in-a-specific-directory