设置当前目录文件名为小写
Windows
修改当前目录的下的文件夹(不包含下级)的名称为小写,然后在开头加1
php
Get-ChildItem -Directory | % { $o=$_.Name; $n="1"+$o.ToLower(); if ($o -ne $n) { try { Rename-Item $_.FullName -NewName $n -ErrorAction Stop } catch { $t="temp_"+[guid]::NewGuid().ToString("N").Substring(0,8); Rename-Item $_.FullName -NewName $t; Rename-Item (Join-Path $_.Parent.FullName $t) -NewName $n } } }
修改当前目录的下的文件夹(不包含下级)的名称为小写,然后在开头减1
php
Get-ChildItem -Directory | % { $o=$_.Name; $n=$o; if ($o.StartsWith("1")) { $n=$o.Substring(1) }; $n=$n.ToLower(); if ($o -ne $n) { try { Rename-Item $_.FullName -NewName $n -ErrorAction Stop } catch { $t="temp_"+[guid]::NewGuid().ToString("N").Substring(0,8); Rename-Item $_.FullName -NewName $t; Rename-Item (Join-Path $_.Parent.FullName $t) -NewName $n } } }
为什么要加减1?
因为在windows环境中,文件夹大小写不敏感
同一目录下的/file和/FilE是 相同 的目录
故直接修改文件夹为小写会导致系统认为已经是小写,不会进行修改。
linux
linux的文件夹区分大小写
同一目录下的/file和/FilE是 不同 的目录
安顺序执行以下三条命令,实现修改为小写文件夹名称
kotlin
小写
for dir in */; do dir=${dir%/} lower_dir=$(echo "$dir" | tr '[:upper:]' '[:lower:]') if [[ "$dir" != "$lower_dir" ]]; then if [[ -e "$lower_dir" ]]; then echo "冲突:$lower_dir 已存在,跳过 $dir" else mv -v "$dir" "$lower_dir" fi fi done
处理开头为-的,如-uA
find . -maxdepth 1 -type d ! -name '.' -print0 | while IFS= read -r -d '' dir; do # 获取纯目录名(去除前面的./) dir_name=${dir#./} # 转换为小写 lower_dir=$(echo "$dir_name" | tr '[:upper:]' '[:lower:]') # 如果名称有变化 if [[ "$dir_name" != "$lower_dir" ]]; then # 检查目标是否存在 if [[ -e "$lower_dir" ]]; then printf "冲突:'%s' 已存在,跳过 '%s'\n" "$lower_dir" "$dir_name" else mv -v -- "$dir_name" "$lower_dir" fi fi done
处理-ee类似命令的文件夹名
bash
for dir in */; do dir=${dir%/} lower_dir=$(echo "$dir" | tr '[:upper:]' '[:lower:]') if [[ "$dir" != "$lower_dir" ]]; then if [[ -e "$lower_dir" ]]; then echo "冲突:$lower_dir 已存在,跳过 $dir" else mv -v "./$dir" "./$lower_dir" # 添加 ./ 前缀 fi fi done
后记
是因为windows项目创建的文件。后面移动到linux系统上。
发现部分文件访问不了。
原因是windows服务器的文件夹保存逻辑为文件名的前3位,作为文件夹名称,保存到文件夹中。如:acbd.jpg保存到acb/abcd.jpg
之前的保存逻辑导致大小写不同的保存在了一起。如Acbd.jpg保存时,发现已经有acb文件夹,于是保存为acb/Acbd.jpg
于是我现在想要获取Acbd.jpg时,我找的路径是Acb/Acbd.jpg,在linux系统中是找不到的。
于是将文件名改为全小写,并且设置了读取时路径为全小写。