要从目录/子目录中的所有文件中打印前2行以及文件名和路径名。 所有都是* .gz扩展名文件。该目录/子目录中有大约10000个文件,并且有多个子目录。
例如:
Dir:home/Test
sample_Test.csv.gz
10,Jan,100
30,Jan,300
50,Jan,500
Dir:home / Test / Feb
sample_feb.csv.gz
10,Feb,200
20,Feb,400
40,Feb,800
60,Feb,1200
Dir:home / Test / Mar / Data
sample_mar.csv.gz
10,Mar,200
20,Mar,400
40,Mar,800
60,Mar,1200
预期产出:
Filename:sample_jan.csv.gz , PathName: home/Test
10,Jan,100
30,Jan,300
Filename:sample_feb.csv.gz , PathName: home/Test/Feb
10,Feb,200
20,Feb,400
Filename:sample_mar.csv.gz , PathName: home/Test/Mar/Data
10,Mar,200
20,Mar,400
尝试了下面的命令和Partial。
for file in *.gz; do echo "Filename: $file"; zcat "$file" | head -2 ; done
想在“home”目录中运行命令,该目录将搜索当前目录和子目录下的文件。 寻找你的建议!!!
答案 0 :(得分:1)
如果您使用for
展开find
循环:
for FILE in `find home -type f -name *.gz`; do
echo "Filename: `basename $FILE` , PathName: `dirname $FILE`"
zcat $FILE | head -2
done
type f
仅查找文件。
basename
删除目录和后缀,留下文件名。
dirname
从文件名中删除非目录后缀,保留目录路径。