パターンに基づいてディレクトリの名前を変更する

パターンに基づいてディレクトリの名前を変更する

みんな名前を変更したい目次同じディレクトリ内のディレクトリがパターンと一致する場合、検索するパターンは次のようになります。user1 [files.sentfrom.com] - 例: ディレクトリ名は次のとおりです。

user1 [files.sentfrom.com] - Directory-Subject

目次の前の画像。 前の画像

ディレクトリ名を次のように変更したいと思います。

Directory-Subject (this could have different type of text)

これはディレクトリ名を変更した後のイメージです。ディレクトリ内の他のフォルダやファイルの名前は変更されません。 名前を変更した後の画像は次のとおりです。ディレクトリの他の名前は変更されません。

正規表現を使用して一度にこれを実行できますか?それともforループが必要ですか?私も別の方法で開いています。

ありがとう

答え1

for name in *\[*\]\ -\ *; do
  if [[ -d "$name" ]] && [[ ! -e "${name#* - }" ]]; then
    mv "$name" "${name#* - }"
  fi
done

上記のループは動作するbashksh93、少なくともファイル名のワイルドカードパターン*\[*\]\ -\ *(角かっことスペースはシェルからエスケープする必要があります)と一致する現在のディレクトリのすべての名前を繰り返し、そのディレクトリがディレクトリであり、変更されたディレクトリを使用できることを確認するためにテストしますします。名前はまだ存在しません。すべてが順調に進むと、ディレクトリ名が変更されます。

パラメータ拡張は${name#* - }変数の値を取得し、変数の先頭から最初の発生部分(スペース - ダッシュ - スペース)まですべてをname削除します。␣-␣

答え2

次の目的で使用できますrename

rename 's/.* ([^ ]*)$/$1/' *

最後のスペースまで、ディレクトリ内のすべてのファイル名からすべての文字を削除します。

答え3

検索と名前変更は強力なチームです。この-0オプションを使用すると、すべての可能なファイル名がきちんと処理されます。

find -maxdepth 1 -type d -print0 | xargs -0 rename s/.*Directory-/Directory-/

関連情報