/ / Perché la strana inclusione timestamp quando piping ls a mkdir? - linux, bash, mkdir, ls, xargs

Perché la strana inclusione timestamp quando piping ls a mkdir? - linux, bash, mkdir, ls, xargs

Il mio computer esegue la versione 6.5 di Scientific Linux (Carbon). Voglio creare una nuova serie di directory in

/newset/

con lo stesso nome di un altro insieme di sottodirectory esistenti in

/oldset/

Ecco le sottodirectory in / oldset /

$ ls /oldset/
A/
B/
C/

Ho provato questo

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

Che rende le directory con questi nomi

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

Non è quello che mi aspetto, ho anche provato a fare un ciclo for attraverso l'output ls con mkdir e ho ottenuto lo stesso risultato. Qualcuno può spiegare perché il risultato strano?

risposte:

1 per risposta № 1

A me sembra che tu stia correndo con ls ls -F --color. Non sono in una scatola in questo momento, ma penso che sia cosìl'impostazione giusta. Inoltre, non so perché usi gli xargs. Io uso la sostituzione dei comandi, ma come Andrew ha sottolineato, ls back-slash per disattivare / ignorare l'alias.

 mkdir $( ls /oldset)

2 per risposta № 2

Non usare ls innanzitutto; usa un array:

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

o utilizzare un ciclo, anche se questo richiede più chiamate a mkdir invece di uno solo.

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