Linux
如何查找特定副檔名的文件並將每個文件 tar 到另一個位置
我有用於查找特定類型文件並將它們壓縮到單個 tar 存檔並放入其他地方的腳本。但是現在,需求發生了變化,我需要找到某種類型的文件,將其列出並將它們中的每一個壓縮到一個 tar 存檔中,然後將其放到其他地方。目前我正在使用腳本
cd /to/top/of/dir/structure tar -cf /path/to/tarfile.tar --files-from /dev/null # trick to create empty tar file find . -type f ! -name '*.log' -print0 | xargs -0 tar -uvf /path/to/tarfile.tar
我從這篇文章中得到的:https ://superuser.com/questions/436441/copy-every-file-with-a-certain-extension-recursive
因此,上面的腳本找到某種文件類型,然後將其歸檔為單個 tar 文件,然後將其放置到另一個位置。但我的問題是,我需要找到某種類型的文件,列出它們,對列出的每個文件進行 tar,然後將它們放到其他位置。
我跟…
cd /to/top/of/dir/structure find . -type f ! -iname '*.log' -exec gzip -c {} \> /path/to/gzips/\`basename {}\`.gz \;
…但我還沒有測試過。
我真的很懷疑這會是你真正需要的……
編輯
我能弄到什麼程度…
find /path/to/top-level -iname "*.log" -printf "gzip -c %p > /path/to/gzips/%f.gz\n"
…輸出您想要執行的命令。
我仍在努力執行這些命令,缺少
-fprint
臨時文件,並chmod +x
執行*.*更不用說處理在文件名中轉義尷尬字元的任何問題。
編輯#2
好吧,我不能把它歸結為一行(這是我的挑戰,不是你的),但我可以把它寫成一個相當簡單的腳本:
#!/bin/bash function compress_file { BASENAME=`/bin/basename "$1"`; /bin/gzip -c "$1" > /path/to/gzips/$BASENAME.gz; } export -f compress_file; /bin/find /path/to/top-level -iname "*.log" -exec /bin/bash -c 'compress_file "$0"' {} \; export -fn compress_file;