私は次のようなディレクトリ構造を持っています:
/a/f.xml
/b/f.xml
/c/f.xml
/d/f.xml
私がやりたいのは、すべてのxmlファイルを次のように1つのディレクトリにコピーすることです。
/e/f_0.xml
/e/f_1.xml
/e/f_2.xml
/e/f_3.xml
Linuxシェルでこれを効率的に行うにはどうすればよいですか?
私は次のようなディレクトリ構造を持っています:
/a/f.xml
/b/f.xml
/c/f.xml
/d/f.xml
私がやりたいのは、すべてのxmlファイルを次のように1つのディレクトリにコピーすることです。
/e/f_0.xml
/e/f_1.xml
/e/f_2.xml
/e/f_3.xml
Linuxシェルでこれを効率的に行うにはどうすればよいですか?
let count=0
for file in $(ls $dir)
do
mv $file $newdir/${file%%.*}_$count.${file##*.}
let count=count+1
done
#!/bin/bash
COUNTER=0;
for i in */f.xml;
do
BASE=`expr "$i" : '.*/\(.*\)\..*'`;
EXT=`expr "$i" : '.*/.*\.\(.*\)'`;
mv "$i" e/"$BASE"_"$COUNTER"."$EXT";
COUNTER=`expr $COUNTER + 1`
done;
#!/bin/bash
for file in /{a,b,c,d}/f.xml
do
name=${file##*/}
name=${name%.xml}
((i++))
echo mv "$file" "/destination/${name}_${i}.xml"
done
bash 4.0(再帰用)
shopt -s globstar
for file in /path/**/f.xml
do
name=${file##*/}
name=${name%.xml}
((i++))
echo mv "$file" "/destination/${name}_${i}.xml"
done