File 新文件中每个文件的第一行

File 新文件中每个文件的第一行,file,bash,shell,scripting,line,File,Bash,Shell,Scripting,Line,如何获取目录中每个文件的第一行并将其全部保存在新文件中 #!/bin/bash rm FIRSTLINE for file in "$(find $1 -type f)"; do head -1 $file >> FIRSTLINE done cat FIRSTLINE 这是我的bash脚本,但当我这样做并打开第一行文件时, 然后我看到: ==> 'path of the file' <== 'first line' of the file ==>“文件的路径” 可

如何获取目录中每个文件的第一行并将其全部保存在新文件中

#!/bin/bash

rm FIRSTLINE
for file in "$(find $1 -type f)";
do
head -1 $file >> FIRSTLINE
done
cat FIRSTLINE
这是我的bash脚本,但当我这样做并打开第一行文件时, 然后我看到:

==> 'path of the file' <==
'first line' of the file
==>“文件的路径”
可能对你有用


可能对您有用。

问题是您引用了
find
的输出,因此它被视为一个字符串,因此
for
循环只运行一次,只有一个参数包含所有文件。这意味着您运行
head-1file1file2file3file4…
等。当给定多个文件
head
打印
==>file1时,问题是您引用了
find
的输出,因此它被视为单个字符串,因此
for
循环只运行一次,使用包含所有文件的单个参数。这意味着您运行
head-1file1file2file3file4…
等,当给定多个文件时
head
为gzip文件的实例打印
==>file1:

for file in `ls *.gz`; do gzcat $file | head -n 1; done > toto.txt

对于实例的gzip文件:

for file in `ls *.gz`; do gzcat $file | head -n 1; done > toto.txt

+一个彻底的解释。还可以看到Zsolt的一行代码,它提供了一个通用、简洁、流行的替代方案。我非常不喜欢
find
-exec
选项,
xargs
不需要
\{}噪波,在某些情况下效率更高,因为它不需要为每个文件派生一个新的进程(但在使用
xargs-L1
时,它确实需要)+1进行彻底的解释。还可以看到Zsolt的一行代码,它提供了一个通用、简洁、流行的替代方案。我非常不喜欢
find
-exec
选项,
xargs
不需要
\{}噪波,在某些情况下效率更高,因为它不需要为每个文件派生一个新的进程(但当使用
xargs-L1
时,它确实需要这样做)绝对是最好的答案。这还递归地获取子目录中的所有文件。如果您只需要当前目录中的文件(非递归),还可以使用更快的
head-qn1*2>/dev/null>YOURFILE
。转义
{
不是必需的。我不确定对于每个
find
version@williampersell…是否都是这样,但是转义并没有什么坏处。它与
find
无关。字符串的这部分由shell解析。肯定是最好的答案。这也会递归地获取子目录中的所有文件。如果您只想在您当前目录中的文件(非递归)中,您还可以使用更快的
head-qn1*2>/dev/null>YOURFILE
。转义
{
不是必需的。我不确定对于每个
find
version@williampersell…是否都是这样,但是转义没有什么坏处。它与
find
无关。字符串的这部分由shell解析。
#!/bin/bash

for file in $(find $1 -type f)
do
    head -1 $file
done
find $1 -type f | xargs -L1 head -1
find $1 -type f | xargs -L1 head -1 | tee FIRSTLINE
$ for file in $(find $1 -type f); do echo ''; 
    echo $file; 
    head -n 4 $file; 
  done
for file in `ls *.gz`; do gzcat $file | head -n 1; done > toto.txt