为什么在将 ls 传输到 mkdir 时会出现奇怪的类似时间戳的包含?

Why the weird timestamp-like inclusion when piping ls to mkdir?

我的电脑是 运行 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 循环并得到相同的结果。有人可以解释为什么会出现奇怪的结果吗?

在我看来,您 运行 是 ls -F --color 的别名。我现在不在盒子里,但我认为这是正确的设置。我也不知道你为什么要使用 xargs?我会使用命令替换,但正如安德鲁指出的那样,反斜杠 ls 将 off/ignore 别名变为

 mkdir $( \ls /oldset)

Don't use ls排在第一位;使用数组:

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

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

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