Организация папок
У меня есть несколько папок ("амазонка", "нигер", "рейн",...). Внутри каждой из них у меня есть несколько подпапок ("gfdl", "hadgem", "ipsl",...). Каждая подпапка состоит из 5 подпапок (например, в "amazon", подпапка "gfdl" состоит из 5 подпапок "amazon_gfdl", "amazon_gfdl1",..., "amazon_gfdl5"); а остальные подпапки следуют той же структуре (например, в подпапке "amazon" "ipsl" состоит из 5 подпапок "amazon_ipsl", "amazon_ipsl1", "amazon_ipsl2",... до "amazon_ipsl5".
У меня есть огромное количество папок, следующих той же структуре организации. Поэтому мой вопрос заключается в следующем:
Как организовать каждую папку и подпапку таким образом, чтобы в каждой подпапке ("gfdl", "hadgem", "ipsl",...) было создано 4 новых каталога ("1", "2", "3", "4"); и затем, что папка, например, "amazon_gfdl" (уже присутствует в "gfdl"), копируется в каждый из этих новых каталогов и, наконец, что "amazon_gfdl1" перемещается в новый каталог "1", "amazon_gfdl2" перемещается в новый каталог "2" и так далее!
В настоящее время я использую команду cp и перемещаюсь в каждой подпапке, но это не очень эффективно, и мне может понадобиться дополнительная жизнь, чтобы закончить эту задачу, как эта! Поэтому любые советы или подсказки будут с благодарностью. Большое вам спасибо!
2 ответа
Вы можете запустить этот скрипт, он только выводит команды. Когда он делает то, что вы хотите, замените dont=echo
по dont=
то есть ничего.
dont=echo
for dir in */*
do if ! [[ "$dir" =~ [1234]$ ]]
then file=${dir/\//_}
for i in 1 2 3 4
do $dont mkdir $dir/$i
$dont cp -r $dir/$file $dir/$i
$dont mv $dir$i $dir/$i
done
fi
done
Вы должны попробовать написать что-то похожее на это:
for dir in */; do
echo "Moving into $dir"
cd "$dir"
for subDir in */; do
echo "Moving into $subDir"
cd "$subDir"
for num in 1 2 3 4; do
echo "Moving $dir_$sudDir$num to $num"
mv -vRi "$dir_$sudDir$num" "$num"
done
done
done
Я не проверял это и не рекомендую запускать его до тех пор, пока вы его не протестируете. Некоторые флаги mv не будут работать в Mac OSX из-за версии bash, которую он запускает, но он должен работать в Ubuntu.
Опять же - возитесь с приведенным выше кодом, пока он не сделает то, что вы хотите - вы можете посмотреть в bash для циклов в целом, или, возможно, используя find
Команда выполнить аналогичный блок кода в одну строку.
Связанный: Как мне переименовать каталог через командную строку?