Bash 用于在某些目录末尾添加点的脚本
假设我有一个Directoriy whis结构:Bash 用于在某些目录末尾添加点的脚本,bash,rename,Bash,Rename,假设我有一个Directoriy whis结构: Divulgation ├── Biology │ └── Dawkins, C Richard │ └── Books ├── Chemistry │ └── Gray, Theodore W │ └── Books └── Physics ├── Hawking, Stephen W │ └── Books └── Sagan, Carl E └── Books 我
Divulgation
├── Biology
│ └── Dawkins, C Richard
│ └── Books
├── Chemistry
│ └── Gray, Theodore W
│ └── Books
└── Physics
├── Hawking, Stephen W
│ └── Books
└── Sagan, Carl E
└── Books
我想在首字母的末尾加上点,像这样:
Divulgation
├── Biology
│ └── Dawkins, C. Richard
│ └── Books
├── Chemistry
│ └── Gray, Theodore W.
│ └── Books
└── Physics
├── Hawking, Stephen W.
│ └── Books
└── Sagan, Carl E.
└── Books
shopt -s extglob
shopt -s globstar
for d in @(Divulgation)/**/*./
do echo "mv \"$d\" \"${d%./}/\" "
mv "$d" "${d%./}/"
done
要删除它们,可以如下所示:
Divulgation
├── Biology
│ └── Dawkins, C. Richard
│ └── Books
├── Chemistry
│ └── Gray, Theodore W.
│ └── Books
└── Physics
├── Hawking, Stephen W.
│ └── Books
└── Sagan, Carl E.
└── Books
shopt -s extglob
shopt -s globstar
for d in @(Divulgation)/**/*./
do echo "mv \"$d\" \"${d%./}/\" "
mv "$d" "${d%./}/"
done
但是,再加上这些,我不知道。。你能给我一些建议吗?谢谢
BASH\u重赛
是你的朋友:
这里有一个解决方案,用于只有一个中间首字母的情况。如果要捕获所有这些内容,请在循环中重复此操作:
if [[ $d =~ (.*\ [A-Z])($|\ .*) ]]
then
new_name="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}"
fi
在regexp匹配之后,bash用regexp的捕获组填充数组bash\u REMATCH。第一组捕获所有内容,直到一个空格后跟一个大写字母,第二组捕获其余内容,并确保字母后面也有一个空格,或者是最后一个字母。换言之:确保它确实是一个孤立的字母。如果有多个首字母怎么办?它们之间有空格吗?(
White,TH
或White,TH
)好的观点,让我们假设。。嗯。。我也喜欢圆点。。但是当你在windows上打开硬盘时。。它以一个点结束。。嗯,无法打开该文件夹。。这个问题归咎于微软。。如果你有sed
,你可以这样做:dest=$(echo“$d”| sed”:a;s/\(.*)\([a-Z]\)/\1\2./;ta');mv“$d”“$dest”
。请注意,您应该从目的地移除传送带/
,否则您的mv
将失败(mv a b/
尝试将a
移动到b
内部,给出b/a
而不是b
)非西方单字母名称如何?(我想你还是可以加上点,也可以叫它缩写,哈哈)有单字母的名字吗?我不知道