Самый безопасный способ работы с произвольными именами файлов - использовать find
-exec
вариант. Это запустит указанную команду для каждого файла / каталога, найденного find
(из man find
):
-exec command ;
Execute command; true if 0 status is returned. All following
arguments to find are taken to be arguments to the command until
an argument consisting of `;' is encountered. The string `{}'
is replaced by the current file name being processed [...]
Итак, вы можете сделать:
find "$REP_RECEP" -name "*META*" -exec awk -F'|' '{print NF; exit}' {} \;
Пример подхода find. -type f ! -path $0
. Обратите внимание, что сценарий сообщает только foo.sh
в каталоге "d" . Не foo.sh
в текущем каталоге.
$ find. -print
.
./a
./b
./c
./foo.sh
./d
./d/foo.sh
$ cat foo.sh
#!/bin/bash
for f in $(find. -type f ! -path $0); do
echo $f
done
$./foo.sh
./a
./b
./c
./d/foo.sh
$
В качестве альтернативы попробуйтеfor f in $(find. -type f | grep -v "^\./foo\.sh$"); do
Что не так с:
for f in $(find. -type f); do
case $f in
*/$0|$0)
continue
;;
*)
echo 'Do something'
;;
esac
fi
done