2011-01-12 14 views

Antwort

13

Eine Variation Konrad Antwort, mit cp Option -t Zielverzeichnis vereinfacht den letzten Befehl angeben. Es erstellt einen einzelnen Prozess cp, um alle Dateien zu kopieren.

ls src_folder | grep -v '^String' | xargs cp -t dest_folder 
  • Liste alle Dateien in src_folder
  • Filter aus allen diejenigen, die hier mit String
  • Kopie alle verbleibenden Dateien zu dest_dir
3
ls src_folder | grep -v '^String' | xargs -J % -n1 cp % dest_folder 

Dies wird

  • Liste alle Dateien in src_folder
  • Filter aus all jene, die mit String beginnen (so dass der Rest bleibt)
  • Rufen Sie den cp Befehl
    • einmal für jede dieser Dateien (-n1 sagt zu cp für jedes der anrufen sie separat)
    • mit, als Argumente, % dest_folder, wobei % durch den tatsächlichen Dateinamen ersetzt wird.
+0

Meine 'xargs' (Debian Testing) hat keine' -J' Option. Meintest du "-I"? – maxelost

+1

@maxelost: Ich benutze die BSD-Version von OS X. Option '-I' macht etwas anderes. Es nervt, dass alle Distributionen unterschiedliche Schalter in ihren POSIX-Tools haben. :-(So viel zur Standardisierung. –

1
cp src_folder/!(String*) dest_folder 

Versuchen Sie, dass ~ Chris

+0

Ich bekomme eine Fehlermeldung: Syntaxfehler in der Nähe von unerwarteten Token '(' – mstaniloiu

+0

Aus irgendeinem Grund funktioniert das für mich. Probieren Sie den Befehl, dass Ignacio gepostet (Angepasst in meiner Antwort oben - Sie don 't brauche die shopt -s extglob) – TyrantWave

5

In bash:

shopt -s extglob 
cp src_folder/!(String*) dest_folder 
+0

@Joel: Aktiviert erweitertes Globbing in bash. –

Verwandte Themen