2014-03-24 95 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。两者都很好。感谢所有的解释。我注意到它们。 –