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

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

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

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

相关推荐
A小辣椒2 天前
TShark:Wireshark CLI 功能
linux
A小辣椒2 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao3 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334663 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪3 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩4 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言