2017-02-25 82 views
0

多年來,我一直在使用OS X歸檔應用程序,它將先前版本的文檔存儲在OS X捆綁軟件中。此應用程序與Sierra不兼容,但我不想丟失我的所有文件檔案。Bash腳本遍歷文件夾樹並從捆綁中提取文件

這裏的文件夾結構:

Dir1 
|--document_archive_1 <--has name of original document 
| --doc_version_1 <--has name in form: 20160301 180206 -0800 
| --doc_version_2 <--has name in form: 20151127 171422 -0800 
|--document_archive_2 
| --doc_version_1  
|subdir1 
| --document_archive_3 
| subsubdir 
etc. 

或者,換句話說,在樹中的每個文件夾包含包含歸檔的文檔版本(沒有別的),子文件夾和OS X捆綁的組合。該軟件包的文件名爲歸檔版本所在文檔的文件名。歸檔包中包含名稱爲日期戳的文件。

我想要做的是遍歷文件夾樹。當我遇到一個歸檔包,我想:

  1. 創建一個名稱的文件夾是歸檔束
  2. 移動存檔束入一步創建2
  3. 「鬆綁」的文件夾的名稱歸檔包
  4. 重命名「分割」的文件與歸檔包的名稱以及日期戳,剝離時區偏移

因此,例如...名爲「letter_to_dad Word文檔。 doc「一條弧線蜂巢包被命名爲「letter_to_dad.doc.synkarchive」和看起來像這樣:

|letter_to_dad.doc.synkarchive 
|--20160301 180206 -0800 <--this is a .doc file but has no extension 
|--20151127 171422 -0800 

我想直到結束是:

|folder called 'letter_to_dad' 
|--letter_to_dad 20160301 180206.doc 
|--letter_to_dad 20151127 171422.doc 

我只是做了一點點bash腳本寫作,我想要做的是超過我目前的頭,所以任何幫助將不勝感激。我在想,這應該不是那麼難,但我可能對此太天真了......

感謝您的任何幫助。

回答

0

AFAIK束只是文件夾,所以下面的腳本應該做的伎倆:

#!/usr/bin/env bash 

bundle_root=${HOME} 
out_root="/tmp" 

function copy_bundle { 
    bn="$(basename "$1")" 
    bn=${bn%%.*} 
    new_dir="${out_root}/${bn}" 
    mkdir "${new_dir}" 2>/dev/null 
    rsync -a "$1" "${new_dir}" 
    find . -type f | xargs -I% mv % "${new_dir}/${bn}_$(echo % | sed -Ee 's,[[:space:]]+,_,g' -e 's,_(-|[[:alnum:]])+$,,')" 
} 

export out_root 
export -f copy_bundle 

find "${bundle_root}" -iname "*.bundle" -type d -exec bash -c 'copy_bundle "{}"' \; 
+0

謝謝。問題...(1)股票OS X安裝沒有realpath命令。根據我在網上找到的內容,我用readlink e取而代之。我不確定它們是否真的相當。 (2)所有的mv命令導致「權限被拒絕」,雖然在檢查權限時,我是所有者。 mv命令也導致了奇怪的名字。例如。 mv:將./CAMNER.QDF.synkarchive/20120609 153635 -0700重命名爲/ CMIOUnits__:AND mv:rename ./CAMNER.QDF.synkarchive/20120609 153635 -0700 to/EDEL__:AND mv:rename ./CAMNER.QDF.synkarchive/20120609 153635 -0700到/ AppleIntermediateCodec__: – camner

+0

是的,重命名沒有正確實施。我編輯了腳本,現在應該沒問題。 – mshrbkv