/ / bash shell: рекурсивно търсене папка и подпапки за файлове от списъка - bash, черупка, рекурсия

bash shell: рекурсивно търсене на папки и подпапки за файлове от списъка - bash, shell, recursion

Досега, когато искам да събирам файлове от списък, използвам списък, който съдържа пълен пътеки и използвайки:

cat pathlist.txt | xargs -I % cp % folder

Бих искал обаче да бъда в състояние да преглеждам повторно една папка и нейните подпапки и да копирам всички файлове, които са в списък с обикновени текстове само с имена на файлове (не пълни пътеки).

Как да направя това?

Благодаря!

Отговори:

0 за отговор № 1

Опитайте нещо подобно

find folder_to_search -type f | grep -f pattern_file | xargs -I % cp % folder

1 за отговор № 2

Ако приемем, че списъкът ви с имена на файлове съдържа голи имена на файлове, както би било подходящо за даване на аргументи find -name, можете да направите точно това.

sed "s/^/-name /;1!s/^/-o /" pathlist.txt |
xargs -I % find folders to search -type f ( % ) -exec cp -t folder +

Ако твоят cp не поддържа -t опция за посочване на целевата папка преди източниците или вашите find не поддържа -exec ... + ще трябва да го адаптирате.

Просто обяснете какво се случва тук, входа

test.txt
radish.avi
:

се интерполира в

find folders to search -type f ( -name test.txt -o -name radish.avi 
-o name : ) -exec cp -t folder +

0 за отговор № 3

Използвайте командата за намиране.

while read line
do
find /path/to/search/for -type f -name "$line" -exec cp -R {} /path/to/copy/to ;
done <plain_text_file_containing_file_names

Предположение:

Файловете в списъка имат стандартни имена без, да речем нови линии или специални знаци в тях.

Забележка:

Ако файловете в списъка имат нестандартни имена на файлове, tt ще бъде различна топка. За повече информация вижте намерете страница и търсете -print0, Накратко, трябва да работите с нулеви прекъснати низове след това.