Как я могу использовать команду bash для перемещения набора каталогов из одного места в другое
При использовании командной строки я могу использовать
for i in *txt; do mv "$i" /home/some_user/some_folder/"$i"; done
переместить группу файлов.
Как я могу переместить все каталоги в текущем каталоге, используя команду такого же типа?
2 ответа
Вы можете просто добавить условие, чтобы проверить, является ли элемент папкой.
for i in *; do
if [ -d "$i" ] ; then
mv "$i" /home/some_user/some_folder/"$i"
fi
done
С соответствием "шара"
mv -t /home/some_user/some_folder -- */
-t
инструктируетmv
переместить все перечисленные объекты в каталог, обозначенный путем-t
,*/
соответствует и расширяется до имен всех (не скрытых) каталогов в текущем каталоге. Обратите внимание на финал/
это ограничивает глобальные совпадения каталогами! (Если вам нужно включить скрытые имена файлов, начинающиеся с.
, включитеdotglob
вариант сshopt -s dotglob
.)
С find
find . -minepth 1 -maxdepth 1 -type d -exec mv -t /home/some_user/some_folder -- {} +
-mindepth 1 -maxdepth 1
ограничивает поиск содержимым данного каталога (здесь:.
).-type d
ограничивает совпадения с каталогами. Это включает в себя скрытые каталоги; чтобы исключить их использование! -name '.*'
,-exec COMMAND [ARGUMENTS...] {} +
работаетCOMMAND
сARGUMENTS...
(если есть) и добавляет пути ко всем сопоставленным файлам.