21

Я пытаюсь это, и это не работает:

ls file_* | xargs mv {} temp/

Есть идеи?

5 ответов5

27

На OS X:

ls file_* | xargs -J {} mv {} temp/

В Linux:

ls file_* | xargs -i {} mv {} temp/
8

find . -name "file_*" -maxdepth 0 -exec mv {} temp/ \;

команда find лучше, чем ls где файлов может быть больше, чем количество аргументов программы, разрешенных вашей оболочкой.

8

Используйте -t "указать целевую директорию" в mv, она должна работать при перемещении файлов * в каталог назначения /temp

например:- #ls -l file * | xargs mv -t /temp

3

В соответствии с предложением @ 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
0

Другое решение может быть:

 for f in file_* ; do
   mv $f temp/$f
 done

Недостатком является то, что он создает новый процесс mv для каждого файла.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .