入れ子になったフォルダの名前を変更するには?

入れ子になったフォルダの名前を変更するには?

だから私は次にフォーマットされたフォルダをたくさん持っており .../course/year/...、フォーマットが次に変わるように頻繁に再構成します.../year/course/...。私はいつもシェルスクリプトを書く方法を学びたかったのですが、オートメーションとシェルスクリプトも初めてですが、私が好きなフォルダへのパスを入力したときに知っているスクリプトを作成したかったのです。名前を変更します。たとえば、次のコマンドがあります。sh reorganize.sh .../course/year/... これは、コースフォルダと年フォルダを「交換」します。年フォルダ内にいくつかのコンテンツがあります。交換した後は、年フォルダのすべての内容がコースフォルダにあるはずです。複数の年のフォルダもあるため、2018、2019、2020はすべてコースフォルダ内に独自のフォルダがあります。これを行う方法についてご協力いただきありがとうございます。

PS - 私がかなり初心者であることは、私が変数、パイプ、基本コマンドの基本を知っていますが、それ以上ではないという意味です。

ベストアンサー1

#! /bin/bash

rootdir="$PWD"
shopt -s nullglob

for course in *; do
    pushd "$course" >/dev/null
    for year in *; do
        mkdir -p "${rootdir}/${year}"
        mv --no-target-directory "$year" "${rootdir}/${year}/${course}"
    done
    popd >/dev/null
    rmdir "$course"
done

rootdir="$PWD"ディレクトリ間を移動するときに絶対パス()とpushd/を代わりに使用するpopdとエラーが少なくなると思いますcd。この単純なケースではこれは必要ありません。

mv --no-target-directoryこれにより、スクリプトが複数回実行される(以前の実行が中断された場合)、意図しない結果が発生するのを防ぐことができます。同様に、この場合(ファイルシステム内で移動)、危険な状況は発生しないと主張することができます。mv動作は、ターゲットディレクトリ/新しいパスが存在するかどうかによって異なります。このオプションを使用すると、これは発生しません。

おすすめ記事