У меня есть большая папка с изображениями (тысячи), и у меня есть длинный список файлов с точным именем, которые мне нужно скопировать в другую папку. Я хочу знать, есть ли способ выбрать несколько определенных файлов из этой папки по имени и скопировать их в другую папку, используя терминал, не копируя их по отдельности?
command-line
files
Тот, у кого слишком много пиктов
источник
источник
cp -rp /copying/from/{folder1/,folder2/,folder3/} path/to/folder
гдеp
для копирования разрешений папки.Ответы:
Просто скопируйте несколько файлов одновременно из командной строки
Есть несколько способов добиться этого. Самое простое, что я видел, это использовать следующее.
Синтаксис использует команду cp, за которой следует путь к каталогу, в котором находятся нужные файлы, а все файлы, которые вы хотите скопировать, заключены в квадратные скобки и разделены запятыми.
Обязательно обратите внимание, что между файлами нет пробелов. Последняя часть команды,
/home/usr/destination/
это каталог, в который вы хотите скопировать файлы.или если все файлы имеют одинаковый префикс, но разные окончания, вы можете сделать что-то вроде этого:
Где файл1, файл2, файл3 и файл4 будут скопированы.
Исходя из того, как вы сформулировали вопрос, я считаю, что это то, что вы ищете, но также может показаться, что вы, возможно, ищете команду для чтения из списка файлов и копирования их всех в определенный каталог. Если это так, дайте мне знать, и я отредактирую свой ответ.
Работа с дубликатами с питоном
Поэтому я написал небольшой скрипт на python, который, я считаю, должен выполнить работу. Однако я не уверен, насколько хорошо вы разбираетесь в python (если вообще разбираетесь), поэтому я постараюсь объяснить, как использовать этот скрипт наилучшим образом, и, пожалуйста, задайте столько вопросов о нем, сколько вам нужно.
Этот скрипт должен быть относительно простым в использовании. Прежде всего, скопируйте приведенный выше код в программу gedit (должна быть предварительно установлена в Ubuntu) или в любой другой текстовый редактор.
После этого сохраните файл как move.py в вашем домашнем каталоге (это может быть любой каталог, но для простоты инструкций просто используйте домашний каталог) или добавьте каталог, в котором находится файл, в вашу переменную PATH. Затем
cd
в свой домашний каталог (или любой другой каталог, в котором вы сохранили move.py) из терминала и введите следующую команду:Это должно скопировать все файлы, перечисленные из исходного каталога в каталог назначения с дубликатами в формате pic (1) .jpg, pic (2) .jpg и так далее. file.txt должен быть файлом, в котором перечислены все изображения, которые вы хотите скопировать с каждой записью в отдельной строке.
Этот сценарий никоим образом не должен влиять на исходный каталог, однако убедитесь, что вы ввели правильные пути к исходному и целевому каталогу, и самое худшее, что может случиться, - это скопировать файлы в неправильный каталог.
Примечания
«файл не существует» и предложит вам «нажать ввод», чтобы продолжить, и скрипт продолжит копирование остальной части списка.
/
как путь к исходномукаталогу, так и путь к конечному каталогу. В противном случае скрипт выдаст вам ошибку.
источник
cp $(pwd)/{file1,file2} /path/to/dst/
cp $(pwd)/{file1,file2} $(pwd)/{renamed1,renamed2}
Возможно, мне не хватает детали вашего вопроса, но приведенные ответы кажутся излишними. Если вам нужно решение для командной строки, а не сценарий, почему бы и нет:
Хорошая вещь в том, что вы можете делать это таким образом, что вы можете вкладывать имена файлов
источник
brew install coreutils
тогда вы можете получить обычные вещи GNU сg
префиксом. Так и будетgcp -t ....
cp
, и, в частности, ни OpenBSD, ни FreeBSD не имеют такой опции, так что да - этоcp
специфично для GNU . Это также не указано стандартом POSIX . Поскольку это сайт, специфичный для Ubuntu, это приемлемо, но для переноса скриптов между ОС лучше придерживаться стандарта POSIXВот чистое решение Bash. Он будет читать имена файлов из входного файла (по одному в строке) и копировать каждое из них, переименовывая дубликаты.
Сохраните этот скрипт в своей папке
$PATH
и вызовите его со списком путей в качестве входных данных:Вы также можете запустить все это как команду из терминала:
источник
Согласно описанию вопроса, я понимаю, что:
input.txt
Таким образом, можно использовать следующую команду:
Объяснение:
-I %
указывает символ для текущего обработанного файла, который будет использоваться в команде--arg-file=input.txt
указывает принимать аргументы для команды изinput.txt
cp /path/to/origin_dir/% /path/to/destination/
выполнитcp
команду с/path/to/origin_dir/%
заменой/path/to/origin_dir/
и именем обрабатываемого файла.Практический пример:
источник