Auf meinem Computer wird Scientific Linux Version 6.5 (Carbon) ausgeführt. Ich möchte einen neuen Satz von Verzeichnissen in erstellen
/newset/
mit den gleichen Namen wie ein anderer Satz vorhandener Unterverzeichnisse in
/oldset/
Hier sind die Unterverzeichnisse in / oldset /
$ ls /oldset/
A/
B/
C/
Ich habe es versucht
$ cd /newset/
$ ls /oldset/ | xargs mkdir
Welches macht Verzeichnisse mit diesen Namen
$ ls /newset/
?[0m?[38;5;27mA?[0m/
?[38;5;27mB?[0m/
?[38;5;27mC?[0m/
?[m/
Nicht das, was ich erwarte. Ich habe auch versucht, mit mkdir eine for-Schleife durch die ls-Ausgabe zu machen und habe das gleiche Ergebnis erzielt. Kann jemand erklären, warum das seltsame Ergebnis ist?
Antworten:
1 für die Antwort № 1Für mich sieht es so aus, als würdest du gerne laufen ls -F --color
. Ich bin gerade nicht in einer Box, aber ich denke, das istdie richtige einstellung. Ich weiß auch nicht, warum Sie xargs verwenden? Ich würde die Befehlssubstitution verwenden, aber, wie Andrew betonte, Backslash ls, um den Alias auszuschalten / zu ignorieren.
mkdir $( ls /oldset)
2 für die Antwort № 2
Benutze es nicht ls
an erster Stelle; benutze ein Array:
names=( /oldset/* )
cd /newset
mkdir "${names[@]#/oldset/}"
oder verwenden Sie eine Schleife, obwohl dies mehrere Aufrufe erfordert mkdir
statt nur einer.
for d in /oldset/*/; do
mkdir /newset/"${d#/oldset}"
done