xargs und cp: find-style “{} +” mehrere Erweiterungen?

0

Ich möchte eine Gruppe von Dateien in den Zielordner kopieren. Aber ohne eine neue Instanz von erzeugen zu müssen cp für jede Operation.

Das arg-Format für cp scheint zu sein:

cp src_file1 src_file2 src_file3 dest_dir/

Angenommen, ich habe eine Datei, in der die Namen der Quelldateien Zeile für Zeile aufgeführt sind, wie kann dies geschehen?

Da ich über eine sehr große Anzahl von Dateien verfüge, funktioniert die folgende Idee von @Scott nicht, da sie die maximale Befehlszeilenlänge erreicht.

Ich möchte diese Datei mit Dateinamen irgendwie weiterleiten cp und lass es tun, es ist eine Sache. xargs scheint auch nicht zu helfen, da sie die Erweiterung am Ende der Kommandozeile anpacken will.

Kann das gemacht werden?

Vielen Dank

nonot1
quelle

Antworten:

1

Ob filelist enthält

apple
orange
banana

wobei dies die Namen der Dateien sind, in die Sie kopieren möchten fruity Verzeichnis, Typ

cp `cat filelist` fruity

Sie brauchen das nicht / Am Ende.

Achtung: Dies funktioniert nicht, wenn einer der Dateinamen Leerzeichen enthält, z. passion fruit.

Scott
quelle
Funktioniert nicht ganz .. Ich habe die Frage geklärt. Es gibt viele Dateien.
nonot1
Solange keiner der Dateinamen Leerzeichen oder Anführungszeichen enthält, xargs -J {} cp {} fruit < filelist sollte arbeiten. Wenn es Leerzeichen und / oder Anführungszeichen gibt, können Sie mit gehen Antwort von Eicto oder einfach tun tr "\n" "\0" < filelist | xargs -0 -J {} cp {} fruit.
Scott
0

Simulieren print0 von finden:

cat filelist |perl -p -e 's/\n/\000/' |xargs -0 cp --target-directory dest_dir/

Dieses Beispiel enthält xargs -0. --target-directory

zb'
quelle