В командной строке Linux я хотел бы скопировать (очень большой) набор .txt
файлов из одного каталога (и его подкаталогов) в другой.
Мне нужно, чтобы структура каталогов оставалась неизменной, и мне нужно игнорировать файлы, кроме тех, которые заканчиваются на .txt
.
Ответы:
Вы можете использовать find и cpio для этого
источник
источник
.
послеfind
. Также на macOS 10.13.1 это сработало:find . -type f -name "*.txt" -exec install -v {} /dest/path/{} \;
Другой подход
find . -name '*.txt' -exec rsync -R {} path/to/dext \;
источник
find . -iname '*.txt' -exec rsync -Rptgon {} path/to/dext \;
делал сопоставление без учета регистра и сохранял права собственности и разрешения.Самый простой способ, который работал для меня:
одна загвоздка в том, что вам нужно перейти в «нужный» каталог, прежде чем «родительский путь» будет правильным.
Также убедитесь, что вы включили рекурсивные глобусы в bash:
источник
как насчет того, чтобы сначала скопировать
затем перейдите в новую папку и запустите
или просто
Изменить: хорошо, вы хотите одну команду, которая фильтрует (я не проверял это, потому что моя система не имеет
cpio
команды!). Вот где я нашел это: http://www.gnu.org/software/findutils/manual/html_mono/find.html#Copying-A-Subset-of-FilesПожалуйста, сначала проверьте это, потому что я еще не пробовал. Если бы кто-то проверил, это было бы здорово.
источник
0
в систему-pmd0
и добавить-print0
в конецfind
команды ( как раз перед|
).Я пытался сделать то же самое в macOS, но ни один из вариантов не помог мне. Пока я не обнаружил
ditto
.Мне пришлось скопировать много файлов .wav и пропустить видеофайлы ... Итак, вот что я придумала:
find . -type f -iname "*.wav" -ls -exec ditto {} /destination/folder/{} \;
find .
- Запускает поиск в текущей папке. убедитесь, что вы,cd /source/folder
прежде чем начать-type f
- Определяет, чтобы искать только файлы-iname "*.wav"
- Это говорит о том, что нужно искать регистр без учета * .wav-ls
- Это показывает вам файл, над которым он работает. В противном случае это ничего не показывает.-exec ditto {} /destination/folder/{} \;
- выполняет всю работу по копированию и созданию файлов с одинаковым деревом каталогов.источник
Перейдите в каталог:
Это немного проще и мощнее, если вы управляете регулярными выражениями.
источник
Перейдите в каталог:
Вам придется перейти к каждой папке в каталоге, но это лучше, чем большинство вариантов, которые я видел до сих пор.
источник