查找单行文件并将其移动到子文件夹

时间:2019-07-23 14:04:40

标签: bash file grep find

我正在使用下面的bash行在子文件夹中查找带有给定模式的文本文件,并将其移动到子文件夹:

find originalFolder/ -maxdepth 1 -type f -exec grep -q 'mySpecificPattern' {} \; -exec mv -i {} destinationFolder/ \;

现在,如果不是仅复制一行,我想将文件移动到子文件夹中,如果它们仅由一行(文本)组成:我该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以这样做:

while IFS= read -r -d '' file; do
   [[ $(wc -l < "$file") -eq 1 ]] && echo mv -i "$file" destinationFolder/
done < <(find originalFolder/ -maxdepth 1 -type f -print0)

请注意在echo前面使用mv,以便您可以在实际执行mv之前验证输出。对输出感到满意后,请在echo之前删除mv

答案 1 :(得分:0)

使用上面所示的wc是最直接的方法,尽管它会读取整个文件以确定长度。也可以使用awk进行长度检查,而exit函数使您可以将其适合find命令。

find . -type f -exec awk 'END { exit (NR==1 ? 0 : 1) } NR==2 { exit 1 }' {} \; -print

如果在文件末尾只有1条输入记录,则该命令返回状态0,并且在遇到第2行时也立即以状态1退出;否则,返回0。如果大文件是性能方面的考虑,那么这应该很容易超过wc