执行删除目录中所有文件的行

时间:2015-05-17 12:26:11

标签: bash parsing

目前我正在尝试删除我正在处理的特定目录中每个文件的最后两行。我知道如何删除其中的最后两行:

head -n -2 myfile.txt

但是如何在我的目录中为所有文件执行该任务而无需重新输入并列出文件名.....

1 个答案:

答案 0 :(得分:0)

您可以使用find并逐个执行此操作:

find -exec head -n -2 {} \;

此行使用find查找目录中的所有文件,然后执行(-exec)命令head -n -2 {},其中{}表示找到的文件名,并且\;最后是必不可少的,它意味着一个接一个地做。

更新:

我没有找到你说使用head的方式实际上没有写入文件,如果你想删除最后两行,这不是那么容易,一个班轮可能很微妙:< / p>

find -exec bash -c 'c=`wc -l {} | awk '"'{print \$1}'"'`; sed -i "$((c-1)),${c}d" {}' \;

使用for循环听起来更好:

for file in folder/*; do
    c=`wc -l $file | awk '{print $1}'`
    sed -i "$((c-1)),${c}d" $file
done