У меня есть куча файлов в некотором каталоге (вместе со многими другими файлами), которые я хочу переместить.
К счастью, все файлы, которые я хочу переместить, содержат в своих именах определенный идентификатор, поэтому я могу ls | grep IDENTIFIER
получить точный список файлов для перемещения.
Но как я могу выполнить mv file /path/to/dest/folder/
одновременно, а не один за другим (нужно переместить много файлов)?
Если Вы хотите переместиться ABC-IDENTIFIER-XYZ.ext
или IDENTIFIER-XYZ.xml
, можно использовать:
mv *IDENTIFIER* ~/YourPath/
*
подстановочный знак для нуль или больше символов , это означает нуль или больше символов , сопровождаемый IDENTIFIER
, сопровождаемый нуль или больше символов .
Это переместит все файлы, которые содержат IDENTIFIER
, Вы определили.
Вы могли использовать
mv -t DESTINATION file1 file2 file3
и
mv -t DESTINATION `ls|grep IDENTIFIER`
работы, но я не уверен, вызывается ли mv многократно или не, поскольку grep произведет новую строку для каждого соответствия.
Если у Вас есть столько файлов для перемещения, у Вас могут на самом деле быть слишком многие для mv
команда (или другие команды как rm
). Я предлагаю использовать xargs
для перемещения каждого файла индивидуально в цикл как вид. Один способ двигаться, который должен сделать:
ls -1 | grep IDENTIFIER | xargs -i mv {} /path/to/dest/folder/
ls -1
(минус один) гарантирует, что существует только одно имя файла на каждой строке. При сокрытии псевдонимов для эти ls
команда, Вы можете иметь несколько имен файлов на одной строке и непреднамеренно переместить файл, который Вы не намеревались переместить.
Используя эту команду можно переместить несколько файлов.
mv SourceFilenames ~DestinationPath
Можно использовать вывод от ls для ввода в mv commnad
mv $(ls | grep IDENTIFIER) /path/to/dest/dir
команды между $()
возвраты список имен файлов, соответствующих поиску, и это может быть обеспечено в качестве параметра для команды mv.
Можно использовать подстановочные знаки .
Пример: Для перемещения всех файлов, имеющих дополнительный .doc
mv *.doc /path/to/dest/folder/
, Это переместит весь файл документа под текущим каталогом определенному месту назначения.
Редактирование
Для ответа на комментарий.
mv *.ext *.xml *.txt /path/to/dest/folder/
Используйте эту команду:
mv `ls|grep IDENTIFIER` /path/to/dest/folder
Однако ls не рекомендуется для этого вида использования. Используйте , находят команда вместо этого.
В случае, если Вы хотите переместить ряд несоответствующих файлов (никакой общий шаблон на имена и типы), можно сделать, как сказал г-н Rajanand: сначала перейдите к каталогу, который содержит файлы, которые Вы хотите переместить
mv file1.ext1 file2.ext2 file3.ext3.. /destination/
В случае, если файлы рассеиваются в различных каталогах, только необходимо указать путь для каждого файла в команде
перемещенияЯ использую метод tuomaz, но немного измененный:
mv file1 file2 file3 -t DESTINATION
я нахожу это легче помнить и тяжелее завинтить, так как это использует то же упорядочивание в качестве ванили mv операция:
mv file1 DESTINATION
find -type f -name "[range]" -exec mv {} target-directory ';'
эта команда переместит имена файлов с любым шаблоном/диапазоном к целевому каталогу.
например.
find -type f -name "file[1-50000]" -exec mv {} target-directory ';'
это переместит файлы с именами как file1
, file2
... file50000
кому: target-directory
.
Если файлы находятся в том же dir, можно использовать
mv /path/to/source/dir/{file1,file2,*.ext1,*.ext2} /path/to/destination/
(протестированный в Ubuntu 16.04)
Самый легкий путь похож на это
mv {file1,file2,file3} DESTINATION
или каталог
mv {directory1,directory2,directory3} DESTINATION
или и файлы и каталоги
mv {file1,file2,file3,directory1,directory2,directory3} DESTINATION
Надеюсь, это поможет
Если вы используете рыбную
раковину, в большинстве случаев вам повезло. Так что все просто: просто введите пункт назначения в качестве последнего файла.
mv file1 file2 file3 DESTINATION
Вы можете использовать find
и -exec
следующим образом:
find . -name "Identifier" -exec echo mv {} <destination_path> \;