2013-07-22 158 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

注意,脚本不知道'$ HOME'变种,所以你必须使用'/家...'。 – 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" 

pushdpopd命令将切换到一个目录,然后返回。

+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