【问题标题】:xargs -a filename --null rm with additional EOF delimiter EOF?xargs -a 文件名 --null rm 带有额外的 EOF 分隔符 EOF?
【发布时间】:2020-08-22 00:57:35
【问题描述】:

所以我使用带有正则表达式的 find 删除一些文件,然后通过管道传输到 xargs -0 rm 或简单地添加 --delete

有时,我需要从删除中排除其中一些 - 我将查找输出写入文件,删除一些行并将新行字符替换为空字符。我在 vim 中执行此操作,现在我有这个 EOF 字符,当我将它提供给删除命令时,这让我很烦恼。这是一个使用 file 而不是 rm 的非常简化的测试用例:

[testdir]$ touch t{1..3}
[testdir]$ find . -name 't*' -print0 > xa
[testdir]$ find . -name 't*' > xb
[testdir]$ cat -v xa
./t3^@./t2^@./t1^@[testdir]$ cat xb
./t3
./t2
./t1
[testdir]$ vim xb

在 vim 中,我执行 ':%s/\n/CTRL-@/' 并保存。之后,与原来的 find 输出文件相比,不想要的效果:

[testdir]$ cat -v xb
./t3^@./t2^@./t1^@
[testdir]$ xargs -a xa -0 file
./t3: empty
./t2: empty
./t1: empty
[testdir]$ xargs -a xb -0 -E '\012' file
xargs: warning: the -E option has no effect if -0 or -d is used.

./t3: empty
./t2: empty
./t1: empty

:    cannot open `\012' (No such file or directory)

rm 适用于所有文件,只是最后出现错误。注意原始输出没有在末尾插入新行,请参见“cat xa”的结果。此外,xargs 告诉我,由于空分隔符,我不能排除该 EOF 字符。

我很想知道如何解决这个问题,有什么想法吗?

【问题讨论】:

  • 好吧,删除输入文件中留下的换行符。 how to fix this 究竟修复了什么?所有实用程序都按预期工作。你想达到什么目的?也许不是-E $'\n',而是使用另一个实用程序从换行符中删除输入中的所有内容..但是问题是,你为什么首先使用vim
  • 那是我的问题,它似乎不是一个新行。我猜这是文件字符的结尾。此外,如果它是一个新行,替换会处理它。
  • end of file character 没有这样的东西。 EOF 不是字符。 the substitution would have taken care of it - 不,vim 明确强制在文件中使用尾随换行符。前任。 disable automatic newline in vim 或者只是删除尾随换行符......所以你的输入文件xb./t3<zero>./t2<zero>./t1<zero><newline> - 当你用零分隔它时你有4个文件 - ./t3 ./t2 ./t1 <newline>,因为你没有一个只命名为换行符的文件,所以没有这样的文件或目录。
  • 旁注:我相信使用tr '\n' '\0'

标签: bash eof xargs


【解决方案1】:

新的一天 - 新的视角!我睡在上面,多亏了 KamilCuk 的 cmets,现在一切都清楚了。首先,正如他所说,没有文件结尾字符这样的东西。它只是一个尾随的新行 '\n'。

正如他建议的那样,删除这个尾随新行的方法是:

[testdir]$ cat xb | tr -d '\n'
./t3./t2./t1[testdir]$ 

或者,对于这种特定情况,这也适用:

[testdir]$ cat xb | tr -d '\012'
./t3./t2./t1[testdir]$ 

然后我在考虑这种情况,我只想删除文件的这个尾随新行,而不用担心所有其他新行字符会发生什么,如果有的话。这是我对此案的建议:

[testdir]$ head -c -1 xb
./t3./t2./t1[testdir]$ 

现在我的文件可以由 xargs -0 和 Voilà!

安全地分隔

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-23
    • 2018-07-31
    • 2019-08-13
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多