【问题标题】:Find single line files and move them to a subfolder查找单行文件并将它们移动到子文件夹
【发布时间】:2019-07-23 14:04:40
【问题描述】:

我正在使用以下 bash 行在子文件夹中查找具有给定模式的文本文件并将它们移动到子文件夹:

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

现在,如果文件仅包含一行(文本),我想将文件移动到子文件夹,而不是 grepping 模式:我该怎么做?

【问题讨论】:

    标签: bash file grep find


    【解决方案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)
    

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

    【讨论】:

    • 抱歉,我刚刚修正了一个错字。请立即尝试。
    • 为什么我现在在第三行得到这个错误? syntax error near unexpected token ('`
    • @FrancescoBoi 确保在使用此脚本时使用bash
    【解决方案2】:

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

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

    如果文件末尾只有 1 条输入记录,该命令返回状态 0,遇到第 2 行时也立即以状态 1 退出;如果大文件是性能问题,这应该很容易超过wc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      相关资源
      最近更新 更多