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 lsdove 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.
mvnon 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 xargssarebbe 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 mvprocesso per ogni file.
xargs -n10ad esempio)