Bash Concat文件的顺序相反
我需要将多个文件按相反顺序合并到一个文件中 不应更改文件中的行顺序 例如:Bash Concat文件的顺序相反,bash,shell,Bash,Shell,我需要将多个文件按相反顺序合并到一个文件中 不应更改文件中的行顺序 例如: file 1.txt 1 2 预期结果: result.txt 3 4 1 2 这些命令无法按预期工作: tac*.txt>result.txt只是反转文件中的行顺序,并按顺序连接文件。(21143) 如果文件名包含空格字符,则cat$(ls-r)>result.txt或ls-r | xargs cat>result.txt不起作用: cat: file: No such file or directory cat
file 1.txt
1
2
预期结果:
result.txt
3
4
1
2
这些命令无法按预期工作:
tac*.txt>result.txt
只是反转文件中的行顺序,并按顺序连接文件。(21143
)
如果文件名包含空格字符,则cat$(ls-r)>result.txt
或ls-r | xargs cat>result.txt
不起作用:
cat: file: No such file or directory
cat: 2.txt: No such file or directory
cat: file: No such file or directory
cat: 1.txt: No such file or directory
问题是,虽然ls-r
返回'file 2.txt''file 1.txt'
,但echo$(ls-r)
返回file 2.txt file 1.txt
,这看起来像是cat
的四个文件
太好了-所以首先列出文件名,然后颠倒顺序,然后对它们进行分类
find . -type f -name '*.txt' | sort -r | xargs -d'\n' cat
与文件名扩展类似,它是按自身排序的:
printf "%s\n" *.txt | tac | xargs -d'\n' cat
要对文件名中的换行符进行完全清除,请使用零分隔流-printf“%s\0”
find-print0
xargs-0
tac-s'
记住。太好了-所以首先列出文件名,然后颠倒顺序,然后对它们进行分类
find . -type f -name '*.txt' | sort -r | xargs -d'\n' cat
与文件名扩展类似,它是按自身排序的:
printf "%s\n" *.txt | tac | xargs -d'\n' cat
要对文件名中的换行符进行完全清除,请使用零分隔流-printf“%s\0”
find-print0
xargs-0
tac-s'
记住。试试这个(递归)函数:
function revcat
{
(( $# == 0 )) && return 0
revcat "${@:2}"
cat -- "$1"
}
用法示例:
revcat *.txt
尝试此(递归)函数:
function revcat
{
(( $# == 0 )) && return 0
revcat "${@:2}"
cat -- "$1"
}
用法示例:
revcat *.txt
因为没有短的单行命令可以很容易地从内存中键入。 创建一个函数并将其放入
.bashrc
文件是有意义的
工作得很慢。
所以我写了这个:
函数revcat{
对于“$@”中的项目,请执行以下操作
回显“$item”;
完成| tac | xargs-d“\n”猫;
}
它的工作原理类似于cat
,但具有预期的反向文件连接顺序
例如:
revcat*.txt>out.txt
,因为没有可以从内存轻松键入的短单行命令。
创建一个函数并将其放入.bashrc
文件是有意义的
工作得很慢。
所以我写了这个:
函数revcat{
对于“$@”中的项目,请执行以下操作
回显“$item”;
完成| tac | xargs-d“\n”猫;
}
它的工作原理类似于cat
,但具有预期的反向文件连接顺序
例如:
revcat*.txt>out.txt
我有很多文件。另请参见使用xargs
和-0
会导致cat:'result.txt'$'\n''file2.txt'$'\n''file1.txt'$\n':没有这样的文件或目录
。我对一个简短的命令很感兴趣。这个错误听起来像是你忘了在find
中使用-print0
。我有很多文件。另请参阅将xargs
与-0
一起使用会导致cat:'result.txt'$'\n''file2.txt'$'\n''file1.txt'$'\n':没有这样的文件或目录
。我对一个简短的命令感兴趣。这个错误听起来像是你忘了在find
中输入一个-print0
。虽然没有我想要的那么简短,但很有效。顺便说一句,printf“'%s'*.txt | tac | xargs cat
也可以工作。但不是这个cat$(printf“'%s'.*.txt | tac)
。我在printf“'%s'.*.txt | targs”中看不到任何值,当文件名有”或“
以它的名义。你能在你的答案中写一个revcat
函数,就像它在pjh中做的那样,但不需要递归吗?他的功能正常,但速度明显较慢。我认为它不仅对我有用,只需将函数设置为.bashrc
,然后像cat
一样使用它,而无需每次复制粘贴长命令。你自己不能这样做吗?你为什么需要我写revcat(){stuff here}
?虽然没有我想要的那么短,但很有效。顺便说一句,printf“'%s'*.txt | tac | xargs cat
也可以工作。但不是这个cat$(printf“'%s'.*.txt | tac)
。我在printf“'%s'.*.txt | targs”中看不到任何值,当文件名有”或“
以它的名义。你能在你的答案中写一个revcat
函数,就像它在pjh中做的那样,但不需要递归吗?他的功能正常,但速度明显较慢。我认为它不仅对我有用,只需将函数设置为.bashrc
,然后像cat
一样使用它,而无需每次复制粘贴长命令。你自己不能这样做吗?你为什么要我写revcat(){stuff here}
?很好。我刚刚将它添加到.bashrc
文件(%HOMEPATH%/.bashrc
。我使用Git-Bash。)。所以我现在只需要输入revcat*.txt>out.txt
,但它的速度非常慢。收集256个文件需要12秒。每个文件小于1KB<代码>猫
立即执行。很好。我刚刚将它添加到.bashrc
文件(%HOMEPATH%/.bashrc
。我使用Git-Bash。)。所以我现在只需要输入revcat*.txt>out.txt
,但它的速度非常慢。收集256个文件需要12秒。每个文件小于1KB<代码>cat
立即执行。