Как я могу использовать команду 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... (если есть) и добавляет пути ко всем сопоставленным файлам.

Другие вопросы по тегам