猫多个文件,但包括文件名作为标题

我想将多个文本文件连接成terminal中的一个大文件。 我知道我可以使用cat命令来做到这一点。 不过,我希望每个文件的文件名在该文件的“数据转储”之前。 有人知道怎么做吗?

我目前有什么:

file1.txt = bluemoongoodbeer file2.txt = awesomepossum file3.txt = hownowbrowncow cat file1.txt file2.txt file3.txt 

所需的输出:

 file1 bluemoongoodbeer file2 awesomepossum file3 hownowbrowncow 

正在寻找同样的事情,并发现这个build议:

 tail -vn +1 file1.txt file2.txt file3.txt 

输出:

 ==> file1.txt <== <contents of file1.txt> ==> file2.txt <== <contents of file2.txt> ==> file3.txt <== <contents of file3.txt> 

如果只有一个文件,那么标题将不会被打印。 因此,请使用-v总是打印标题。

我用类似grep的东西:

 grep "" *.txt 

它不会给你一个“标题”,而是在每一行前加上文件名。

这也应该做的伎俩:

 find . -type f -print -exec cat {} \; 

手段:

 find = linux `find` command finds filenames, see `man find` for more info . = in current directory -type f = only files, not directories -print = show found file -exec = additionally execute another linux command cat = linux `cat` command, see `man cat`, displays file contents {} = placeholder for the currently found filename \; = tell `find` command that it ends now here 

您可以进一步将search槽合并为布尔运算符,如-and-orfind -ls也很好。

这应该做的伎俩:

 for filename in file1.txt file2.txt file3.txt; do echo "$filename" cat "$filename" done > output.txt 

或者recursion地为所有文本文件执行此操作:

 find . -type f -name '*.txt' -print | while read filename; do echo "$filename" cat "$filename" done > output.txt 
 find . -type f -print0 | xargs -0 -I % sh -c 'echo %; cat %' 

这将打印完整的文件名(包括path),然后打印文件的内容。 这也是非常灵活的,因为你可以使用-name“expr”作为find命令,并且在文件上运行尽可能多的命令。

我有一系列以stats.txt结尾的文件,我想将它们与文件名连接起来。

我做了以下事情,当有多个文件时,“more”命令将文件名作为标题。

 more *stats.txt > stats.txt 

或一般情况下

 more FILES_TO_CONCAT > OUTPUT_FILE 

这是我通常如何处理格式:

 for i in *; do echo "$i"; echo ; cat "$i"; echo ; done ; 

我通常会把猫变成grep来获得具体的信息。

你可以使用这个简单的命令而不是使用for循环,

 ls -ltr | awk '{print $9}' | xargs head 

这是一个非常简单的方法。 你说你想猫,这意味着你想查看整个文件。 但是你也需要打印文件名。

尝试这个

head -n99999999 *head -n99999999 file1.txt file2.txt file3.txt

希望有所帮助

如果你喜欢颜色,试试这个:

 for i in *; do echo; echo $'\e[33;1m'$i$'\e[0m'; cat $i; done | less -R 

要么:

 tail -n +1 * | grep -e $ -e '==.*' 

或:(安装包装“multitail”)

 multitail * 

此方法将打印文件名,然后文件内容:

 tail -f file1.txt file2.txt 

输出:

 ==> file1.txt <== contents of file1.txt ... contents of file1.txt ... ==> file2.txt <== contents of file2.txt ... contents of file2.txt ... 
 find . -type f -exec cat {} \; -print 

如果你想要的结果与你想要的输出相同的格式,你可以尝试:

 for file in `ls file{1..3}.txt`; \ do echo $file | cut -d '.' -f 1; \ cat $file ; done; 

结果:

 file1 bluemoongoodbeer file2 awesomepossum file3 hownowbrowncow 

您可以在切割前后放置echo -e ,这样您的行之间也有间距:

 $ for file in `ls file{1..3}.txt`; do echo $file | cut -d '.' -f 1; echo -e; cat $file; echo -e ; done; 

结果:

 file1 bluemoongoodbeer file2 awesomepossum file3 hownowbrowncow 
  • AIX 7.1 ksh

向那些已经为我们中的一些人提过头像的人们炫耀:

 $ r head head file*.txt ==> file1.txt <== xxx 111 ==> file2.txt <== yyy 222 nyuk nyuk nyuk ==> file3.txt <== zzz $ 

我的需要是读第一行; 如上所述,如果你想要超过10行,你必须添加选项(头-9999等)。

抱歉发布衍生评论; 我没有足够的街道评价/添加到某人的评论。

我喜欢这个选项

 for x in $(ls ./*.php); do echo $x; cat $x | grep -i 'menuItem'; done 

输出如下所示:

 ./debug-things.php ./Facebook.Pixel.Code.php ./footer.trusted.seller.items.php ./GoogleAnalytics.php ./JivositeCode.php ./Live-Messenger.php ./mPopex.php ./NOTIFICATIONS-box.php ./reviewPopUp_Frame.php $('#top-nav-scroller-pos-<?=$active**MenuItem**;?>').addClass('active'); gotTo**MenuItem**(); ./Reviews-Frames-PopUps.php ./social.media.login.btns.php ./social-side-bar.php ./staticWalletsAlerst.php ./tmp-fix.php ./top-nav-scroller.php $active**MenuItem** = '0'; $active**MenuItem** = '1'; $active**MenuItem** = '2'; $active**MenuItem** = '3'; ./Waiting-Overlay.php ./Yandex.Metrika.php 
Interesting Posts