我需要基于已知关键字在脚本中更改文件名。
例如,文件keywords.root.T127C
应重命名keywords_environment.root.T127C
。
我尝试使用此命令:
find . -name $keywords* | sed -e "p"
哪个输出:./current_directory/keywords.root.T127C
但我不知道将其分配给变量$var
。如果可以分配它,我知道如何使用以下命令对其进行修剪:
echo "${var##*.}".
我的问题:
(1)是否有一种有效的方法可以仅执行一个命令?说,直接将“ keywords.root.T127C”转换为“ keywords_environment.root.T127C”?
(2)如果对(1)否,则如何将“ ./current_directory/keywords.root.T127C”分配给变量?
谢谢!
这是一种最佳实践的实现(用于递归使用;用例可以使用glob而不是find
更简单的方法)-使用NUL分隔的文件名流,因此即使使用不寻常的名称(例如包含文字换行符的名称)也可以保证安全:
while IFS='' read -r -d '' filename; do
[[ $filename = *.* ]] \
&& mv -- "$filename" "${filename%%.*}_environment.${filename#*.}"
done < <(find . -name "${keyword}*" -print0)
另请参阅BashFAQ#30。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句