Bash 壳体中的管道分叉

Bash 壳体中的管道分叉,bash,shell,pipe,pipeline,Bash,Shell,Pipe,Pipeline,首先,我尝试在Google和Stackoverflow中搜索类似的主题,但没有找到任何类似的内容 问题: 有没有办法处理shell中的管道分叉 示例: 我有以下目录树: > 1 >> 1.a >> 2.a >> 3.a > 2 >> 1.b >> 2.b >> 3.b 当我执行命令时: ls -1 */* | nl 我得到以下输出: 1 1/1.a 2 1/2.a 3 1/3.a 4 2/1.b 5

首先,我尝试在Google和Stackoverflow中搜索类似的主题,但没有找到任何类似的内容

问题:

有没有办法处理shell中的管道分叉

示例:

我有以下目录树:

> 1
>> 1.a
>> 2.a
>> 3.a
> 2
>> 1.b
>> 2.b
>> 3.b
当我执行命令时:

ls -1 */* | nl
我得到以下输出:

1  1/1.a
2  1/2.a
3  1/3.a
4  2/1.b
5  2/2.b
6  2/3.b
如果我想引用第一列,我会使用带-f1参数的cut。同样,如果我想引用第二列,我将使用-f2参数。我可以以某种方式使用下面的命令吗

ls -1 */* | nl | mv `cut -d'   ' -f1` `cut -d'    ' -f2`

我不介意重命名这些文件的方式。实际上,我想知道shell中是否存在并行管道。

您可以将此用于循环:

while read -r f1 f2; do
   [[ -n "$f1" && -n "$f2" ]] && mv "$f1/$f2" "$f2"
done < <(ls -1 */* | nl)

您可以将此用于循环:

while read -r f1 f2; do
   [[ -n "$f1" && -n "$f2" ]] && mv "$f1/$f2" "$f2"
done < <(ls -1 */* | nl)

您可以将此用于循环:

while read -r f1 f2; do
   [[ -n "$f1" && -n "$f2" ]] && mv "$f1/$f2" "$f2"
done < <(ls -1 */* | nl)

您可以将此用于循环:

while read -r f1 f2; do
   [[ -n "$f1" && -n "$f2" ]] && mv "$f1/$f2" "$f2"
done < <(ls -1 */* | nl)

解析
ls
is的输出;我将使用以下内容来代替

count=1
对于f in*/*;做
回声mv“$f”$((计数++))
完成

解析
ls
is的输出;我将使用以下内容来代替

count=1
对于f in*/*;做
回声mv“$f”$((计数++))
完成

解析
ls
is的输出;我将使用以下内容来代替

count=1
对于f in*/*;做
回声mv“$f”$((计数++))
完成

解析
ls
is的输出;我将使用以下内容来代替

count=1
对于f in*/*;做
回声mv“$f”$((计数++))
完成


您在这里想要实现什么?如果我解释
mv
它看起来像是你在尝试做类似
mv 1.a
的事情。你的意思是像mv1.a1这样的东西吗?对不起,我忘了目录前缀,所以它应该是:
mv1/1.a1
你想在这里实现什么?如果我解释
mv
它看起来像是你在尝试做类似
mv 1.a
的事情。你的意思是像mv1.a1这样的东西吗?对不起,我忘了目录前缀,所以它应该是:
mv1/1.a1
你想在这里实现什么?如果我解释
mv
它看起来像是你在尝试做类似
mv 1.a
的事情。你的意思是像mv1.a1这样的东西吗?对不起,我忘了目录前缀,所以它应该是:
mv1/1.a1
你想在这里实现什么?如果我解释
mv
它看起来像是你在尝试做类似
mv 1.a
的事情。你是说像
mv1.a1
之类的东西吗?对不起,我忘了目录前缀,所以它应该是:
mv1/1.a1
,因为OP使用了
BASH
标记,所以最好使用
[…]]
而不是旧的
[…]
@GoodPerson:with
[[
&
没有的选项[
(这大概是你所提倡的)。既然问题被标记了,一个只有Bash的解决方案就可以了,尽管它也被标记为Shell,一个更接近中性的解决方案也会很好。即使移植性是一个问题,POSIX规范本身也推荐
[-n“$f1”]&&[-n“$f2”]
而不是
[-n”$f1“-a-n”$f2”]
@GoodPerson然后标签应该被更正;不需要阅读用户的想法。@显示你正在寻找的东西不存在;这是你问题的解决方案,不管它看起来是否像你想要的。由于OP使用了
BASH
标签,最好使用
[…]
而不是旧的
[…]
@GoodPerson:with
[[[
&&&
[
所没有的选项(这大概是您所提倡的)。由于问题已标记,因此仅使用Bash的解决方案是可以的,但由于它也标记为Shell,因此更接近中性的解决方案也是不错的。即使可移植性是一个问题,POSIX规范本身也建议
[-n“$f1”]&&&[-n“$f2”]
而不是
[-n”$f1“-a-n”$f2”]
@GoodPerson然后标签应该被更正;不需要阅读用户的想法。@显示你正在寻找的东西不存在;这是你问题的解决方案,不管它看起来是否像你想要的。由于OP使用了
BASH
标签,最好使用
[…]
而不是旧的
[…]
@GoodPerson:with
[[[
&&&
[
所没有的选项(这大概是您所提倡的)。由于问题已标记,因此仅使用Bash的解决方案是可以的,但由于它也标记为Shell,因此更接近中性的解决方案也是不错的。即使可移植性是一个问题,POSIX规范本身也建议
[-n“$f1”]&&&[-n“$f2”]
而不是
[-n”$f1“-a-n”$f2”]
@GoodPerson然后标签应该被更正;不需要阅读用户的想法。@显示你正在寻找的东西不存在;这是你问题的解决方案,不管它看起来是否像你想要的。由于OP使用了
BASH
标签,最好使用
[…]
而不是旧的
[…]
@GoodPerson:with
[[[
&&&
[
所没有的选项(这大概是您所提倡的)。由于问题已标记,因此仅使用Bash的解决方案是可以的,但由于它也标记为Shell,因此更接近中性的解决方案也是不错的。即使可移植性是一个问题,POSIX规范本身也建议
[-n“$f1”]&&&[-n“$f2”]
而不是
[-n”$f1“-a-n”$f2”]
@GoodPerson然后应该更正标记;不需要阅读用户的想法。@显示您正在寻找的内容不存在;这是您问题的解决方案,无论它看起来是否像您认为需要的内容。