将文件夹和子文件夹中的所有文件与换行符连接到一个文件
Concatenate all files in folder and subfolder with newline to one file
我有一些文件夹和子文件夹带有 .txt 和其他扩展名(如 .py、.html),我想将所有文件夹和子文件夹连接到一个 .txt 文件
我试试这个:
find . -type f -exec cat {} + > test.txt
输入:
txt1.txt:
aaaaa
test.py
print("a")
htmltest1.html:
<head></head>
输出:
aaaaaprint("a")<head></head>
期望的结果:
aaaaa
print("a")
<head></head>
那么,如何修改此 bash-命令以获得我想要的输出?我想在每个打印文件后粘贴换行符
在 cat
上使用 -E
参数,以便在行尾打印 $
。
然后使用 sed
将其剥离,并在末尾使用 $
锚定的文字 $
符号。
find . -type f -exec cat -E {} + | sed s'/$$//' > test.txt
问题是文件的最后几行没有以换行符结尾,这意味着它们不符合文本文件的 POSIX 定义,这可能会产生像这样的奇怪结果。
可能我用过的所有图形文本编辑器都允许你不放一个终止换行符,而且很多人不会放它,大概是因为编辑器让它看起来像末尾有一个多余的空行.
这可能是某些人无法重现您的问题的原因 - 大概他们使用 cat
或 vim
或 nano
等性能良好的工具创建示例文件,或者他们确实将末尾的换行符。
问题来了:
user@host:~$ find . -type f -exec cat {} \;
aaaaaprint("a")<head></head>user@host:~$
为避免将来出现此类问题,在使用图形文本编辑器时,您应该始终在文件的最后一行文本之后点击 <enter>
。但是,有时您必须使用其他用户生成的文件,而这些用户可能不知道此类内容,因此:
这是一个快速而肮脏的解决方法(与仅包含换行符的附加文件连接):
user@host:~$ echo '' > /tmp/newline.txt
user@host:~$ find . -type f -exec cat {} /tmp/newline.txt \;
aaaaa
print("a")
<head></head>
user@host:~$
我有一些文件夹和子文件夹带有 .txt 和其他扩展名(如 .py、.html),我想将所有文件夹和子文件夹连接到一个 .txt 文件
我试试这个:
find . -type f -exec cat {} + > test.txt
输入:
txt1.txt:
aaaaa
test.py
print("a")
htmltest1.html:
<head></head>
输出:
aaaaaprint("a")<head></head>
期望的结果:
aaaaa
print("a")
<head></head>
那么,如何修改此 bash-命令以获得我想要的输出?我想在每个打印文件后粘贴换行符
在 cat
上使用 -E
参数,以便在行尾打印 $
。
然后使用 sed
将其剥离,并在末尾使用 $
锚定的文字 $
符号。
find . -type f -exec cat -E {} + | sed s'/$$//' > test.txt
问题是文件的最后几行没有以换行符结尾,这意味着它们不符合文本文件的 POSIX 定义,这可能会产生像这样的奇怪结果。
可能我用过的所有图形文本编辑器都允许你不放一个终止换行符,而且很多人不会放它,大概是因为编辑器让它看起来像末尾有一个多余的空行.
这可能是某些人无法重现您的问题的原因 - 大概他们使用 cat
或 vim
或 nano
等性能良好的工具创建示例文件,或者他们确实将末尾的换行符。
问题来了:
user@host:~$ find . -type f -exec cat {} \;
aaaaaprint("a")<head></head>user@host:~$
为避免将来出现此类问题,在使用图形文本编辑器时,您应该始终在文件的最后一行文本之后点击 <enter>
。但是,有时您必须使用其他用户生成的文件,而这些用户可能不知道此类内容,因此:
这是一个快速而肮脏的解决方法(与仅包含换行符的附加文件连接):
user@host:~$ echo '' > /tmp/newline.txt
user@host:~$ find . -type f -exec cat {} /tmp/newline.txt \;
aaaaa
print("a")
<head></head>
user@host:~$