为什么在管道ls到mkdir时有类似奇怪的时间戳?

时间:2016-04-16 17:47:39

标签: linux bash mkdir ls xargs

我的电脑正在运行Scientific Linux 6.5版(Carbon)。 我想在

中创建一组新目录
/newset/

中另一组现有子目录的名称相同
/oldset/

以下是/ oldset /

中的子目录
$ ls /oldset/
A/
B/
C/

我试过这个

$ cd /newset/
$ ls /oldset/ | xargs mkdir

使用这些名称创建目录

$ ls /newset/
?[0m?[38;5;27mA?[0m/
?[38;5;27mB?[0m/
?[38;5;27mC?[0m/
?[m/

不是我所期待的。我也尝试使用mkdir通过ls输出执行for循环,并获得相同的结果。有人可以解释为什么这个奇怪的结果吗?

2 个答案:

答案 0 :(得分:2)

首先是{p> Don't use ls;使用数组:

names=( /oldset/* )
cd /newset
mkdir "${names[@]#/oldset/}"

或使用循环,但这需要多次调用mkdir而不只是一次。

for d in /oldset/*/; do
    mkdir /newset/"${d#/oldset}"
done

答案 1 :(得分:1)

对我来说,看起来你正在运行别名为ls -F --color的ls。我现在不在盒子里,但我认为这是正确的设置。我也不知道你为什么使用xargs?我会使用命令替换,但正如安德鲁指出的那样,反斜杠可以关闭/忽略别名。

 mkdir $( \ls /oldset)