Я хочу написать сценарий оболочки, который будет перебирать все файлы в каталоге и выводить "put $ {filename}". Может кто-то указать мне верное направление?
Перебирая все файлы в каталоге
Ответ 1
Для файлов и каталогов, не рекурсивных
for filename in *; do echo "put ${filename}"; done
Только для файлов (исключая папки), не рекурсивный
for file in *; do
if [ -f "$file" ]; then
echo "$file"
fi
done
Рекурсивное решение см. в ответе Беннет Йи.
Ответ 2
рекурсивно, включая файлы в подкаталогах?
find dir -type f -exec echo "put {}" \;
только файлы в этом каталоге?
find dir -maxdepth 1 -type f -exec echo "put {}" \;
Ответ 3
Для всех папок и файлов в текущем каталоге
for file in *; do
echo "put $file"
done
Или, если вы хотите включить только подкаталоги и файлы:
find . -type f -exec echo put {} \;
Если вы хотите включить сами папки, снимите часть -type f
.
Ответ 4
Если у вас нет файлов, то вместо печати * мы можем это сделать.
format=*.txt
for i in $format;
do
if [[ "$i" == "$format" ]]
then
echo "No Files"
else
echo "file name $i"
fi
done
Ответ 5
Еще одна альтернатива, использующая ls
и sed
:
$ ls -1 <dir> | sed -e 's/^/put /'
и используя ls
и xargs
:
$ ls -1 <dir> | xargs -n1 -i%f echo 'put %f'
Ответ 6
это будет работать также рекурсивно, если у вас есть подкаталоги и файлы внутри них:
find . -type f|awk -F"/" '{print "put ",$NF}'