2014-02-10 94 views
0

我需要一個函數來前綴的文件名以 'nfcapd'前置符號鏈接的文件名

原始文件集:

/root/netflow3/nfcapd.201402090310 -> /a/b/nfcapd.201402090310 
/root/netflow3/nfcapd.201402050400 -> /a/b/nfcapd.201402050400 
/root/netflow3/nfcapd.201402100730 -> /a/b/nfcapd.201402100730 
/root/netflow3/1.nfcapd.201402100730 -> /a/e/nfcapd.201402100730 
/root/netflow3/2.nfcapd.201402100730 -> /a/f/nfcapd.201402100730 

前綴= 「foo_」:

/root/netflow3/foo_nfcapd.201402090310 -> /a/b/nfcapd.201402090310 
/root/netflow3/foo_nfcapd.201402050400 -> /a/b/nfcapd.201402050400 
/root/netflow3/foo_nfcapd.201402100730 -> /a/b/nfcapd.201402100730 
/root/netflow3/1.nfcapd.201402100730 -> /a/e/nfcapd.201402100730 
/root/netflow3/2.nfcapd.201402100730 -> /a/f/nfcapd.201402100730 

我來了具有可以爲任何符號鏈接添加前綴的功能:

readonly PATH_CURRENT_SCRIPT="$(dirname $0)" 

sym_rename() { 
     local PATH_SOURCE_FILES=$1 
     local prefix=$2 

     [[ ! -d $PATH_SOURCE_FILES ]] && echo "path $dir not found! Exiting...." && exit 1 

     cd $PATH_SOURCE_FILES 
     for f in * ; do mv "$f" "${prefix}_$f" ; done 
     cd $PATH_CURRENT_SCRIPT 
} 

唯一的問題是,它的前綴一切:

前綴=「foo_」:

/root/netflow3/foo_nfcapd.201402090310 -> /a/b/nfcapd.201402090310 
/root/netflow3/foo_nfcapd.201402050400 -> /a/b/nfcapd.201402050400 
/root/netflow3/foo_nfcapd.201402100730 -> /a/b/nfcapd.201402100730 
/root/netflow3/foo_1.nfcapd.201402100730 -> /a/e/nfcapd.201402100730 
/root/netflow3/foo_2.nfcapd.201402100730 -> /a/f/nfcapd.201402100730 

如何修改的功能,以「nfcapd」開始只是前綴符號鏈接的文件名?

+0

請注意,您的代碼將前綴* *的任何文件,而不僅僅是符號鏈接。您可能要考慮在重命名之前使用'-h'測試每個文件。 '[[-h $ f]] && mv「$ f」「$ {prefix} _ $ f」'。 – chepner

回答

2

只要改變你的水珠來匹配你想要什麼:

cd $PATH_SOURCE_FILES 
    shopt -s nullglob 
    for f in nfcapd* ; do mv "$f" "${prefix}_$f" ; done 
    shopt -u nullglob 
    cd $PATH_CURRENT_SCRIPT 
+0

或者更具體地說,該文件是帶'-h'的符號鏈接。 – chepner

+0

@chepner Woops,沒有一直讀到這個問題。作爲'chepner',提到的絕對應該測試'[[-h $ f]] && mv ...',如果你想避免問題,可能會引用你的變量。 – BroSlow

+0

@Markku沒有用。我得到一個錯誤,「mv:can not stat'nfcapd *':沒有這樣的文件或目錄」 – brakertech