Ich habe einen großen Ordner mit Bildern (Tausende) und eine lange Liste von Dateien mit genauem Dateinamen, die ich in einen anderen Ordner kopieren muss. Ich möchte wissen, ob es eine Möglichkeit gibt, mehrere bestimmte Dateien aus diesem Ordner nach Namen auszuwählen und sie mit dem Terminal in einen anderen Ordner zu kopieren, ohne sie einzeln zu kopieren.
command-line
files
Jemand mit viel zu vielen Bildern
quelle
quelle
cp -rp /copying/from/{folder1/,folder2/,folder3/} path/to/folder
, wop
zum Kopieren der Ordner Erlaubnis ist.Antworten:
Kopieren Sie einfach mehrere Dateien auf einmal von der Kommandozeile
Es gibt verschiedene Möglichkeiten, wie Sie dies erreichen können. Das Einfachste, was ich gesehen habe, ist das Folgende.
Die Syntax verwendet den Befehl cp, gefolgt vom Pfad zu dem Verzeichnis, in dem sich die gewünschten Dateien befinden. Alle Dateien, die Sie kopieren möchten, sind in Klammern und durch Kommas getrennt.
Stellen Sie sicher, dass zwischen den Dateien keine Leerzeichen sind. Der letzte Teil des Befehls
/home/usr/destination/
ist das Verzeichnis, in das Sie die Dateien kopieren möchten.oder wenn alle Dateien dasselbe Präfix, aber unterschiedliche Endungen haben, können Sie so etwas tun:
Wobei Datei1, Datei2, Datei3 und Datei4 kopiert würden.
Wie Sie die Frage formuliert haben, ist Ihrer Meinung nach genau das, wonach Sie suchen. Es hört sich jedoch auch so an, als ob Sie nach einem Befehl suchen, mit dem Sie aus einer Liste von Dateien lesen und alle in ein bestimmtes Verzeichnis kopieren können. Wenn dies der Fall ist, lassen Sie es mich wissen und ich bearbeite meine Antwort.
Umgang mit Duplikaten mit Python
Also habe ich ein kleines Python-Skript geschrieben, von dem ich glaube, dass es die Arbeit erledigen sollte. Ich bin mir jedoch nicht sicher, wie gut Sie sich mit Python auskennen (wenn überhaupt), daher werde ich versuchen, die Verwendung dieses Skripts so gut wie möglich zu erläutern, und bitte Sie, so viele Fragen wie nötig zu stellen.
Dieses Skript sollte relativ einfach zu bedienen sein. Kopieren Sie zunächst den obigen Code in das Programm gedit (sollte in Ubuntu vorinstalliert sein) oder in einen anderen Texteditor.
Nachdem dies abgeschlossen ist, speichern Sie die Datei als move.py in Ihrem Home-Verzeichnis (es kann sich um ein beliebiges Verzeichnis handeln, zur Vereinfachung der Anweisungen können Sie jedoch einfach das Home-Verzeichnis verwenden) oder fügen Sie das Verzeichnis, in dem sich die Datei befindet, zu Ihrem PATH hinzu. Dann
cd
zu Ihrem Home - Verzeichnis (oder was auch immer Verzeichnis gespeichert Sie move.py in) vom Terminal und geben Sie den folgenden Befehl ein :Dies sollte alle Dateien, die im Quellverzeichnis aufgelistet sind, in das Zielverzeichnis kopieren, wobei Duplikate im Format pic (1) .jpg, pic (2) .jpg usw. vorliegen. file.txt sollte eine Datei sein, die alle Bilder auflistet, die Sie mit jedem Eintrag in einer eigenen separaten Zeile kopieren möchten.
Dieses Skript sollte sich in keiner Weise auf das Quellverzeichnis auswirken. Achten Sie jedoch darauf, die richtigen Pfade zum Quell- und Zielverzeichnis einzugeben. Das Schlimmste, was passieren kann, ist, dass Sie die Dateien in das falsche Verzeichnis kopieren.
Anmerkungen
"Datei existiert nicht" aus und fordert Sie auf, die Eingabetaste zu drücken, um fortzufahren, und das Skript kopiert den Rest der Liste weiter.
/
sowohl den Pfad zum Quellverzeichnisals auch den Pfad zum Zielverzeichnis anzuhängen. Andernfalls gibt das Skript einen Fehler an Sie zurück.
quelle
cp $(pwd)/{file1,file2} /path/to/dst/
odercp $(pwd)/{file1,file2} $(pwd)/{renamed1,renamed2}
usw.Vielleicht fehlt mir ein Detail Ihrer Frage, aber die Antworten scheinen übertrieben. Wenn Sie eine Befehlszeilenlösung und kein Skript wünschen, warum nicht:
Das Schöne dabei ist, dass Sie die Dateinamen mit einem Tab vervollständigen können
quelle
brew install coreutils
dann kannst du übliche gnu sachen mitg
präfix bekommen. Also das wirdgcp -t ....
cp
, und insbesondere haben weder OpenBSD noch FreeBSD diese Option, also ja - dies ist GNU-cp
spezifisch. Es ist auch nicht durch den POSIX- Standard spezifiziert . Da dies eine Ubuntu-spezifische Site ist, ist dies akzeptabel, aber für die Portierung von Skripten zwischen Betriebssystemen ist es besser, den POSIX-Standard zu verwendenHier ist eine reine Bash-Lösung. Es liest Dateinamen aus einer Eingabedatei (einen pro Zeile) und kopiert jeden von ihnen, wobei Duplikate umbenannt werden.
Speichern Sie dieses Skript in einem Ordner in Ihrem
$PATH
und rufen Sie es mit der Liste der Pfade als Eingabe auf:Sie können das Ganze auch als Befehl vom Terminal aus ausführen:
quelle
Nach der Beschreibung der Frage ist mein Verständnis, dass:
input.txt
Somit kann man folgenden Befehl verwenden:
Erläuterung:
-I %
Gibt das Symbol für die aktuell verarbeitete Datei an, die im Befehl verwendet werden soll--arg-file=input.txt
Gibt an, dass Argumente zum Befehlen verwendet werden solleninput.txt
cp /path/to/origin_dir/% /path/to/destination/
führt dencp
Befehl aus, wobei/path/to/origin_dir/%
er durch/path/to/origin_dir/
und den Namen der aktuell verarbeiteten Datei ersetzt wird.Praktisches Beispiel:
quelle