フォルダ階層の再構成

フォルダ階層の再構成

以前にこの質問に関する質問/回答があった場合は申し訳ありません。しかし、私が検索した結果、必要な答えは提供されませんでした。

私の教科書の構造は次のとおりです。year/semester/course/....この階層の代わりにCourse/year/semester/....を使用したいと思います。より良い単一ファイル/フォルダ/フォルダ bashを使用してファイルを移動するにはどうすればよいですか?ラインスクリプト?年: 2006 - 2021 学期: 秋 - 春コース: 8 つの異なるコース (今は、保存したい異なるサブフォルダーが複数あります)

お時間と回答ありがとうございます。

ベストアンサー1

既存のツリーを確認するには:

# find . -type d -depth 3 -print | grep -E '20\d+' | sort
./2006/autumn/Course101
./2006/autumn/Course102
./2006/autumn/CourseA103
./2006/fall/Course101
./2006/fall/Course102
./2006/fall/CourseA103
./2006/spring/Course101
./2006/spring/Course102
./2006/spring/CourseA103
./2006/summer/Course101
./2006/summer/Course102
./2006/summer/CourseA103
./2007/autumn/Course101
./2007/autumn/Course102

次に、このようなスクリプトを使用します。

#!/bin/sh

# Takes source directories as input and copies everything to the destination
#!/bin/sh

makeNewStructure() {
    while read line; do
        newdir=$( echo "$line" |sed -e 's#^\./#/#' -e 's#\(/[^/]*\)\(/[^/]*\)\(/[^/]*\)$#.\3\1\2#' )
        mkdir -p "$newdir"
        cp -r "$line"/* "$newdir"
    done
}


find . -type d -depth 3 -print | grep -E '/20\d+/' | sort | makeNewStructure 

これは非破壊的であるため、元の構造には影響しません。

おすすめ記事