Рекурсивно искать каталоги, перемещая указанный тип файла из одного места в другое, сохраняя структуру каталогов - PullRequest
1 голос
/ 24 февраля 2009

Есть ли какой-то способ указать каталог (скажем, "C: \ images") и переместить каждый файл .jpg оттуда в другой каталог (скажем, "D: \ media"), но сохранить структуру каталога (так что если файл был "C: \ images \ paintball \ july \ 07 \ headshot.jpg" после перемещения это будет "D: \ media \ paintball \ july \ 07 \ headshot.jpg")?

Я использую Cygwin (но был бы рад использовать DOS, если это тоже работает).

Ответы [ 4 ]

2 голосов
/ 24 февраля 2009
( cd /cygdrive/c/images
tar --create --file - . ) | ( cd /cygdrive/d/media
tar --extract --file - )

В некоторых версиях tar также есть опция --directory, с помощью которой вы можете избежать сложностей передачи между подоболочками, но я никогда не использую ее сам, поэтому я могу что-то упустить:

tar --create --file - -C /cygdrive/c/images . | tar --extract --file - -C /cygdrive/d/media

Если вам нужна большая мощность / гибкость, найдите время, чтобы исследовать rsync.

Поскольку вы работаете в Windows, вы также можете взглянуть на xxcopy. Это отлично подходит для такого рода вещей и многое другое.

2 голосов
/ 24 февраля 2009

Да.

Создайте архив tar из * .jpg файлов, сохранив при этом структуру каталогов (есть переключатель), затем извлеките его в целевой каталог. Должен быть однострочным.

0 голосов
/ 19 июля 2009

Спасибо за решение XCOPY, оно решило мою похожую проблему, поэтому я решил поделиться подробностями для всех, кому это нужно.

Я хотел получить список (а не копию) всех файлов в каталоге (и подкаталогах), которые не принадлежат к определенному типу, например * .jpg. Но команда DIR не имеет функции исключения. Итак, я:

  1. Создан файл с именем exclist.txt, содержащий одну строку ".jpg"
  2. Запустил команду "xcopy c: \ files c: \ test /exclude:exclist.txt / l / d / e / h / i / y> found.txt"
  3. Открыл found.txt в Блокноте, чтобы увидеть список не-jpg файлов

Обратите внимание на параметр XCOPY / l, в котором перечислены файлы, которые нужно скопировать, не копируя их. Поскольку XCOPY выполняется в «режиме списка», папка назначения c: \ test не создается и файлы не копируются. "> found.txt" сохраняет вывод команды XCOPY в файл found.txt, а не отображает результаты на экране.

0 голосов
/ 25 февраля 2009

Вы также можете использовать команду xcopy , как в этом примере (старый каталог):

xcopy cvs_src\*.jpg old /e/i/h/y/d/exclude:files_to_exclude
...