![](/img/trans.png)
[英]How to rename file based on parent and child folder name in bash script
[英]Move contents of a child folder if parent has the same name with bash
進行tar提取操作時,有時內容會直接提取到父文件夾,這很糟糕,因為它們會變得無序。 例如:
tar -xzf foo1.tar.gz
提取物:
./file1
./file2
./file3
解決方案是為tar.gz創建一個特定的文件夾,例如:
tar -C foo -xzf foo1.tar.gz
提取物:
./foo1/file1
./foo1/file2
./foo1/file3
因此,如果要提取許多.tar.gz,我將這樣做:
find -name \*.tar.gz | xargs -n 1 basename -s .tar.gz | xargs -I {} tar -C {} -xzf {}.tar.gz
為了安全地提取它們,但最終我將得到如下結果:
./foo3/foo3/file1
./foo3/foo3/file2
./foo3/foo3/file3
對於那些需要使用bash的情況,是否有一種自動的方法可以使用bash刪除重復的子文件夾?
計算目錄中條目的數量(提示: dotglob
, (*)
和${#var[@]}
),如果單個目錄條目具有相同的名稱,則復制屬性並移動內容(請注意,在該目錄中也有相同的名稱),然后刪除現在為空的目錄。
這是一個可能的解決方案
要將文件從子目錄移動到頂層目錄:
find ! -name . -maxdepth 1 -type d | xargs -I {} sh -c "find {}/{} -maxdepth 1 | xargs -I [] echo \"mv [] {}\""
這行得通,因為如果子文件夾不存在,則find不會執行任何操作:
find foo4/foo4
find: 'foo4/foo4': No such file or directory
刪除重新配置的子目錄
find ! -name . -maxdepth 1 -type d | xargs -I {} find {}/{} -type d -maxdepth 1 | xargs rmdir
我認為它確實達到了預期的目的。 壞處:
它顯示了許多無害的錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.