0

ディレクトリを取得し、そこからすべてのファイルを新しいディレクトリにコピーし、新しいディレクトリ内のすべてのファイルの名前を変更して、拡張子の前に -BACKUP を含めるスクリプトを作成しています。

これまでのところ、私は持っています:

dir1=$1
dir2=$2

mkdir $dir2
cp -r $dir1/. $dir2

for i in $dir2
do
file=$(basename "$i")
b=${file%.*}
c=${file#"$stub"}
d=-BACKUP
e=$b$d$c
mv $i $e

done

これはディレクトリの名前を変更するだけですが、ディレクトリ内のすべてのファイルではありません。

私は何を間違っていますか、これにどのようにアプローチしますか?

4

2 に答える 2

0

あなたはいくつかのグロブを実行する必要があります:

for i in "$dir2"/*

(これはキャッチせず.dotfiles、ファイルとディレクトリの両方を列挙するため、これらのいずれかが問題になる場合は、もう少しロジックが必要になる可能性があることに注意してください。)

コピー後に空になる可能性がある場合は$dir2、次を追加します。

shopt -s nullglob

forその場合、ループがまったく実行されないようにする前に。(そう$dir2/*しないと、文字通り$i望ましくない状態になります。)

mv $i $e

作成した方法のパスが含まれていないため、$e機能しません。試す:

mv "$i" "$dir2/$e"

(名前にスペースが含まれているファイルが予想される場合は、これらすべての変数を引用符で囲む必要があります。)

于 2012-10-11T18:14:26.437 に答える
0

それをサポートするシステムでは、次のように使用findします。rename

cp -R "$dir1" "$dir2"
find "$dir2" | xargs rename 's/$/-BACKUP/'
于 2012-10-11T18:18:59.053 に答える