Ich möchte Dateien mit mehreren Erweiterungen in ein einziges Zielverzeichnis kopieren.
Zum Beispiel kann ich den folgenden Befehl verwenden, um alle TXT- Dateien im Arbeitsverzeichnis in ein Verzeichnis mit dem Namen zu kopieren destination
:
cp -v *.txt destination/
Und ich kann Folgendes verwenden, um alle PNG- Verzeichnisse im Arbeitsverzeichnis zu kopieren destination
:
cp -v *.png destination/
Es ist jedoch zeitaufwendig, diese als separate Befehle einzugeben (auch bei Verwendung des Befehlsverlaufs). Gibt es also eine Möglichkeit, cp
Dateien mit dem Muster *.txt
oder dem Muster *.png
zu kopieren destination
? Im Idealfall möchte ich in der Lage sein, mehr als zwei Muster anzugeben - beispielsweise die Anweisung cp
, alle *.txt
oder *.png
oder *.jpg
Dateien zu kopieren destination
.
Ich bin mir sicher, dass dies alles mit einem Shell-Skript möglich ist - ich verwende bash
zum Beispiel -, aber gibt es eine Möglichkeit, dies einfacher zu bewerkstelligen, nur von der Konsole aus? Könnte ich irgendwie Klammererweiterung verwenden, um es zu tun?
Ich weiß, dass es möglich ist, alle Dateien im Arbeitsverzeichnis zu kopieren, mit Ausnahme der Dateien, die mit bestimmten angegebenen Mustern übereinstimmen. Da mein Arbeitsverzeichnis jedoch weit mehr Dateierweiterungen enthält, die ich nicht kopieren möchte als die, die ich mache , wäre das ein Schmerz.
Hast du irgendwelche Gedanken dazu?
cp -v *.txt *.png destination/
?Antworten:
Die Klammererweiterung erledigt die Arbeit.
man bash
und suche nachBrace Expansion
.BEARBEITEN:
In Übereinstimmung mit der Anforderung des OP fehlte dem obigen Befehl die ausführliche Option:
quelle
cp data/images/*.{jpg,jpeg,png,mp4} destination/
und einemp4
Datei nicht existiert, erhalte ich eineNo such file or directory
Fehlermeldung, die das Skript bricht. Kann ich dafür sorgen, dass die mehreren Erweiterungen alle fehlenden Formate ordnungsgemäß verarbeiten?Das funktioniert!
quelle