W Linuksie przynajmniej /koniec jest opcjonalny. Możesz dołączyć, jeśli chcesz, ale nie jest to konieczne.
Scott
4
@ user1953864: -i(lub -J) podaj token, który zostanie zastąpiony przychodzącymi argumentami, zamiast po prostu sczepiony na końcu. man xargs
Amadan
14
Być może będziesz musiał powiedzieć -i{}bez spacji. Lub powiedz -I {}.
Scott
1
Zauważam, że użycie „%” zamiast „{}” również działa - co oznacza%, a co {}? Przykład: ls plik_ * | xargs -I% mv% temp /
dmonopoly
3
@dmonopoly: Nic nie znaczą . Niezależnie od tego -i, jaki jest parametr , jest on zastępowany. ls file_* | xargs -iFOO mv FOO temp/działa dokładnie tak samo.
Zauważ, że pytanie sugeruje chęć przetwarzania tylko file_*plików w bieżącym katalogu, podczas gdy find(bez dodatkowych opcji) przeszuka całe drzewo katalogów w bieżącym katalogu.
Scott
1
Tak, prawda. Dodaj, -maxdepth 0aby temu zapobiec.
„lepszy” jest subiektywny. Bardziej wydajny, bardziej złożony i wolniejszy; i chociaż mvnie ma znaczenia, czy pliki są przetwarzane razem czy osobno, niektóre inne zastosowania mogą.
Amadan
Edytowano (dodano -maxdepth 0)
8
Użyj -t „określ docelowy katalog” w mv, powinno działać przenoszenie plików * do docelowego katalogu / temp
xargs -n10
na przykład)Odpowiedzi:
W systemie OS X:
W systemie Linux:
źródło
/
koniec jest opcjonalny. Możesz dołączyć, jeśli chcesz, ale nie jest to konieczne.-i
(lub-J
) podaj token, który zostanie zastąpiony przychodzącymi argumentami, zamiast po prostu sczepiony na końcu.man xargs
-i{}
bez spacji. Lub powiedz-I {}
.-i
, jaki jest parametr , jest on zastępowany.ls file_* | xargs -iFOO mv FOO temp/
działa dokładnie tak samo.find . -name "file_*" -maxdepth 0 -exec mv {} temp/ \;
find
jest lepszy niżls
tam, gdzie może być więcej plików niż liczba argumentów programu dozwolonych przez twoją powłokę.źródło
file_*
plików w bieżącym katalogu, podczas gdyfind
(bez dodatkowych opcji) przeszuka całe drzewo katalogów w bieżącym katalogu.-maxdepth 0
aby temu zapobiec.mv
nie ma znaczenia, czy pliki są przetwarzane razem czy osobno, niektóre inne zastosowania mogą.-maxdepth 0
)Użyj -t „określ docelowy katalog” w mv, powinno działać przenoszenie plików * do docelowego katalogu / temp
np .: - #ls -l plik * | xargs mv -t / temp
źródło
Zgodnie z sugestią @ user1953864: {
-i
,-J
} podaj token, który zostanie zastąpiony przychodzącymi argumentami.Na przykład
ls
:Następnie przeniesienie wszystkich plików Java do folderu someDirectory za pomocą
xargs
:W systemie Linux
Na MacOS
źródło
Innym rozwiązaniem może być:
Wadą jest to, że forsuje nowy
mv
proces dla każdego pliku.źródło