移動中に子ディレクトリの名前を変更しながら、何百もの子ディレクトリインスタンスをある親ディレクトリから別の親ディレクトリに移動しようとします。私のディレクトリは数値セットです。
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
サブディレクトリを再帰的に移動しないので、ここでは役に立ちません。