-1

所以我需要在众多苍蝇上调用 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\"\ ' `
4

3 回答 3

1

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

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

如果$file_names包含多个文件名,那么您可以使用 for 循环并以使用分隔符的方式格式化变量。例如,您可以使用:来分隔文件名,因此可以代替:

“文件 1” “文件 2” “文件 3”

改用这个:

文件 1:文件 2:文件 3

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

IFS=“:”
对于 $file_names 中的 f
做
    stat "Dir/$f" -c %n,%s,%y >> meta.txt
完毕

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

IFS=":"; 对于 $file_names 中的 f;做 stat "Dir/$f" -c %n,%s,%y >> meta.txt; 完毕

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

file1:带空格的文件:更多空格
于 2013-08-12T11:11:51.867 回答
1

试过这个,它是这样工作的:

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

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

于 2018-09-12T04:24:34.783 回答
0

试试吧

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

但是,如果您想处理带有空格的文件名(我尽量避免),这可能不会满足您的要求。

阅读高级 bash 脚本指南

于 2013-08-12T11:15:08.277 回答