设置当前目录文件名为小写

设置当前目录文件名为小写

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系统中是找不到的。

于是将文件名改为全小写,并且设置了读取时路径为全小写。

相关推荐
那小子、真烦10 小时前
配置阿里云 YUM 源指南
linux·运维
管家婆客服中心11 小时前
管家婆分销ERP A/V系列导出提示加载数据过大的处理方式
linux·服务器·apache
久绊A12 小时前
指定端口-SSH连接的目标(告别 22 端口暴力破解)
linux·网络·ssh
bantinghy16 小时前
Linux系统TCP/IP网络参数优化
linux·网络·tcp/ip
星期天要睡觉16 小时前
Linux 综合练习
linux·运维·服务器
saynaihe17 小时前
proxmox8升级到proxmox9
linux·运维·服务器
Orchestrator_me17 小时前
CentOS交换区处理
linux·运维·centos
zru_960217 小时前
centos 系统如何安装open jdk 8
java·linux·centos
FLS16817 小时前
VMwaer虚拟机安装完Centos后无法联网问题
linux·运维·centos
OctopusMonster17 小时前
centos下gdb调试python的core文件
linux·运维·centos