Я пытаюсь это, и это не работает:
ls file_* | xargs mv {} temp/
Любые идеи?
Я пытаюсь это, и это не работает:
ls file_* | xargs mv {} temp/
Любые идеи?
Ответы:
На OS X:
ls file_* | xargs -J {} mv {} temp/
В Linux:
ls file_* | xargs -i {} mv {} temp/
/в конце необязательно. Вы можете включить его, если хотите, но это не обязательно.
-i(или -J) укажите токен, который будет заменен входящими аргументами, а не просто прикреплен к концу. man xargs
-i{}, без пробела. Или сказать -I {}.
-i, он заменяется. ls file_* | xargs -iFOO mv FOO temp/работает точно так же.
find . -name "file_*" -maxdepth 0 -exec mv {} temp/ \;
findлучше, чем lsтам, где может быть больше файлов, чем количество аргументов программы, разрешенных вашей оболочкой.
file_*файлы в текущем каталоге, в то время как find(без дополнительных опций) будет выполняться поиск по всему дереву каталогов в текущем каталоге.
mvне имеет значения, обрабатываете ли вы файлы вместе или по отдельности, некоторые другие возможности могут.
В соответствии с предложением @ user1953864: { -i, -J} укажите токен, который будет заменен входящими аргументами.
Например ls:
something.java exampleModel.java NewsQueryImpl.java readme someDirectory/
Затем переместить все файлы Java в папку someDirectory с помощью xargsследующего:
В линуксе
ls *.java | xargs -i mv {} someDirectory/
На MacOS
ls *.java | xargs -J mv {} someDirectory
Другое решение может быть:
for f in file_* ; do
mv $f temp/$f
done
Недостатком является то, что он создает новый mvпроцесс для каждого файла.
xargs -n10например)