mv несколько каталогов в одни и те же каталоги

Я хочу переместить несколько каталогов в каталоги, если существует второй каталог.

Initial:

dmv/toto/toto0
dmv/toto1/toto1
dmv/toto2/toto2

dmv/toto0/toto00
dmv/toto2/toto02

Final:

dmv/toto/toto0
dmv/toto1/toto1
dmv/toto2/toto2

dmv2/toto0/toto00
dmv2/toto0/toto0
dmv2/toto2/toto02
dmv2/toto2/toto2

Я пробую это, но я не проверяю, существует ли каталог:

~/dmv/$ for i in $(ls); do mv "${i}"/* ../dmv2/"${i}"; done
0
01.04.2019, 19:17
1 ответ

Ваши начальный и конечный этапы вывода списка каталогов несколько загадочны, поэтому я не уверен в том, что именно вы запрашиваете. Возможно, это вам немного поможет. Сценарий имеет тенденцию быть более читабельным; назовите это mvDir.shнапример:

#!/usr/bin/bash
for file in./*; do
    [ -d "${file}" ] && [ mkdir -p../dmv2/"${file}" ] \
    && mv "${file}"/*../dmv2/"${file}" 
done

Убедитесь, что:

  • место, где путь к вашему сценарию включается в вашу PATHпеременную окружения. В cli выполните :$ echo "$PATH"), чтобы проверить это.
  • скрипт является исполняемым. На кли сделай:$ chmod u+x mvDir.sh

Чтобы запустить его, просто перейдите в каталог, содержащий скрипт и каталоги, имена которых вы хотите проанализировать, и в cli выполните:$./mvDir.sh

Если вы настаиваете на неуклюже длинном -вкладыше, делайте это в cli:

$ for file in./*; do [ -d "${file}" ] && [ mkdir -p../dmv2/"${file}" ] && mv "${file}"/*../dmv2/"${file}"; done

Существуют и другие, более продвинутые способы сделать это, например. с участием find.

0
28.01.2020, 03:52

Теги

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