Я хочу найти некоторые файлы, а затем переместить их.
Я могу найти файл с:
$ find /tmp/ -ctime -1 -name x*
Я попытался переместить их в мой ~/play
каталог с помощью:
$ find /tmp/ -ctime -1 -name x* | xargs mv ~/play/
но это не сработало. Очевидно, mv нужны два аргумента.
Не уверены, что (или как) ссылаться на текущий элемент xargs в команде mv?
-I
:,find . | xargs -I'{}' mv '{}' ~/play/
но, как говорит человек, это «подразумевает-x
и»-L 1
. Так что никакой выгоды. Лучшеfind . -exec mv '{}' ~/play/ \;
Ответы:
Посмотрите на ответ Стефана за лучший метод, посмотрите на мой ответ по причинам, по которым не используются более очевидные решения (и по причинам, по которым они не являются наиболее эффективными).
Вы можете использовать
-I
опциюxargs
:Который работает по аналогичному механизму
find
и{}
. Я бы также процитировал ваш-name
аргумент (потому что файл, начинающийся сx
данного каталога, будет глобализирован и передан в качестве аргумента для поиска - что не даст ожидаемого поведения!).Однако, как указано в manatwork, как подробно описано на
xargs
странице руководства :Важно отметить, что это
-L 1
означает, что одновременно обрабатывается только одна строка выводаfind
. Это означает, что это синтаксически так же, как:(который выполняет одну
mv
операцию для каждого файла).Даже использование
-0
аргумента GNU xargs иfind -print0
аргумента приводит к абсолютно одинаковому поведению-I
- этоclone()
процесс для каждого файлаmv
:источник
С инструментами GNU:
Опция
-t
(--target
) специфична для GNU.-print0
,-r
,-0
, В то время как нестандартное и происходящий в GNU также найдены в некоторых других вариантах реализации , как на некоторых BSDs.POSIXly:
Оба запускают столько
mv
команд, сколько необходимо, и работают с любыми символами, которые могут содержать имена файлов. У GNU one может быть преимущество в том, что онfind
продолжает искать файлы, когдаmv
начинает перемещать первый пакет.Помните, что все файлы и каталоги окажутся в одном каталоге, остерегайтесь столкновений, если несколько файлов в разных каталогах имеют одинаковые имена.
источник
mv
один раз для всех аргументов (или для всех-L
или-n
, если предоставлено). В противном случае вызовmv
для каждого файла быстро устареет (и замедлится).Возможно, эта команда возможна сейчас, и ее не было в 2013 году, но она отлично работает для меня:
В
-t
ключевых путах папки назначения первыми, освободивmv
команду , чтобы все последние аргументы , как только файлы будут перемещены.источник
Вы можете попробовать с приведенной ниже командой и проверено, и она работала нормально
источник