xargs或tail在目录名称中给出了空格错误

时间:2015-07-29 10:45:00

标签: bash find tail xargs

我有一个目录结构

Dir 1
Dir 2
Dir 3

,所以每个目录名都包含一个空格。

每个目录都包含文件batch_output.txt。每个文件都以标题行开头,然后是下一行的数据。

我想追加这些数据文件,并在顶部添加标题(因此标题只应从第一个文件中提取,而不是重复提取)。命令

find . -name batch_output.txt -type f

返回batch_output.txt文件的路径就好了,但我试图通过命令附加数据

find . -name batch_output.txt -type f | xargs -n 1 tail -n +2

给我错误

tail: cannot open ‘./Dir’ for reading: No such file or directory
tail: cannot open ‘1/batch_output.txt’ for reading: No such file or directory
tail: cannot open ‘./Dir’ for reading: No such file or directory
tail: cannot open ‘2/batch_output.txt’ for reading: No such file or directory
tail: cannot open ‘./Dir’ for reading: No such file or directory
tail: cannot open ‘3/batch_output.txt’ for reading: No such file or directory

我认为tail的目录名中的空格有问题。

在我必须保留目录名中的空格的情况下,我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

使用-print0中的-0选项{/ 1}}选项:

xargs

根据find . -name batch_output.txt -type f -print0 | xargs -0 -n 1 tail -n +2

man find

答案 1 :(得分:1)

-exec参数用于find

find . -name batch_output.txt -type f -exec tail -n +2 {} \;

如果要将输出放入新文件,只需重定向:

find . -name batch_output.txt -type f -exec tail -n +2 {} \; > /path/to/outfile

答案 2 :(得分:0)

tail没有获得单引号文件名。对xargs使用-I参数:

find . -name batch_output.txt -type f | xargs -I X tail -n +2 X

答案 3 :(得分:0)

我相信以下脚本可以正常运行。

#!/bin/bash
clear
clear

# Extract first line from the first hit by 'find'.
find . -name batch_output.txt -type f -print0 -quit | xargs -0 -n 1 head -n 1 > output.txt

# Append all the data after the first line.
find . -name batch_output.txt -type f -print0 | xargs -0 -n 1 tail -n +2 >> output.txt