我已将许多文档另存为txt。我想将它们一起打印,因此首先我希望将它们一起打印在一个文件中。在这种情况下,顺序无关紧要。
我想要一种不涉及输入要合并文件名称的解决方案,而只需要合并文件夹中所有txt文件的解决方案。
我可以使用命令或某些GUI来做到吗?
我看着这里。不知道该怎么用join
。
我已将许多文档另存为txt。我想将它们一起打印,因此首先我希望将它们一起打印在一个文件中。在这种情况下,顺序无关紧要。
我想要一种不涉及输入要合并文件名称的解决方案,而只需要合并文件夹中所有txt文件的解决方案。
我可以使用命令或某些GUI来做到吗?
我看着这里。不知道该怎么用join
。
Answers:
cat
与输出重定向一起使用。语法:cat file [file] [[file] ...] > joined-file
。
仅包含两个文件的示例(您可以有更多文件):
$ echo "some text in a file" > file1
$ echo "another file with some text" > file2
$ cat file1 file2 > mergedfiles
$ cat mergedfiles
some text in a file
another file with some text
如果您有“许多文档”,请使用Shell Globing(模式):
cat input-files-dir/* > joined-file
这会将该目录中的所有文件连接到当前目录(以防止其与输出文件本身匹配)。它完全独立于使用cat
和输出重定向-它只是Bash提供所有文件作为参数cat
。
它将像将纸和胶带那样将文件粘合(连接)在一起。它并不关心实际的文件格式是否能够处理此问题。它适用于文本文件,但不适用于PDF,ODT等。很好,它将它们粘合在一起,但是它不再是有效的PDF / ODT。
正如phoibos指出的那样,shell globbing将导致文件名的字母顺序。这就是Bash和Shell的工作方式。
input file is output file
错误的附录当输入文件的模式与输出文件完全匹配时,将导致错误。这是一项安全功能。示例:cat *.txt > out.txt
第二次运行将导致此情况。
您可以做什么:
*.txt
与输出文件output.out
不会冲突。input-files-dir
目录将所有文件放入并输出到当前工作目录。这使得不可能得到此错误。一种简单的方法是使用cat:
cat file1 file2 > joined_file
如果您只是发布cat file1 file2
,则会在标准输出中看到两个文件。通过使用>
,您只是将标准输出重定向到文件。这也将与其他命令一起使用。
用一个简单的循环来做:
for i in *.txt; do cat "$i" >> complete.txt; done
>>
追加到文件。
注意:如果由于某种原因必须再次运行该命令,则必须删除complete.txt
,否则将文件写入自身,这是行不通的。
cat
。
cat *.txt
。for循环应排序。
for
在Bash 中还是在其他任何地方使用它,都没有关系。
如果您要合并的所有文件都以结尾.txt
,请保持简单:
cat *.txt > combined.txt
如果目录仅包含文本文件,则也很简单:
cat * > combined.txt
(请注意,一旦创建combined.txt
,再次执行该操作会将其包含在的扩展中*
,从而导致行为异常)。
如果要选择目录中的某些文件而不是其他文件,最好使用文件名来区分所需的文件名。如果没有,您可能会喜欢find
。但是我怀疑你需要走那么远。
cipricus编写的Thunar自定义动作脚本也启发了我编写类似的Nautilus脚本,我认为这对于其他考虑此问答以供参考的人可能很有用。所以这里是:
#!/bin/sh
#Nautilus Script to join selected text files in a single file and open the joined file with default text editor
#
IFS=$'\n'
FILENAME="JoinedFile_$(date +%Y-%m-%d-%H-%M-%S).txt"
cat "$@" > "$FILENAME"
xdg-open "$FILENAME"
您也可以尝试使用find
命令,
find . -name "*.txt" -type f -exec cat {} + > file
它.txt
在当前目录中查找 文件,cat
并对每个已建立的文件执行命令。最后,整个输出重定向到文件名file
(直接在当前文件名中创建)。
说明:
. # current directory
-name # helps to find only .txt files.
-type f # Only files
-exec cat {} + # helps to run cat command on the founded .txt files.
> # Output redirection operator
file # to store final output.
您也可以只使用在线实用程序,例如merge-files-online.com
ls
以仅列出匹配项。例如ls *.txt
,看要匹配什么。