Досега, когато искам да събирам файлове от списък, използвам списък, който съдържа пълен пътеки и използвайки:
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
, Накратко, трябва да работите с нулеви прекъснати низове след това.