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
立即执行。