子ディレクトリを新しい親ディレクトリに移動します。ここで、新しいディレクトリ名は 1 ずつ増えます。

子ディレクトリを新しい親ディレクトリに移動します。ここで、新しいディレクトリ名は 1 ずつ増えます。

移動中に子ディレクトリの名前を変更しながら、何百もの子ディレクトリインスタンスをある親ディレクトリから別の親ディレクトリに移動しようとします。私のディレクトリは数値セットです。

1000、1001、1002、1003、...、1998、1999

各ディレクトリには、次の増分ディレクトリに移動し、サブフォルダの名前を変更したい「old」(1000/old)というサブフォルダがあります。

たとえば、「1000/old」を「1001/new」に移動したいとします。

xargsを使ってみましたが、初めて使うので正しい方向に行っているかどうかはわかりません。私が望むのは次のようなものだと思います。

find 1* -name 'old' | xargs -i -t mv {} <dir+1>/new

増加(ビット)を実装する方法がわかりませんdir+1

私も許可された答えを修正しようとしました。これ問題がありますが、私の修正は機能しません(ls実際には、ディレクトリの移動/名前の変更を開始する前にコードをテストしました)。

#!/bin/bash
for x in 1*; do
  ls -d "$x/old" "${x}$i/new"
  ((++i))
done

上記の問題は、次のディレクトリが1001、1002ではなく10001、10002などになることです。

どんなアドバイスも本当にありがとうございます。

答え1

シェルは、10進整数を表す文字列を整数として扱います。名前の前にゼロなしで数字のみを含むディレクトリがある場合は、数字があり、次のことができます。山水上。

for d in 1*; do
  mv "$d/old" "$((d+1))/new"
done

スクリプトをより強力にし、サブディレクトリが実際に存在する場合にのみ移動を実行し、old必要に応じてターゲットを作成できます。

for d in 1*; do
  if [ -d "$d/old" ]; then
    mkdir -p "$((d+1))"
    mv "$d/old" "$((d+1))/new"
  fi
done

findサブディレクトリを再帰的に移動しないので、ここでは役に立ちません。

関連情報