Переместите все файлы и каталоги к целевому каталогу

У меня есть структура каталогов:

~/MYDIR/
  /DESTINATIONDIR/
  /DIR1/
  /DIR2/
  /file1
  /file2

Я должен переместиться DIR1, DIR2,file1,file2 кому: DESTINATIONDIR

Что самый изящный и оптимальный путь состоит в том, чтобы сделать это от терминала?

UPD: предположите, что у нас есть намного больше файлов и директоров с различными именами

2
задан 14 January 2016 в 18:06

2 ответа

Существует три способа, которыми я рассмотрел бы выполнение этого.

Hacky и питаемый ошибкой, "ПЕРЕМЕЩАЮТ ВСЕ ВЕЩИ"

mv ~/MYDIR/* ~/MYDIR/DESTINATIONDIR

, Это попытается переместить место назначения в себя и взорвется:

mv: cannot move ‘~/MYDIR/DESTINATIONDIR’ to a subdirectory of itself, ‘~/MYDIR/DESTINATIONDIR/DESTINATIONDIR’

, Но это переместит (почти) все остальное. Таким образом, это работает, но это - определенная путаница. Если необходимо соответствовать скрытым файлам, работать shopt -s dotglob заранее, и это будет работать.

Перемещение списка файлов вручную

, Учитывая короткий список вещей, мы можем довольно легко просто перечислить их с небольшим расширением удара:

 mv ~/MYDIR/{DIR{1,2},file{1,2}} ~/MYDIR/DESTINATIONDIR

при необходимости в скрытых файлах с этим методом, просто включайте их в список.

, Если этот список прибывает из чего-то еще (например, find) может быть трудно гарантировать, что место назначения является последним аргументом. Можно переместить место назначения в переднюю сторону с -t аргумент. Это - ужасный пример, но выделяется при необходимости в нем:

find ~/MYDIR/ -maxdepth 1 ! -name DESTINATIONDIR -exec mv -t ~/MYDIR/DESTINATIONDIR {} +

Инверсия globbing с shopt, элегантность определяется.

Так позволяют нам подвести баланс между ручным списком и подстановочными знаками. Путем включения расширенных globbing функций в Bash мы можем выбрать (почти) все , но целевой каталог.

shopt -s extglob
mv ~/MYDIR/!(DESTINATIONDIR) ~/MYDIR/DESTINATIONDIR

, Если необходимо соответствовать скрытым файлам, работайте shopt -s dotglob заранее, и это будет работать.

7
ответ дан 2 December 2019 в 01:36

что относительно:

cd ~/MYDIR
mv DIR* file* DESTINATIONDIR
0
ответ дан 2 December 2019 в 01:36

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

Похожие вопросы: