Sto provando questo e non funziona:
ls file_* | xargs mv {} temp/
Qualche idea?
Sto provando questo e non funziona:
ls file_* | xargs mv {} temp/
Qualche idea?
Risposte:
Su OS X:
ls file_* | xargs -J {} mv {} temp/
Su Linux:
ls file_* | xargs -i {} mv {} temp/
/
alla fine è facoltativo. Puoi includerlo se vuoi, ma non è necessario.
-i
(o -J
) specifica un token che verrà sostituito con gli argomenti in arrivo, invece che essere semplicemente incollato alla fine. man xargs
-i{}
, senza uno spazio. O dire -I {}
.
-i
, viene sostituito. ls file_* | xargs -iFOO mv FOO temp/
funziona esattamente lo stesso.
find . -name "file_*" -maxdepth 0 -exec mv {} temp/ \;
find
è migliore di ls
dove potrebbero esserci più file rispetto al numero di argomenti del programma consentiti dalla shell.
file_*
file nella directory corrente, mentre find
(senza opzioni aggiuntive) cercherà l'intero albero della directory nella directory corrente.
mv
non importa se si elaborano i file insieme o individualmente, alcuni altri usi potrebbero.
Come suggerito da @ user1953864: { -i
, -J
} specifica un token che verrà sostituito con gli argomenti in arrivo.
Per esempio ls
:
something.java exampleModel.java NewsQueryImpl.java readme someDirectory/
Quindi spostare tutti i file java nella cartella someDirectory con xargs
sarebbe il seguente:
Su Linux
ls *.java | xargs -i mv {} someDirectory/
Su MacOS
ls *.java | xargs -J mv {} someDirectory
Un'altra soluzione potrebbe essere:
for f in file_* ; do
mv $f temp/$f
done
Lo svantaggio è che crea un nuovo mv
processo per ogni file.
xargs -n10
ad esempio)