LINUX.ORG.RU

bash как переименовать файлы?

 , , ,


0

1

Есть переменная, которая выводит список файлов в каталоге

name=$(find /path/to/dir/ -type f | awk -F '/' '{print $NF;}') 
Есть другой каталог в котором содержится файл: /path/to/dir2/file.sh Нужно получить в каталоге /path/to/dir3/ файлы (копию файла file.sh), но c именем как в переменной $name, количество файлов как в переменой:
cl=$(find /path/to/dir/ -type f | wc -l)

mkdir /path/to/dir3/
cp -R /path/to/dir2/* /path/to/dir3/
cd /path/to/dir3/
for ((i=0; i<$cl; i++));do 
cp file.sh $i.sh
done

Спасибо.


name=$(find /path/to/dir/ -type f | awk -F '/' '{print $NF;}') 

Это можно и нужно заменить на

name=$(find /path/to/dir/ -type f -printf "%f\n")
find /path/to/dir/ -type f -printf "%f\n" | while read fname ; do 
cp /path/to/dir2/file.sh "/path/to/dir3/$(fname).sh"
done

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Является ли \n достаточно надёжным разделителем, или стоит пойти до конца?

anonymous
()
Ответ на: комментарий от ving2

А почему лучше так find /path/to/dir/ -type f -printf «%f\n» ?

Зачем вызывать ещё одну программу, если всё умеет делать find?

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

если из этих соображений, то конечно, а так awk наверно в каждом дистре из каробки есть.

ving2
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.