texasreddog
asked on
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:
#!/bin/sh
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,wo rkgroup=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/BeijingTC M/Orion/\2 50\215\253 Y\372\253E \253 \346\253 Orion.lnk': Invalid or incomplete multibyte or wide character
mv: reading `/mnt/beijingtcm/BeijingTC M/Sonata1_ Playabilit y/Resource s/058 CDDA-DTS Retailed A\217\346A\024\226E\220.lc k': 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!
#!/bin/sh
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=
#rm -rf /mnt/beijingtcm/BeijingTCM
mv /mnt/beijingtcm/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
mv: reading `/mnt/beijingtcm/BeijingTC
mv: reading `/mnt/beijingtcm/BeijingTC
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!
Try to loop on list of files, and for each one put " " around the filename
ASKER
so will something like this work?
mv "/mnt/beijingtcm/BeijingTC M/*" /root/tcm/BeijingTCM/
or if I just want to delete without moving, can I do this?
rm -rf "/mnt/beijingtcm/BeijingTC M/"
mv "/mnt/beijingtcm/BeijingTC
or if I just want to delete without moving, can I do this?
rm -rf "/mnt/beijingtcm/BeijingTC
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.
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
can replace
"mv /mnt/beijingtcm/BeijingTCM
I haven't run this, so you might have a BeijingTCM/BeijingTCM directory in there.
ASKER
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:
http://www.redhat.com/archives/fedora-list/2004-January/msg00973.html
If anyone can find a good solution to this, please let me know.
Thanks!
http://www.redhat.com/archives/fedora-list/2004-January/msg00973.html
If anyone can find a good solution to this, please let me know.
Thanks!
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
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.