1

Доброго времени суток. Скрипт должен рекурсивно просматривать папки и менять расширение на первую букву у файлов, размер которых меньше заданного во втором аргументе. Первый аргумент - директория. Еще скрипт не должен менять сам себя. Что у меня неправильно?

#!/bin/bash
if [[ "$1" == "?" ]]
    then
            echo "скрипт меняет расширение на первую букву у тех файлов,\n размер которых меньше заданного во втором аргументе. "
        exit 1
fi
case $# in
        2) dirname=$1
          fsize=$2 ;;
        0) read -p "Введите адрес директории >>>  " dirname
          read -p "Введите размер файлов для замены суфикса >>>  " fsize ;;
        *) echo "Использование: скрипт директория размер"
          exit 1 ;;
esac
if [[ -d "$dirname" ]]
    then
            find "$dirname" -type f -size -$fsize not -samefile BASH_SOURCE  | while IFS='\n' read file
            do
                dir_name=$(dirname $file)
                file_name=$(basename $file)
                prefix=$(expr substr $file_name 1 1)
                suffix=${file_name##*.}
                newfilename=$dirname/${file_name%%$suffix}$prefix
            done
    else
            echo "Неправильное имя/адрес директории"
        exit 1
fi

2

Я не стал вникать, что там неправильно, но вот скрипт,
действительно обходящий каталоги рекурсивно. Называется ~/bin/set644_b

#!/bin/bash

#parameter is a directory name
/bin/chmod 755 "$1"
cd "$1"
#echo "enter in" "$1" >> ~/set644_b.out
for flnm in `/bin/ls -1` ; do
if [ -d "$flnm" ] ; then
#echo "directory" "$flnm" >> ~/set644_b.out
~/bin/set644_b "$flnm"
else
if [ -f "$flnm" ] ; then
#echo "file" "$flnm" >> ~/set644_b.out
/bin/chmod 644 "$flnm"
fi
fi
done
cd ../

Пётр.

Пётр.