Go Premium for a chance to win a PS4. Enter to Win

  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 986
  • Last Modified:

deleting files with bad characters from mounted Windows drives

I have a script that mounts to a Windows drive, and is supposed to delete an entire subdirectory from the Windows drive.  I have rights to the files on the drive.  Here is my script:


cd /root/tcm
rm -f beijingtcm.tar.gz
rm -rf BeijingTCM
mkdir BeijingTCM

# Unmount and remove remote directories
cd /
umount mnt/beijingtcm
cd /root
rm -rf /mnt/beijingtcm

# Make remote directory
mkdir /mnt/beijingtcm

# Mount to Windows shared drive
mount -t smbfs -o username=xxxxxxx,password=xxxxxxx,workgroup=AD //ausnt-018.ad.cirrus.com/tcm /mnt/beijingtcm

#rm -rf /mnt/beijingtcm/BeijingTCM/
mv /mnt/beijingtcm/BeijingTCM/* /root/tcm/BeijingTCM/
rm -rf /mnt/beijingtcm/BeijingTCM/
mkdir /mnt/beijingtcm/BeijingTCM/

cd /root/tcm
sh ./getfile

cd /mnt/beijingtcm/BeijingTCM/
tar -xvzf BeijingTCM.tar.gz
rm -f BeijingTCM.tar.gz

cd /root/tcm
rm -rf BeijingTCM

The problem I'm having is when it gets to the mv /mnt/beijingtcm/BeijingTCM/* statement.  It tries to move the subdirectories and their files to a temporary directory on my Linux server for deletion later, but it has trouble trying to move or delete some of the files, because they have weird characters in the filename.  Some of the errors include the following:

mv: reading `/mnt/beijingtcm/BeijingTCM/Orion/\250\215\253Y\372\253E\253 \346\253 Orion.lnk': Invalid or incomplete multibyte or wide character

mv: reading `/mnt/beijingtcm/BeijingTCM/Sonata1_Playability/Resources/058 CDDA-DTS Retailed A\217\346A\024\226E\220.lck': Invalid or incomplete multibyte or wide character

Is there a way to force the script to either move or delete these kinds of files without giving this error?  If I can't move or delete them, I can't create the new directory for the incoming archive.  Thanks!
2 Solutions
Try to loop on list of files, and for each one put " " around the filename
texasreddogAuthor Commented:
so will something like this work?

mv "/mnt/beijingtcm/BeijingTCM/*" /root/tcm/BeijingTCM/

or if I just want to delete without moving, can I do this?

rm -rf "/mnt/beijingtcm/BeijingTCM/"
I don't think the GNU mv command cares much about multibyte character filenames.  I ran strings on my /bin/mv, and I couldn't find the error message mv is reporting.  That leads me to think the error message is coming from the kernel, or a kernel filesystem driver.  It could be that your destination filesystem is picky about disallowing filenames that don't meet its expectations for multibyte characters.

Also, the mv command is fast when moving files round inside a mount, but not very useful for moving files from one mount to another.  In the cross-mount case, "mv /device1/a /device2/b" is basically equivalent to running the two commands "cp /device1/a /device2/b ; rm /device1/a ".  Since you're running a rm -rf on the directory anyway, you could just use a cp command.  Using a cp -R will let you avoid the wildcard expansion too in case your shell is somehow creating the problem.

"cp -R /mnt/beijingtcm/BeijingTCM/ /root/tcm/BeijingTCM"
 can replace
"mv /mnt/beijingtcm/BeijingTCM/* /root/tcm/BeijingTCM/"

I haven't run this, so you might have a BeijingTCM/BeijingTCM directory in there.
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

texasreddogAuthor Commented:
I tried the cp -R command, and it copies the files, but it still won't let me delete the directory, which is what I really need to do.  This error in my first post appears to be a headache for other Linux users:


If anyone can find a good solution to this, please let me know.
Read this comment from that thread:

He fsck'ed the filesystem, and it turned out to have errors.  After fsck fixed them, the problems went away.

Since you're remote-mounting via samba, you might try running "chkdsk" on the windows machine in question.

Hi texasreddog,
It looks like Linux has problems handling "truncated" (real or imagined) multi-byte file (Unicode) names on your Windows drive. Check your Samba documentation on how to disable character translation.

In worst case, you need to correct those file names on the Windows side.

texasreddogAuthor Commented:
I agree.  That's the conclusion I came up with.  The files on the Windows side should be renamed to handle better in Linux.  And a chkdsk wouldn't hurt, either.  I'm going to split the points and close the question.

Featured Post

[Webinar] Cloud and Mobile-First Strategy

Maybe you’ve fully adopted the cloud since the beginning. Or maybe you started with on-prem resources but are pursuing a “cloud and mobile first” strategy. Getting to that end state has its challenges. Discover how to build out a 100% cloud and mobile IT strategy in this webinar.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now