我有一个目录结构
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的目录名中的空格有问题。
在我必须保留目录名中的空格的情况下,我该如何解决这个问题?
答案 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