2011-01-12 7 views

Odpowiedz

13

Odmianą Konrad odpowiedź, używając cp opcję -t określić katalog docelowy upraszcza ostatnie polecenie. Tworzy pojedynczy proces cp, aby skopiować wszystkie pliki.

ls src_folder | grep -v '^String' | xargs cp -t dest_folder 
  • Lista wszystkich plików w src_folder
  • odfiltrować wszystkie te, które zaczynają się String
  • skopiować wszystkie pozostałe pliki dest_dir
3
ls src_folder | grep -v '^String' | xargs -J % -n1 cp % dest_folder 

Ta lista

  • wszystkie pliki w src_folder
  • odfiltrować wszystkie te, które zaczynają się String (tak, że reszta pozostaje)
  • Wywołaj komendę cp
    • raz dla każdego z tych plików (-n1 mówi, aby wywołać cp dla każdego z plików je oddzielnie)
    • używając, jako argumenty, % dest_folder, gdzie % jest zastąpiony przez rzeczywistą nazwę pliku.
+0

Moje 'xargs' (testowanie Debiana) nie ma opcji' -J'. Czy miałeś na myśli '-I'? – maxelost

+1

@maxelost: Używam wersji BSD z OS X. Opcja '-I' robi coś innego. Szkoda, że ​​wszystkie dystrybucje mają różne przełączniki na swoich narzędziach POSIX. :-(Tyle jeśli chodzi o standaryzację –

1
cp src_folder/!(String*) dest_folder 

Spróbuj że ~ Chris

+0

Otrzymuję komunikat o błędzie: błąd składniowy w pobliżu nieoczekiwanego tokena '(' – mstaniloiu

+0

Z jakiegoś powodu dla mnie działa. Spróbuj polecenia, które opublikował Ignacio (Poprawione w mojej odpowiedzi powyżej - ty don 't need the shopt -s extglob) – TyrantWave

5

W bash:

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

@Joel: Włącza rozszerzone globbing w bash. –

Powiązane problemy