TransWikia.com

How to recursively rename a directory tree to valid Windows filenames?

Super User Asked by hedgie on December 28, 2020

I am trying to copy a number of directories containing MS-DOS games from a Linux to a Windows computer. However, I am getting a [WinError 267] The directory name is invalid.

Here is a listing of a few of these directories:

$ ls -d *:* | sort -R | head
Commander Keen 2: The Earth Explodes/
1942: The Pacific Air War/
Super Solvers: Treasure Galaxy/
Life and Death 2: The Brain/
Deja Vu 2: Lost In Las Vegas/
Hard Drivin' 2: Drive Harder/
RoboMaze 2: The Lobby/
Dune 2: The Building of a Dynasty/
Blake Stone: Planet Strike/
Star Trek: First Contact/

I suspect the : in these directory names are causing this error, because they are invalid characters in Windows filenames.

However, since I cannot guarantee that the : is the only invalid character used, I am looking for a way to recursively rename all files and directories to valid Windows filenames, substituting the invalid characters for valid ones.

What Linux command lets me do this?

One Answer

I recommend the rename command. Install via:

sudo apt install rename

rename uses Perl to make powerful replace commands, but in this case a simple regex replace will do - something like:

rename 's/[<>:"\|?*]/-/g;' *

The above will replace the characters inside the square brackets with the minus sign. The g means replace all of them, not just the first occurrence. If you want something more complex, you could replace some characters with minus and some with underscores, e.g.: rename 's/[<>:]/-/g; s/["\|?*]/_/g;' *

The above will only fix files and directories in the current directory. To recursively fix subdirectories and files too, use find:

find -execdir rename 's/[<>:"\|?*]/-/g;' '{}' +

In the above example, find will run rename for every item in or under the current directory.

Correct answer by bitinerant on December 28, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP