опция не работает для моего вкуса xargs, поэтому я изменил ее на:


я есть текстовый файл с одним именем файла на строку:

Interpret 1 - Song 1.mp3
Interpret 2 - Song 2.mp3
...   

(Около 200 имен файлов)

Теперь я хочу рекурсивно искать папку по этим именам файлов, чтобы получить полный путь к каждому имени файла в Filenames.txt.
Как это сделать? :)

(Цель: скопировать файлы в мой MP3-плеер, но некоторые из них повреждены, и я хочу скопировать их все, не тратя часы на изучение их из моей музыкальной папки)

Ответы на вопрос(4)

find:

filecopy.sh

#!/bin/bash

while read line
do
        find . -iname "$line" -exec cp '{}' /where/to/put/your/files \;
done < list_of_files.txt

гдеlist_of_files.txt список файлов строка за строкой, и/where/to/put/your/files это место, куда вы хотите скопировать. Вы можете просто запустить его так в каталоге:

$ bash filecopy.sh
 Diego Sevilla30 мая 2011 г., 20:56
Я думаю, что первый "." Находка не должна быть там.
 onteria_30 мая 2011 г., 21:13
@Reini Это хорошо. Я склонен разбивать строки сценария на один, потому что люди, которые находят ответы, могут испытывать трудности, если все в одной строке. Хорошая / плохая привычка иногда иметь.
 Reini30 мая 2011 г., 21:06
тоже спасибо, но я предпочитаю решение «одна строка без лишних сценариев» от Диего Севильи
 onteria_30 мая 2011 г., 21:06
@ Диего Я всегда указываю путь, потому что некоторые версииfind не предполагайте, что отсутствие пути означает текущий каталогh30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/... , В случае с GNU find это все же для вас, так что нет, здесь это не требуется, просто привычка, которую я хотел бы сохранить.

и использовать fgrep.

find . -type f -print0 | fgrep -zFf ./file_with_filenames.txt | xargs -0 -J % cp % /path/to/destdir
 Mars Redwyne04 дек. 2014 г., 22:20
хотя мои xargs не понравились-J вариант. Для канала к xargs я использовал: xargs -0 -I {} cp "{}" / path / to / destdir foo foo

+1 за @ jm666 ответ, но-J опция не работает для моего вкуса xargs, поэтому я изменил ее на:

find ../file_with_filenames.txt | xargs -0 -I{} cp "{}" /path/to/destdir/
Решение Вопроса

cat orig_filenames.txt | while read file ; do find /dest/directory -name "$file" ; done > output_file_with_paths 
 Reini30 мая 2011 г., 21:06
похоже на работу, спасибо :)

Ваш ответ на вопрос