При использовании командной строки я могу использовать
for i in *txt; do mv "$i" /home/some_user/some_folder/"$i"; done
перемещать группу файлов.
Как я могу переместить все каталоги в текущий каталог с помощью этого того же типа команды?
Можно просто добавить условие проверить, является ли объект папкой.
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
.
*/
соответствия и расширены до названий всех (нескрытых) каталогов в текущем каталоге. Отметьте финал /
это ограничивает соответствия шарика каталогами! (Если необходимо включать имена скрытого файла, запускающиеся с a .
, включите 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...
(если таковые имеются), и добавляет пути всех подобранных файлов.