Angenommen, Sie fragen, wie Dateinamen umbenannt werden und Leerzeichen in einer Liste von Dateinamen, die aus einem anderen Grund verwendet werden, nicht entfernt werden, ist dies der lange und kurze Weg. Der lange Weg benutzt sed. Der kurze Weg verwendet Umbenennen. Wenn Sie nicht versuchen, Dateien umzubenennen, ist Ihre Frage ziemlich unklar und sollte überarbeitet werden.
Wenn das Ziel ist, einfach eine Liste von XML-Dateinamen zu bekommen und sie mit sed zu ändern, ist das untere Beispiel, wie man das macht.
Verzeichnisinhalt:
ls -w 2
bob is over there.xml
fred is here.xml
greg is there.xml
cd [directory with files]
shopt -s nullglob
a_glob=(*.xml);
for ((i=0;i< ${#a_glob[@]}; i++));do
echo "${a_glob[i]}";
done
shopt -u nullglob
# output
bob is over there.xml
fred is here.xml
greg is there.xml
# then rename them
cd [directory with files]
shopt -s nullglob
a_glob=(*.xml);
for ((i=0;i< ${#a_glob[@]}; i++));do
# I prefer 'rename' for such things
# rename 's/[[:space:]]/_/g' "${a_glob[i]}";
# but sed works, can't see any reason to use it for this purpose though
mv "${a_glob[i]}" $(sed 's/[[:space:]]/_/g' <<< "${a_glob[i]}");
done
shopt -u nullglob
Ergebnis:
ls -w 2
bob_is_over_there.xml
fred_is_here.xml
greg_is_there.xml
Globbing ist, was Sie wegen der Räume in den Namen hier möchten.
Dies ist jedoch wirklich eine komplizierte Lösung, wenn eigentlich alles, was Sie tun müssen, ist:
cd [your space containing directory]
rename 's/[[:space:]]/_/g' *.xml
und das ist es, sind Sie fertig.
Wenn Sie auf der anderen Seite versuchen, eine Liste von Dateinamen zu erstellen, möchten Sie sicherlich die Globbing-Methode, die, wenn Sie nur die Anweisung ändern, tun, was Sie auch dort wollen, das heißt, nur verwenden sed, um den Namen der Ausgabedatei zu ändern.
Wenn Ihr Ziel ist es, die Dateinamen zu Ausgabezwecken zu ändern, und nicht die eigentlichen Dateien umbenennen:
cd [directory with files]
shopt -s nullglob
a_glob=(*.xml);
for ((i=0;i< ${#a_glob[@]}; i++));do
echo "${a_glob[i]}" | sed 's/[[:space:]]/_/g';
done
shopt -u nullglob
# output:
bob_is_over_there.xml
fred_is_here.xml
greg_is_there.xml
Wo sind die Dateinamen kommen? Awk kann angewiesen werden, auf Zeilenumbrüche zu begrenzen, die dann leichter Übereinstimmungen in einem Muster sein können. – linden2015
Haben die Dateinamen die gleiche '.xml' Erweiterung? –
Ja, sie sind alle '.xml' Dateien – Deano