【问题标题】:concatenate files and remove source file连接文件并删除源文件
【发布时间】:2014-05-04 16:34:24
【问题描述】:

我有这个命令来连接匹配模式的文件,但我确实想删除它们,并且我想防止刚刚创建的文件应该被删除(而不是连接)的情况

示例文件名:

start-2014-03-25-08-08.log
scheduled-2014-03-19-13-03.log
scheduled-2014-03-19-14-58.log

使用的命令

ls -1 | sed -r "s/(.*)-[0-9]{4}(-[0-9]{2})+/cat \1* >> \1$(date  +"-%Y-%m-%d-%H-%M")/" | uniq | cat

输出是:

cat start* >> start-2014-03-26-12-26.log
cat scheduled* >> scheduled-2014-03-26-12-26.log

但我确实想在附加文件后删除它们。由于文件很大,可能会稍有延迟,同时会创建一个新的“保存模式”文件,我不想删除那个文件。

正确的方法是什么?

更新

我现在有这个。

 rm -f temp.files;ls -1 *.log > temp.files; cat temp.files | sed -r "s/(.*)-[0-9]{4}(-[0-9]{2})+\.log/cat \1* >> \1$(date  +"-%Y-%m-%d-%H-%M").log/" | uniq | sh; xargs rm -rf < temp.files; rm -f temp.files

【问题讨论】:

  • 我认为最好为catrm 创建一个临时文件(或var 或其他文件)来存储受影响的文件列表,然后使用它。跨度>
  • 您正在尝试附加到与您指定的glob 匹配的文件名! (这会导致输出文件附加到自身。)
  • @devnull 查看我的更新
  • 如果我理解正确,您的命令会附加但不会删除文件,还是其他原因?
  • @devnull 我认为该命令现在可以正常工作了。

标签: linux shell ubuntu centos


【解决方案1】:

由于您使用sed 生成了cat 命令,然后将其通过管道传递给sh,因此您可以修改sed 表达式以指示sh 在文件附加成功时将其删除,即,将替换表达式改为:

cat \1* >> \1$(date  +"-%Y-%m-%d-%H-%M").log \&\& rm -f &

来自

cat \1* >> \1$(date  +"-%Y-%m-%d-%H-%M").log

请注意,您需要在替换中转义 &amp; 以生成文字 &amp;&amp; 本身将是整个匹配项(在您的情况下为输入文件名)。

这也将避免在您的命令中使用rm -rf &lt; temp.files,因为每个文件都将在附加后被删除。

【讨论】:

    【解决方案2】:

    不需要临时文件。

    ts=$(date +"-%Y-%m-%d-%H-%M")
    for f in *; do
        prefix=${f%%-*}
        cat "$f" >> "$prefix-$ts"
        rm "$f"
    done
    

    由于循环运行可能需要超过一分钟,我将ts 设置在循环之外,以便始终使用同一分钟。如果您想要不同的输出文件,您可以在循环中移动该分配,具体取决于串联实际发生的时间。

    【讨论】:

      【解决方案3】:

      我终于有了这个:

       rm -f temp.files;ls -1 *.log > temp.files; cat temp.files | sed -r "s/(.*)-[0-9]{4}(-[0-9]{2})+\.log/cat \1* >> \1$(date  +"-%Y-%m-%d-%H-%M").log/" | uniq | sh; xargs rm -rf < temp.files; rm -f temp.files
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-06
        • 1970-01-01
        • 2018-02-23
        相关资源
        最近更新 更多