Sponsored Content
Top Forums Shell Programming and Scripting How best to remove certain characters from filenames and folders recursively Post 302641513 by otheus on Wednesday 16th of May 2012 07:41:28 AM
Old 05-16-2012
First, I'm pretty sure a / cannot be in a filename. Second, what would you replace the * and ? and " with?

I would approach that like this (GNU tools specific):
Code:
find /targetdir -type f -print0 | xargs -rl0 rename_bad_filename

where rename_bad_filename is a perl script that is executable and in your PATH...
Code:
#!/usr/bin/perl
$newf = $oldf=$ARGV[0];
# replace any non alpha-numeric characters, excluding / . and - with an underscore
$newf =~ s/[^a-zA-Z0-9.\/-]/_/g;
exit 0 if $newf eq $oldf;
print "Renaming \"$oldf\" to \"$newf\"...";
rename $oldf,$newf ;
print ($! ? "Error: $!\n" : "OK\n");

Note: no error checking; existing files are clobbered.

Example output:
Code:
$ rename_bad_filename  2l4kj2l^%.
Renaming "2l4kj2l^%." to "2l4kj2l__."...Error: No such file or directory
$ rename_bad_filename  2l4kj2l.
$ rename_bad_filename  2l4kj2l.\!
Renaming "2l4kj2l.!" to "2l4kj2l._"...Error: No such file or directory
$ rename_bad_filename  \[2-7\]-ldap-reordered
Renaming "[2-7]-ldap-reordered" to "_2-7_-ldap-reordered"...OK

 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

remove special characters from filename recursively

hi: i have several thousand files from users and of course they use all kind of characters on filenames. I have things like: My special report (1999 ) Lisa & Jack's work.doc crazy. How do I remove all this characters in the current dir and subdirs too? Thanks. (3 Replies)
Discussion started by: jason7
3 Replies

2. UNIX for Dummies Questions & Answers

delete recursively contents of folders

hi, I've a folder structure like : /home/project/LIBNAMEA/FILE1 /home/project/LIBNAMED/FILE2 /home/project/LIBNAMEC/FILE3 /home/project/LIBNAMED/FILE4 /home/project/LIBNAMEX/FILE5 (there is no relation in the letters after the project/ ) and i need to delete the files keeping... (5 Replies)
Discussion started by: jtmartins
5 Replies

3. Shell Programming and Scripting

RSYNC script to transfer folders recursively without overwriting via FTP

Hi all, I would need a bash script to sync/transfer folders recursively via FTP/RSYNC (I initially planned to use FTP but I heard RSYNC would fit a lot better for this job(?)) The situation: 3 different Linux servers 1. source 2. destination - Samba 3. Server where the script runs on ... (2 Replies)
Discussion started by: thibautp
2 Replies

4. Shell Programming and Scripting

Change all filenames under different folders...

Hi, all: I'd love to use shell script to change all filenames under different folders once for all: I've got over 100 folders, in each of them, there is a file named "a.ppm". I wanna change all these "a.ppm" to "b.ppm", and still . Visually, the directory structure looks like: and hope... (1 Reply)
Discussion started by: jiapei100
1 Replies

5. UNIX for Dummies Questions & Answers

find & remove characters in filenames

I have a group of files in different directories with characters such as " ? : in the file names. How do I find these files and remove these characters on mass? Thanks (19 Replies)
Discussion started by: barrydocks
19 Replies

6. Shell Programming and Scripting

HELP! Need to compare 2 folders on 2 different systems, and copy unmatched filenames to other folder

This has been tearing my hair out. I need to: 1: compare server1:/data/archive/ to server2:/data/archive/ (through rsync, ssh, etc) 2: filenames that don't match, get copied (scp) to server2:/data/ server1 and server2 have ssh, scp, rsync access between eachother. Is there any option in... (3 Replies)
Discussion started by: damang111
3 Replies

7. Shell Programming and Scripting

ftp script to copy folders recursively

hi all I want a script that will use ftp to copy folder and sub folders from source server to current server. if i use -r switch then it just copies folders for 5 level. (1 Reply)
Discussion started by: kashif.live
1 Replies

8. Shell Programming and Scripting

recursively going through folders and subdirectorys and running delete from crontab

Hio, So I have a crontab delete of older files setup. This script works fine if I run them by each individual directory. Problem is there are so many thousands of files and hundreds of directories and sub directories that I need to recursively have it go through and delete files by directory... (2 Replies)
Discussion started by: vsekvsek
2 Replies

9. Shell Programming and Scripting

Change filenames recursively

Hello, I made a mistake in a script and now need to go back and change allot of filenames. I need to change "v4" in filenames to "v3". I was thinking of something like this. #!/bin/bash FILELIST=$(ls -f -R *) for FILE in $FILELIST do # create new filename ... (5 Replies)
Discussion started by: LMHmedchem
5 Replies

10. Shell Programming and Scripting

Script to compare partial filenames in two folders and delete duplicates

Background: I use a TV tuner card to capture OTA video files (.mpeg) and then my Plex Media Server automatically optimizes the files (transcodes for better playback) and places them in a new directory. I have another Plex Library pointing to the new location for the optimized .mp4 files. This... (2 Replies)
Discussion started by: shaky
2 Replies
install(1)						      General Commands Manual							install(1)

NAME
install - Installs a command SYNOPSIS
install [-sS] [-c targetdir] [-g group] [-m mode] [-u owner] file [searchdir...] install [-osS] [-f targetdir] [-g group] [-m mode] [-u owner] file [searchdir...] install [-g group] [-iosS] [-m mode] [-n targetdir] [-u owner] file [searchdir...] install [-g group] [-MosS] [-m mode] [-u owner] file [searchdir...] The install command installs file in a specific place within a file system. It is most often used in makefiles. OPTIONS
Installs file in targetdir only if there is not already a copy there. If there is a copy of file in targetdir, the command issues a mes- sage to that effect and exits without overwriting the file. This option can be used alone or with the -g, -m, -s, -S, or -u options. Forces installation of file in targetdir even if a copy already exists there. If there is already a copy of file in targetdir, the command sets the new copy's mode and owner to those of the old copy. If there is not already a copy of file in targetdir, the command sets the mode to 755 and the owner to bin. This option can be used alone or with the -g, -m, -o, -s, -S, or -u options. Specifies a group other than bin for the destination file. Ignores the default directory search list. Searches for the file to be installed only in the directo- ries specified on the command line (searchdir ...). This option cannot be used with the -c, -f, or -M options. Moves file to targetdir instead of copying it. This option cannot be used with the -c, -f, -i, or -n options. Specifies a mode other than 755 for the destination file. Installs file in targetdir if there is no copy in any of the searched directories (searchdir ...). Sets the mode of the file to 755 and the owner to bin. This option cannot be used with the -c, -f, or -M options. Saves the old copy of file by renaming it OLDfile and leaving it in the directory where it was found. This option cannot be used with the -c option. Specifies an owner other than bin for the destination file. Suppresses the display of all but error messages. Causes the binary to be stripped after installation; see strip(1). DESCRIPTION
The install command copies (or moves) file into the appropriate directory, retaining the owner and permissions of the existing copy, if any. A newly created file has permission code 755, owner bin, and group bin. The install command writes a message telling you which files it is replacing or creating and where they are going. If you supply no options or search directories (searchdir ...), the install command searches the /bin, /usr/bin, /etc, /lib, and /usr/lib directories in that order for a file with the same name as file. The command overwrites the first matching file with file and issues a message indicating that it has done so. If no match is found, the command tells you and exits without taking further action. If any search directories (searchdir ...) are specified on the command line, the install command searches them before it searches the default directories. EXAMPLES
To replace a command that already exists in one of the default directories, enter: install fixit This replaces the file fixit if it is found in the /bin, /usr/bin, /etc, /lib, or /usr/lib directory. Otherwise, the file fixit is not installed. For example, if /usr/bin/fixit exists, then this file is replaced by a copy of the file fixit in the current direc- tory. To replace a command that already exists in a specified or default directory while preserving the old version, enter: install -o fixit /etc /usr/games This replaces the file fixit if it is found in the /etc or /usr/games directory, or in one of the default directories. Otherwise, the file fixit is not installed. If the file is replaced, the old version is preserved by renaming it OLDfixit in the directory in which it was found. To replace a command that already exists in a specified directory, enter: install -i fixit /u/judith/bin /u/bernice/bin /usr/games This replaces the file fixit if it is found in the /u/judith/bin, /u/bernice/bin, or /usr/games directory. Otherwise, the file is not installed. To replace a command found in a default directory, or install it in a specified directory if it is not found, enter: install -n /usr/bin fixit This replaces the file fixit if it is found in one of the default directories. If the file is not found, it is installed as /usr/bin/fixit. To install a new command, enter: install -c /usr/bin fixit This creates a new command by installing a copy of the fixit file as /usr/bin/fixit, but only if this file does not already exist. To install a command in a specified directory whether or not it already exists, enter: install -f /usr/bin -o -s fixit This forces the fixit file to be installed as /usr/bin/fixit whether or not /usr/bin/fixit already exists. The old version, if any, is preserved by renaming it to /usr/bin/OLDfixit (a result of the -o option). The messages that tell where the new command was installed are suppressed (a result of the -s option). SEE ALSO
Commands: chgrp(1), chmod(1), chown(1), cp(1), installbsd(1), make(1), mv(1), strip(1) install(1)
All times are GMT -4. The time now is 12:08 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy