删除小于特定大小的文件并提取文件名

时间:2013-06-05 08:38:16

标签: bash sed awk find cut

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

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

但使用 sed awk 会不会更好?怎么样?

1 个答案:

答案 0 :(得分:1)

Sed是一个流编辑器,因为你没有改变任何东西,所以我不会在这种情况下使用它。您可以使用awk而不是像这样剪切:

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

其中-v FS="/"指定变量FS(字段分隔符,是斜杠,与切割中的-d选项相同)和print $2告诉awk仅打印第二个领域。

你在那里的其他指令也一样。在你的情况下,你必须做的很简单,所以实际切割切割它:D

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

修改

请注意我在这里使用gawk(GNU的awk实现)。我不确定你是否可以在其他实现中使用-v选项传递变量值,他们将有办法实现它。