2014-03-24 132 views
0

我試圖將字符串追加到文件名中,每次缺少該字符串。字符串丟失時將字符串追加到文件名

例子:

idbank.xls 
idbank.xls 
idbank.xls 

我正在尋找字符串

codegroup 

由於字符串不存在,我在它之前附加到文件名擴展名。 所需的輸出將是

idbankxxxcodeGroupea1111.xls 
idbankxxxcodeGroupea1111.xls 
idbankxxxcodeGroupea1111.xls 

我做了這個腳本(見下文),但它不能正常工作

for file in idbank*.xls; do 
if $(ls | grep -v 'codeGroupe' $file); then 
    printf '%s\n' "${f%.xls}codeGroupea1111.xls" 
fi; done 

grep的-v是檢查是否字符串在不在。我在另一個帖子上閱讀,你可以使用選項-q,但在檢查男子,它表示它是無聲的...

任何建議將有所幫助。

最佳

+0

所以要重命名基於此條件下這些文件? – fedorqui

+0

是的,Fedorqui。如果字符串「codeGroupe」不存在於文件名中。 –

+0

'-q'將輸出沉默,所以你可以簡單地說'if grep -q ...';然後',並讓'grep'的退出狀態控制'if'語句,而不必實際看到輸出。 – chepner

回答

1

這可以使:

for file in idbank*xls 
do 
    [[ $file != *codegroup* ]] && mv $file ${file%.*}codegroup.${file##*.} 
done 
  • for file是你已經在使用。
  • [[ $file != *codegroup* ]]檢查文件名是否包含codegroup
  • 如果不是,執行mv $file ${var%.*}codegroup.${var##*.}:它通過將文件移動到filename_without_extension + codgroup + extension(在Extract filename and extension in bash中進一步參考)來重命名該文件。

[[ $file != *codegroup* ]] && mv $file ${file%.*}codegroup.${file##*.} 

是一樣的:

if [[ $file != *codegroup* ]]; then 
    mv $file ${file%.*}codegroup.${file##*.} 
fi 
+0

「沒有擴展名的文件名」將是'「$ {file%。*}」'只有一個「%」 –

+0

您完全正確,謝謝@glennjackman讓我現在 – fedorqui

+0

謝謝Fedorqui。兩者都很好。感謝所有的解釋。我注意到它們。 –