複数のサブディレクトリを新しい場所に移動して名前を変更する

複数のサブディレクトリを新しい場所に移動して名前を変更する

私のディレクトリは次のように設定されます。

  • dir 1
    • 001
      • 11-20-2001-RT SIMULATION-57976
    • 002
      • 11-20-2001-RT SIMULATION-30560
    • 003
      • 08-24-1998-RT SIMULATION-72882

待って、約250項目があります。私の目標は、文字列を含む各サブディレクトリをRT SIMULATION別のディレクトリに移動することです。つまりdir 2、名前を対応する親ディレクトリに変更することです。だから探しています。

  • dir 2
    • 001(*11-20-2001-RT SIMULATION-57976上記の例と一致する必要があります)
    • 002
    • 003

これまで、RT SIMULATIONこのコードを使用してこれらのディレクトリを見つけることができます。for i in $(find /dir1/*/* -name "*RT SIMULATION*" -type d); echo "$i"; done;

dir 2これで、上記の親ディレクトリに基づいてこれらのディレクトリを移動して名前を変更する必要があります。助けやアドバイスはありますか?

ベストアンサー1

そしてzsh

autoload -Uz zmv
zmv 'dir 1/(*)/*RT SIMULATION*(#q/)' 'dir 2/$1'

を使用し、bashGNUシステムを想定すると、次のことができます。

(
  shopt -s nullglob
  ret=0
  for dir in 'dir 1'/*/*'RT SIMULATION'*; do
    [[ -d $dir && ! -L $dir ]] || continue
    parent=${dir%/*}; parent=${parent##*/}
    mv -iT -- "$dir" "dir 2/$parent" || ret=$?
  done
  exit "$ret"
)

ところで、参照してください検索結果を繰り返すのはなぜ悪い習慣ですか?あなたのfor i in $(find...

おすすめ記事