Как использовать find cmd для фильтрации файлов с расширением .txt (не для каталогов) и копирования этих файлов вместе с их родительской структурой каталогов? - PullRequest
0 голосов
/ 29 марта 2020

На моем компьютере с Ubuntu у меня есть каталоги и текстовые файлы, как показано ниже.

root@homelinuxpc:/home/admin/dir1# ls
dir2  dir3.txt  test1.txt  test2.txt
root@homelinuxpc:/home/admin/dir1# cd dir2
root@homelinuxpc:/home/admin/dir1/dir2# ls
test3.txt  test4.txt

ПРИМЕЧАНИЕ. У меня есть рекурсивные каталоги, такие как dir2 внутри dir1. И имя каталога также как dir3.txt.

Я хочу использовать команду Linux find для:

  1. Поиск только файлов с расширением .txt. (Необходимо исключить каталоги)
  2. Скопируйте все эти файлы вместе с их родительской структурой каталогов в какое-то место

Я попробовал следующие варианты:

find -name "*.txt" -not -path "./directory/*" -exec cp {} /beta/ \;

В В приведенном выше случае я могу копировать только файлы * .txt. Невозможно сохранить структуру родительского каталога.

А также я пытался использовать

find . -name '*.txt' | cpio -pdm /target

. В приведенном выше случае я могу найти и скопировать все файлы * .txt, а также каталог dir3.txt

Как это исправить с помощью альтернативных команд поиска?

...