【问题标题】:Find a file with a matching string and perform actions on it UNIX查找具有匹配字符串的文件并对其执行操作 UNIX
【发布时间】:2020-05-16 07:39:14
【问题描述】:

第 1 部分:我有一个文件夹“MyFolder”,其中包含多个子文件夹,例如“new”“old”等。 我需要一个 UNIX 代码,它将遍历每个文件夹和子文件夹,并创建没有“_MED.txt”的文件“abc_MED.txt”的副本 例如:abc.txt -> abc_MED.txt -> abc_MED.txt 它不应该每次都添加 abc_MED_MED.txt XX

第 2 部分:对于所有带有“_MED.txt”的文件,应在文件的第一行末尾添加“_2”。

任何帮助将不胜感激。

我试过了:

for file in *.txt
do
if [[  ! -f ${file%*}_MED.txt ]]
then
     cp $file ${file%.*}_MED.txt
fi
done

【问题讨论】:

    标签: bash macos shell unix


    【解决方案1】:

    这是我的 bash 解决方案

    find . -type f -not -name "*_MED*" -exec sed -i '1{s/$/_2/}' {} +
    

    说明:
    查找所有不 (-not) 匹配 (-name) 模式“_MED”的文件 (-f),对每个文件执行 sed 命令 sed -i '1{s/$/ _2/}' 在行尾添加 _2,仅一次

    找到 . -type f -not -name "_MED" -exec sed -i '' '1i\'$'\n''_2' {} +

    编辑
    由于你是在mac机器上(我不知道),sed命令有点不同,试试这个

    find . -type f -not -name "*_MED*" -exec sed -i '' '1s/$/  _2/' {} \;
    

    【讨论】:

    • sed: 1: "./.DS_Store": 无效的命令代码。面对这个错误?我无法看到和复制我想要复制的文件和以 _2.txt 结尾的文件,并在创建的文件末尾添加 _2
    • 好的我明白了问题:你在MAC系统上,那里的sed命令不一样,那你为什么在问题的标题中说UNIX?
    • 我添加了命令的mac语法,反正你的问题很困惑
    【解决方案2】:

    试试下面的命令,它会搜索忽略*_MED.txt的文件

    find . -type f \( -iname "*.txt" ! -iname "*_MED.txt" \)
    

    【讨论】:

      【解决方案3】:

      使用find,使用选项-printf 创建命令,然后使用管道执行bash:

      find MyFolder/ -mindepth 1 -type f -not -name '*_MED.txt' -printf 'echo mv %p $(echo %p| sed 's/.txt/_MED.txt/g')\n' | bash | bash

      第二部分,添加内容

      find MyFolder/ -mindepth 1 -type f -not -name '*_MED.txt' -exec sed -E -i '/$/ a "_2"' {} +

      【讨论】:

      • 发现:%pn':未知的主要或操作员
      • 如果 find MyFolder/ -mindepth 1 -type f -not -name '*_MED.txt' -printf` 的输出怎么办
      • 您的代码完成的工作只是第一个创建文件,如 abc.txt_MED.txt 它应该是 abc_MED.txt...请帮助我更改代码,非常感谢
      • find MyFolder/ -mindepth 1 -type f -not -name '*_MED.txt' -printf 'echo mv %p $(echo %p| sed 's/.txt/_MED.txt /g')\n' |重击 |重击
      • 我尝试了下面的代码,它用 _MED 替换了现有文件,而不是创建一个新文件并将 _MED.txt 添加到其中
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-28
      • 2020-08-11
      • 2014-05-08
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      相关资源
      最近更新 更多