我有一个目录,其中包含名称包含大写字母的文件和文件夹。
我想知道是否可以使用bash
创建具有相同名称但小写的符号链接。
-rw-r--r-- 1 root root 570 Sep 22 00:00 AiA_SA_2014_08_10
-rw-r--r-- 1 root root 575 Sep 12 00:00 AiA_SA_Lite_2014_09_07
-rw-r--r-- 1 root root 570 Sep 22 00:00 AiA_SA_2014_08_10
到
-rw-r--r-- 1 root root 570 Sep 22 00:00 AiA_SA_2014_08_10
-rw-r--r-- 1 root root x Sep 22 00:00 aia_sa_2014_08_10-> AiA_SA_2014_08_10
-rw-r--r-- 1 root root 575 Sep 12 00:00 AiA_SA_Lite_2014_09_07
-rw-r--r-- 1 root root x Sep 12 00:00 aia_sa_lite_2014_09_07 -> AiA_SA_Lite_2014_09_07
-rw-r--r-- 1 root root 570 Sep 22 00:00 AiA_SA_2014_08_10
-rw-r--r-- 1 root root x Sep 22 00:00 aia_sa_2014_08_10 -> AiA_SA_2014_08_10
答案 0 :(得分:2)
是的,这是可能的。
使用简单的循环:
for i in *; do
[[ -f $i ]] || continue # in case of empty directory
lcname=${i,,} # Covert the name to lowercase
ln -s "$i" "$lcname"
done
如果您没有从当前目录运行,可以在for
循环中提供完整路径。
答案 1 :(得分:2)
在最近的版本中,您可以使用,,
参数扩展将字符串转换为小写:
shopt -s extglob
for file in *?([:upper:])* ; do
ln -s "$file" "${file,,}"
done
extglob模式只选择名称中带有大写字母的文件。
答案 2 :(得分:2)
declare -l lower
for upper in *; do lower="$upper"; ln -s "$upper" "$lower"; done
答案 3 :(得分:1)
parallel ln -s {} '{=$_=lc($_)=}' ::: *