![](/img/trans.png)
[英]How can I fix this Bash function to start at a specified path and recursively list its subdirectories and the subdirectories of those etc
[英]Bash - How can I archive and compress files in subdirectories but only with a certain filename
我有一個目錄結構,看起來像:
main_directory/
directory1:
sub_directory1:
files:
myfile.txt
otherfile.txt
sub_directory2:
files:
myfile.txt
otherfile.txt
sub_directory3:
files:
myfile.txt
otherfile.txt
sub_directory4:
files:
myfile.txt
otherfile.txt
directory2:
sub_directory1:
files:
myfile.txt
otherfile.txt
sub_directory2:
files:
myfile.txt
otherfile.txt
sub_directory3:
files:
myfile.txt
otherfile.txt
sub_directory4:
files:
myfile.txt
otherfile.txt
我試圖找出(通過反復試驗,因為我不是Linux的專家)如何只在所有目錄中gzip myfile.txt
文件。 由於它們在不同的路徑中都具有相同的文件名(沒有辦法解決這個問題),我需要能夠將文件路徑保存在存檔中。 所以我想要創建的最終gzipped tar文件將包含以下內容:
mytar.tar.gz
main_directory/directory1/sub_directory1/files/myfile.txt
main_directory/directory1/sub_directory2/files/myfile.txt
main_directory/directory1/sub_directory3/files/myfile.txt
main_directory/directory1/sub_directory4/files/myfile.txt
main_directory/directory2/sub_directory1/files/myfile.txt
main_directory/directory3/sub_directory2/files/myfile.txt
main_directory/directory4/sub_directory3/files/myfile.txt
main_directory/directory5/sub_directory4/files/myfile.txt
有一個簡單的bash
方式來做到這一點? 我想我可以寫一個python
腳本來做它,但這似乎有點過分。
有人有建議嗎?
這克服了另一個答案中描述的這個問題。
find main_directory/ -name "myfile.txt" | tar -czvf mytar.tar.gz -T -
假設沒有太多文件,您可以執行以下操作:
cd main_directory/..
find main_directory -name "myfile.txt" | xargs tar zcf mytar.tar.gz
如果有大量文件,您可以將文件列表傳輸到文件/流中並將其傳遞給tar。
find main_directory -name "myfile.txt" -print0 | tar zcf myar.tar.gz --null -T -
這將打印出由-print0
分隔的文件名( -print0
to find
),並指示tar
從stdin
中正確解析該文件名; 使用空值可確保正確處理目錄中的任何特殊字符
使用足夠新的(4.0.0+我相信)版本的bash(以及許多其他shell),以下內容將起作用:
tar -czf mytar.tar.gz main_directory/**/myfile.txt
如果目錄結構確實是常規的,那么通配符
main_directory/*/*/files/myfile.txt
將匹配您想要的文件。 但是,如果有很多文件,您可能需要恢復find
/ xargs
以避免“參數列表太長”( ARG_MAX
)問題。
如果有一個名為myfile.txt
文件,你不想包含它們,因為它們的路徑與通配符不完全匹配,那么肯定有辦法將它們從find
排除; 或許這個額外的約束應該在問題中說明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.