Bash 删除小于1英寸大小的文件并提取文件名

Bash 删除小于1英寸大小的文件并提取文件名,bash,sed,awk,find,cut,Bash,Sed,Awk,Find,Cut,我正在远程集群上工作,并提供数千份工作。有些工作很早就崩溃了。我需要将这些作业(小于1KB)的输出文件移动到另一个文件夹,然后重新启动它们。我想find可以通过以下方式移动它们: find . -size -1000c -exec mv {} ../crashed \; 但我还需要重新启动这些崩溃的工作。在输出文件夹中的一堆文件夹中输出文件,我需要单独的文件夹名和文件名(不带extantion) 我想sed或/和awk可以很容易做到这一点,但我不知道如何做到。顺便说一句,我正在处理bashsh

我正在远程集群上工作,并提供数千份工作。有些工作很早就崩溃了。我需要将这些作业(小于1KB)的输出文件移动到另一个文件夹,然后重新启动它们。我想find可以通过以下方式移动它们:

find . -size -1000c -exec mv {} ../crashed \;
但我还需要重新启动这些崩溃的工作。在输出文件夹中的一堆文件夹中输出文件,我需要单独的文件夹名和文件名(不带extantion)

我想sed或/和awk可以很容易做到这一点,但我不知道如何做到。顺便说一句,我正在处理bashshell

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

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

但是使用sedawk不是更好吗?如何使用呢?

Sed是一个流编辑器,由于您没有更改任何内容,因此在本例中我不会使用它。您可以使用awk而不是像这样切割:

FOLDER=$(echo "${i%.*}" | awk -v FS="/" '{ print $2 }')
其中,
-v FS=“/”
指定变量FS(字段分隔符,是一个斜杠,与在cut中使用-d选项的方式相同),并且
print$2
告诉awk仅打印第二个字段

这同样适用于你那里的其他说明。在你的例子中,你所要做的是足够简单的,所以cut实际上就是把它切掉:D

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

编辑:

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