2013-06-05 49 views
0

我正在远程处理群集并提供几千个作业。有些工作很早就崩溃了我需要将这些作业的输出文件(小于1KB)移动到另一个文件夹并重新启动它们。我想找到可以像他们一样移动它们:删除小于cetain大小的文件并提取文件名

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

但我还需要重新启动这些崩溃的作业。在输出文件夹中的一堆文件夹中输出文件,我需要分开文件夹名称和文件名(不含任何隔离)。

我想sed或/和awk可以轻松做到这一点,但我不知道如何。顺便说一句,我在BASH shell上工作。

我试图用切割,这似乎是工作:

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

但使用sed的AWK岂不是更好?如何?

回答

1

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

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

其中-v FS="/"指定变量FS(字段分隔符,是一条斜线,一种同样的,你在切-d选项做什么)和print $2告诉awk只打印第二个字段。

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

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

编辑:

请注意,我用的gawk这里(由GNU awk的实现)。我不确定你可以在其他实现中通过-v选项传递变量值,他们将有办法做到这一点。

+0

它的工作表示感谢。 – maynak

相关问题