У меня есть файлы в подкаталогах A, B, C. В каждом каталоге есть файлы с разными именами, скажем, 1.txt 2.txt 3.txt в каждом, хотя имена как таковые не имеют отношения. Я хочу запустить сценарий оболочки bash для рекурсии в каждый из них, чтобы файлы в каждом имели префикс с именами каталога хранения, поэтому в этом примере они переименованы в A_1.txt, A_2.txt A_3.txt B_1.txt и т. Д.
У меня сейчас есть
#!/bin/bash
for d in ./*/ ;
do cd "$d" ;
for f in "$arg" ;
do echo mv "$f" "${PWD##*/}""_""${f/_*_/_}";
done
done
но это не удается, и я не понимаю, почему. Благодарен за идеи.
Эта версия работает для файлов с одним именем с аргументом, переданным в сценарий оболочки, но, конечно, не имеет рекурсии в подкаталоги, хотя я могу использовать ее с командой apply для массовой обработки файлов.
#!/bin/bash
for f in "$1" ;
do mv "$f" "${PWD##*/}""_""${f/_*_/_}";
done
#!/bin/bash
for i in $(ls); do # runs through the 'items' in this dir
if [ -d $i ]; then # if this is a dir
fname=${i##*/} # pick up the dir name which will be used as prefix
echo $fname
cd $i # move into the dir
for z in *; do # loop over files
echo $z
mv $z ${fname}_${z} # put the prefix to the file.
done
cd ..
fi
done