在多个文件上调用Stat - Linux

时间:2013-08-12 11:07:30

标签: linux

所以我需要在很多苍蝇上调用stat并将结果输出到文本文件中。我试过这个

stat 'Dir/$file_names' -c %n,%s,%y >> meta.txt

$ file_name的格式为:

"file1" "file2" "file3"

但它不起作用,因为当调用stat时,引号仍保留在路径中。

有没有办法删除它们或者可能循环遍历字符串?

另外一些文件名有空格,所以我引用可能需要指定文件

使用以下命令

设置文件名字符串
file_name=`ssh user@server  find /attachments -type f -mtime -100 -daystart -printf '\"%f\"\ ' `

3 个答案:

答案 0 :(得分:1)

为了扩展变量,请使用双引号:

stat "Dir/$file_names" -c %n,%s,%y >> meta.txt

如果$file_names包含多个文件名,则可以使用for循环并以使用分隔符的方式格式化变量。例如,您可以使用:分隔文件名,而不是:

"file1" "file2" "file3"

改为使用:

file1:file2:file3

然后将IFS特殊变量(它被称为“内部字段分隔符”并被shell识别)设置为:并使用for循环:

IFS=":"
for f in $file_names
do
    stat "Dir/$f" -c %n,%s,%y >> meta.txt
done

如果您只需要一个命令,这也可以是一行代码:

IFS=":"; for f in $file_names; do stat "Dir/$f" -c %n,%s,%y >> meta.txt; done

即使您的文件名包含空格,这也将确保一切正常,如:

file1:file with spaces:even   more   spaces

答案 1 :(得分:1)

对此进行了尝试,并以此方式工作:

list_of_file="Dir/file1 Dir/file2 Dir/file3"
stat $list_of_file -c %n,%s,%y >> meta.txt

meta.txt将包含所有文件的统计信息输出。

答案 2 :(得分:0)

尝试

 for f in $file_names ; do
    stat Dir/$f -c %n,%s,%y >> meta.txt
 done

但如果你想用空格处理文件名(我尽量避免使用),这可能无法达到你想要的效果。

阅读advanced bash scripting guide