2012-09-14 155 views
-1

我该如何循环这一行来将所有jpg文件打印到文本文件?在bash中循环一行命令

stat --printf="%s" *.jpg >> results.txt 

你会如何还能够打印RESULTS.TXT根据文件的大小?代码将如何显示?文件的确切大小是40318

+2

请描述你想要更详细地实现什么,很难说出你想要循环的东西。此外,请发布您到目前为止所尝试的内容。 – Mat

+0

我需要将文件名和文件大小打印到.txt文件。我需要弄清楚如何让它看起来在目录中。 –

+0

恐怕目前还不清楚你想要什么。你想打印出所有.jpg文件的大小吗?或者只有尺寸为40318的那些?另外,您是否只对特定目录或子目录中的jpg文件感兴趣? –

回答

2

您已经在打印所有* .jpg文件的结果。唯一的问题是,通过使用--printf="%s",您将更改stat的输出格式以仅打印大小(每个项目之间没有换行符或空格)。

尝试,而不是:

stat --printf="%s\n" *.jpg >> results.txt 
# OR 
stat -c "%s" *.jpg >> results.txt 

要打印旁边的大小的文件名,请尝试:

stat --printf="%n %s\n" *.jpg >> results.txt 
# OR 
stat -c "%n %s" *.jpg >> results.txt 
+0

所以,如果我只想打印一个基于大小的文件名这将是正确的? $ filesize = 123456 stat --printf =“%s $ filesize \ n”* .jpg >> results.txt –

+0

编号“--printf”仅控制您如何打印输出。你不能用它来过滤输出。您将需要使用不同的命令,或者使用循环和'if'语句来过滤'stat'的输出。 –

+0

你可以根据文件的大小声明一个变量吗?如果你知道它的大小可以写在if语句之前? –

0

这是我的理解是要打印所有.JPG的大小和文件名文件转换为文本文件。为此,您可以用组合找到LS,然后用AWK格式化输出:

find . -name "*.jpg" | xargs ls -ahl $1 | awk '{print $5" "$9}' > results.txt 

请注意,该脚本将递归搜索从目录中,你与指定找到