Добавлять номер к именам файлов при выравнивании структуры каталогов в Linux - PullRequest
1 голос
/ 25 февраля 2010

У меня есть структура каталогов, которая выглядит следующим образом:

/a/f.xml
/b/f.xml
/c/f.xml
/d/f.xml

Что я хочу сделать, это скопировать все xml-файлы в один каталог, например так:

/e/f_0.xml
/e/f_1.xml
/e/f_2.xml
/e/f_3.xml

Как я могу сделать это эффективно в оболочке Linux?

Ответы [ 3 ]

1 голос
/ 25 февраля 2010
let count=0
for file in $(ls $dir)
do
mv $file $newdir/${file%%.*}_$count.${file##*.}
let count=count+1
done
0 голосов
/ 26 февраля 2010
#!/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
0 голосов
/ 25 февраля 2010
#!/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;
...