2016-05-12 103 views
0

文件夾和子文件夾直到現在,當我想我一直在使用一個包含完整路徑列表,並使用從列表中收集的文件:的bash shell:遞歸搜索從列表

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

不過,我想就像能夠遞歸搜索文件夾和它的子文件夾並複製純文本列表中的文件名(不是完整路徑)中的所有文件一樣。

我該怎麼做呢?

謝謝!

+0

使用find命令。 – 123

+0

你想從哪裏找到文件夾?當前目錄以及將文件複製到哪裏?提供示例 – Inian

回答

0

試着這麼做

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

您似乎在xargs cp中存在問題,複製/粘貼錯誤? – tripleee

+0

完美!我很感謝每個人的幫助,而且對其他人沒有冒犯性,但是邁克爾的回答立刻對我最有意義......並且更重要的是馬上工作了。 –

+0

舉起來是有問題的。我需要它只抓取完全匹配的文件,如果不跳過它們。現在,如果我在列表中有一個名爲123456.tif的文件,並且該文件夾中沒有匹配的文件,它就會抓取23456.tif。我怎樣才能解決這個問題? –

0

使用find命令。

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將是不同的球賽。欲瞭解更多信息,請參閱find manpage並尋找-print0。總之,你應該使用空字符串來操作。

1

假設您的文件名列表包含裸文件名,因爲它適合作爲參數傳遞給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

尼斯:D。這也會處理一個名爲'-name'的文件。 – sjsam

+0

該解決方案對我無效,因爲我得到了拒絕權限的錯誤。 -exec我猜? –

+0

聽起來更像'cp'無法訪問您找到的一個或多個文件。很難說沒有確切的錯誤信息。在'cp'之前用'echo'嘗試。 – tripleee