2013-07-22 3 views
1

Каков наилучший способ печати всех файлов, перечисленных в каталоге, и количества файлов с использованием цикла for? Есть ли лучше сделать это?Bash - Печать файлов в каталоге

#!/bin/bash 

target="/home/personal/scripts/07_22_13/ford/$1" 

for file in "$target"/* 
do 
    printf "%s\n" "$file" | cut -d"/" -f8 
done 
+1

Обратите внимание, что сценарий не знает '$ вар дома', так что вы должны использовать '/ дома ...'. – fedorqui

+0

Есть ли способ, возможно, не включать весь путь? Это определенно облегчило бы пользователя. @fedorqui – theGrayFox

+0

Возможно, вы можете определить исходную структуру пути, например 'path =/home/this_user', а затем проверить' $ path/$ directory'. – fedorqui

ответ

4

Вот решение:

#!/bin/bash 

target="/home/personal/scripts/07_22_13/ford/$1" 
let count=0 
for f in "$target"/* 
do 
    echo $(basename $f) 
    let count=count+1 
done 
echo "" 
echo "Count: $count" 

Решение 2

Если вы не хотите иметь дело с разбора путь, чтобы получить только имена файлов, другое решение является cd в справочник, о котором идет речь, и ваша компания, а также cd назад, где вы были:

#!/bin/bash 

target="/home/personal/scripts/07_22_13/ford/$1" 
pushd "$target" > /dev/null 
let count=0 
for f in * 
do 
    echo $f 
    let count=count+1 
done 
popd 
echo "" 
echo "Count: $count" 

Команды pushd и popd будут переключаться в каталог, а затем возвращаться.

+0

Что бы вы использовали для форматирования вывода файлов, чтобы просто увидеть имена файлов? Я закончил тем, что использовал разрез, но что бы вы предложили? – theGrayFox

+0

Посмотрите мое обновление: используйте 'basename' –

+0

Я придумал это: awk -F '/' '{print $ 8 | "sort"} 'Я посмотрю на basename всего за секунду. – theGrayFox

0
target="/home/personal/scripts/07_22_13/ford/$1" 
for f in "$target"/*; do 
    basename "$f" 
done | awk 'END { printf("File count: %d", NR); } NF=NF' 

basename "$f" будет автоматически выводить каждое имя файла на отдельной строке, а код AWK будет печатать общее количество обработанных записей, которое в этом случае является количество файлов в списке. Кроме того, awk автоматически распечатает имена файлов из-за шаблона NF=NF в конце. Я бы сказал, что изучение awk может быть выгодным, как показано здесь. :-)

0

Вам часто приходится печатать и экспортировать содержимое ваших каталогов (в виде папок) в файлы PDF или HTML? С помощью Print Maestro вы можете перемещаться по структуре каталогов на своем жестком диске и печатать или экспортировать список файлов в различные форматы. Все делается быстро и легко с помощью интуитивно понятного графического интерфейса, разработанного в стиле «просмотр и клик».

Будучи новым и элегантным решением для печати в печатном виде, Print Maestro предлагает вам возможность сделать задачу печати в каталоге более легкой и приятной. Распечатайте структуру папок или фактическое содержимое ваших папок; конвертировать их в файлы PDF или создавать чистую HTML-страницу для публикации на веб-сайте; сделайте все за один клик.

Print File List

Смежные вопросы