Перебирая все файлы в каталоге

Я хочу написать сценарий оболочки, который будет перебирать все файлы в каталоге и выводить "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}'