Что вы можете сделать, так это объявить функцию shell , и передать каждый результат find в цикл while, который будет вызывать эту функцию для каждого каталога.
#!/bin/bash
function f
{
echo "THIS IS " $(pwd)
ls
}
find . -maxdepth 1 -type d -name "bin" -printf "%P\n" | while read DIRNAME;
do
cd $DIRNAME
f
done
Вот пример выполнения:
$ ./findAndFunction.sh
THIS IS /home/xieerqi/bin
autostart-script.sh c java perl python README.md sergrep shell
Отдельно протестируйте извлечение архива, затем подсчитайте количество файлов, если оно прошло успешно. Если вы не знаете имя каталога, в который извлекается архив, создайте новый каталог и извлеките туда архив. Может быть, что-то вроде этого:
#!/bin/sh
if [ -d extracted ]; then
echo 'please remove directory "extracted"' >&2
exit 1
fi
mkdir extracted
if ! tar -xvz -f bad_file.tar.gz -C extracted; then
echo 'extraction failed' >&2
echo 'directory "extracted" may contain partially extracted archive' >&2
exit 1
fi
# extraction of archive was successful, count files extracted
find extracted -type f -exec echo. ';' | wc -l
find
в конце выводит точку для каждого файла в каталоге extracted
.wc -l
подсчитывает количество точек. Мы делаем это таким образом, если путь в извлеченном каталоге содержит встроенную новую строку.