У меня есть несколько папок ("амазонка", "Нигер", "Рейн"...). В каждом из них у меня есть несколько подпапок ("gfdl", "hadgem", "ipsl"...). Каждый подпапки составлены 5 подпапками (например, в "амазонке", подпапка "gfdl" составлена 5 подпапками 'amazon_gfdl', 'amazon_gfdl1'..., 'amazon_gfdl5'); и другие, подпапки следуют за той же структурой (например, в подпапке "амазонки" "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 команды и перемещение в каждом подпапки, но это не действительно эффективно, и мне, возможно, понадобилась бы дополнительная жизнь для окончания этой задачи как этот! Для этого любой помогает, или подсказка будет значительно цениться. Искренне благодарит Вас!
Можно запустить этот скрипт, он действительно только повторяет команды. Когда это делает то, что Вы хотите, заменяете 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 из-за версии удара, который она выполняет - но это должно работать над Ubuntu.
Снова - бездельничают с вышеупомянутым кодом, пока он не делает то, что Вы хотите - Вы могли бы хотеть изучить удар для циклов в целом или возможно использование find
команда для выполнения подобного блока кода в одной строке.
Связанный: , Как я переименовываю каталог через командную строку?