【问题标题】:remove files less than a cetain size and extract filenames删除小于特定大小的文件并提取文件名
【发布时间】:2013-05-31 20:57:57
【问题描述】:

我正在远程处理集群并提供数千个工作。一些工作提前崩溃。我需要将这些作业的输出文件(小于 1KB)移动到另一个文件夹并重新启动它们。我猜 find 可以通过以下方式移动它们:

find . -size -1000c -exec mv {} ../crashed \;

但我还需要重新启动这些崩溃的作业。输出文件夹中一堆文件夹中的输出文件,我需要单独的文件夹名和文件名(不带扩展名)。

我猜 sed 或/和 awk 可以轻松做到这一点,但我不知道如何。顺便说一句,我正在研究 BASH shell。

我正在尝试使用 cut,这似乎有效:

for  i in $( find . -size -1000c )
do
FOLDER=$(echo "${i%.*}" | cut -d'/' -f2)
FILENAME=$(echo "${i%.*}" | cut -d'/' -f3)
done

但是使用 sedawk 不是更好吗?怎么做?

【问题讨论】:

    标签: bash sed awk find cut


    【解决方案1】:

    Sed 是一个流编辑器,由于您没有更改任何内容,因此在这种情况下我不会使用它。你可以像这样使用 awk 而不是 cut:

    FOLDER=$(echo "${i%.*}" | awk -v FS="/" '{ print $2 }')
    

    -v FS="/" 指定变量 FS(字段分隔符,是一个斜线,有点像你在 cut 中使用 -d 选项所做的一样),print $2 告诉 awk 只打印第二个字段。

    您那里的其他指令也是如此。在你的情况下,你要做的很简单,所以实际上 cuts 它:D

    我通常将 awk 用于更复杂的任务,涉及多个文件和/或数学计算。

    编辑:

    请注意,我在这里使用的是 gawk(GNU 的 awk 实现)。我不确定您是否可以在其他实现中使用 -v 选项传递变量值,他们会有自己的方式来做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-20
      • 2019-11-19
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多