根据 Bash 中的模式重命名目录
Posted
技术标签:
【中文标题】根据 Bash 中的模式重命名目录【英文标题】:Renaming directories based on a pattern in Bash 【发布时间】:2017-06-30 11:39:24 【问题描述】:我有一个 Bash 脚本,可以很好地重命名符合条件的目录。
for name in *\[*\]\ -\ *; do
if [[ -d "$name" ]] && [[ ! -e "$name#* - " ]]; then
mv "$name" "$name#* - "
fi
done
目前如果目录看起来像:
user1 [files.sentfrom.com] - Directory-Subject
它重命名目录,并且只重命名目录
Directory-Subject (this could have different type of text)
如何将脚本/搜索条件更改为现在搜索
www.ibm.com - Directory-Subject
并将目录重命名,仅将目录重命名为
Directory-Subject
【问题讨论】:
【参考方案1】:一个简单的答案是将*\[*\]\ -\ *
更改为*\ -\ *
for name in *\ -\ *; do
if [[ -d "$name" ]] && [[ ! -e "$name#* - " ]]; then
mv "$name" "$name#* - "
fi
done
更多信息请阅读glob和wildcards
【讨论】:
【参考方案2】:您可以这样编写代码,以便涵盖这两种情况:
for dir in *\ -\ *; do
[[ -d "$dir" ]] || continue # skip if not a directory
sub="$dir#* - "
if [[ ! -e "$sub" ]]; then
mv "$dir" "$sub"
fi
done
在运行脚本之前:
$ ls -1d */
user1 [files.sentfrom.com] - Directory-Subject/
www.ibm.com - Directory-Subject
之后:
$ ls -1d */
Directory-Subject/
www.ibm.com - Directory-Subject/ # didn't move because directory existed already
【讨论】:
以上是关于根据 Bash 中的模式重命名目录的主要内容,如果未能解决你的问题,请参考以下文章