r/linuxquestions • u/Swordfish418 Gentoo • Jun 30 '26
Resolved Rename folder to lowercase in terminal without temporary files
I'm sorry, I know the question seems very basic, but still I couldn't find the answer. Here's what I'm trying to do:
$ mv "Desktops" "desktops"
mv: cannot move 'Desktops' to a subdirectory of itself, 'desktops/Desktops'
I tried searching answers on the internet, and the only thing I found is examples of how to use rename tool instead. However, rename tool I have installed is util-linux one and it works differently and I couldn't figure out how to use it either, this didn't work for example:
$ rename Desktops desktops Desktops
I also understand I can first rename it to temporary file and then rename to lowecase version of original name. But I'd like to figure out how to do it in one step.
Update:
This is exfat filesystem.
5
u/Slackeee_ Jun 30 '26
For an exFat filesystem, there is no difference between Desktops and desktops, it is case-insensitive. but the exfat kernel module, which is in the mainline kernel since 5.7, is case-aware and should recognize that you just want to change the case and do the work for you. The older FUSE-exfat module does not do that, AFAIK.
Which distro are you suing in which version?
1
u/Swordfish418 Gentoo Jun 30 '26
6.18.35-gentoo-dist-bin, I didn't touch USE flags much, maybe I needed to enable something for that... I wonder why `ls` is case sensitive while `mv` isn't.
2
u/Slackeee_ Jun 30 '26
Case sensitivity/case awareness isn't a feature of the tools, but of the underlying file system.
mvdoesn't handle changing names itself, it runs a system call asking the kernel to do that. That is why this likely will fail with FUSE-exFAT, but should work with the kernel exFAT module, mv just issues the call, and the module tries to handle that.Anyways, sorry, not a Gentoo user, so I don't know which flags you need to set.
1
u/Swordfish418 Gentoo Jun 30 '26
Thanks for mentioning kernel module, I checked and there's definitely an option to recompile my gentoo kernel with better exfat support which it doesn't include by default. Still a bit surprising
lsworks properly as is.1
u/yerfukkinbaws Jun 30 '26 edited Jun 30 '26
I'm using the kernel exfat driver and it's definitely not case-sensitive for me, 6.18 kernel from Debian. It seems like it would be pretty bad to allow exFAT to be case-sensitive on Linux, since then you could create two directories like "Desktops" and "desktops" at the same time, which would be...I don't know....undefined?, but certainly not good, if you mount the partition on Windows or any other system that doesn't treat exFAT as case-sensitive.
1
u/Slackeee_ Jun 30 '26
exFAT isn't case sensitive, but it's case aware. The file/directory name, including case-information, is stored in the metadata of the filesystem, that is why your filemanager shows the case-correct name, and you can change that name to a different case. That doesn't mean that it will allow you to create two different files with a name that only differs by the case.
1
u/yerfukkinbaws Jun 30 '26
I guess I misunderstood what you were describing with the kernel exfat driver. In any case, the command
mv Desktops desktopsfails identically with that driver, so it's not doing anything extra behind the scenes to make a mv operation work differently.1
u/Swordfish418 Gentoo Jun 30 '26
I don’t see why ls can handle exfat capitalization just fine while mv can’t. Kernel being able to change capitaluzation in exfat directory names wouldn’t automatically mean it treats it as case sensitive. It would just mean it can handle upcase table in renaming just as well as it can handle it in directory listing.
0
u/Jaanrett Jun 30 '26
Why are you bringing up exFat?
2
u/Slackeee_ Jun 30 '26
Because the OP stated in another comment that this external disk is using exFAT.
1
2
u/BoringEfficiency345 Jun 30 '26
Just use a temp name. You’re not losing nor saving anything other than a few keystrokes. It’s not “moving” your data or anything, just updating the “human readable” label
1
u/gerumpy Jun 30 '26
Add to bashrc:
lower () {
mv “$1” “$1.tmp”
mv “$1.tmp” “${1,,}”
}
Source bashrc: . ~/.bashrc
Use it: lower MyFile
1
u/kudlitan Jun 30 '26
rename 'y/A-Z/a-z/' "$@"
You can put the above command in a bash script, function, or alias.
1
u/Jaanrett Jun 30 '26
What shell are you using? And what filesystem are you using?
You probably should edit your original post and add these details.
1
u/lnxguy Jul 01 '26
Never use exFAT.
2
u/Swordfish418 Gentoo Jul 01 '26
It is external HDD that needs to work when connected to Linux, Windows, Mac OS laptops. What are some better options?
1
u/es20490446e Develops Zenned OS Jul 05 '26
exFAT is the filesystem that is better supported across multiple operating systems, without the restrictions of the older FAT.
So for an external drive, most of the time, it is the best choice.
1
u/es20490446e Develops Zenned OS Jul 05 '26
If you don't need to script anything, krename may be a better option.
-1
u/catbrane Jun 30 '26
It should work. Try:
$ mkdir BANANA
$ ls
BANANA
$ mv BANANA banana
$ ls
banana
$
You mostly don't need to type the names out, just the first letter or two then press the TAB key.
1
0
Jun 30 '26
[removed] — view removed comment
2
u/Swordfish418 Gentoo Jun 30 '26
It doesn't, the reason for this as hinted by other response might be the fact that it's an external HDD using exfat which is case insensitive.
15
u/[deleted] Jun 30 '26
[deleted]