Организация папок

У меня есть несколько папок ("амазонка", "Нигер", "Рейн"...). В каждом из них у меня есть несколько подпапок ("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 команды и перемещение в каждом подпапки, но это не действительно эффективно, и мне, возможно, понадобилась бы дополнительная жизнь для окончания этой задачи как этот! Для этого любой помогает, или подсказка будет значительно цениться. Искренне благодарит Вас!

1
задан 2 August 2015 в 17:04

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
1
ответ дан 7 December 2019 в 16:12

Необходимо попытаться писать что-то подобное этому:

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 команда для выполнения подобного блока кода в одной строке.

Связанный: , Как я переименовываю каталог через командную строку?

0
ответ дан 7 December 2019 в 16:12

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

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