Renaming files - error


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Renaming files - error
# 1  
Old 01-27-2019
Try something like:

Code:
for i in ~/Shell_Practice/rename/*.txt 
do  
  if [ -e "$i" ]; then
    mv -- "$i" "${i/file/newfile}"
  fi
done

or
Code:
shopt -s nullglob
for i in ~/Shell_Practice/rename/*.txt 
do  
  mv -- "$i" "${i/file/newfile}"
done


Last edited by Scrutinizer; 01-27-2019 at 05:59 AM..
These 2 Users Gave Thanks to Scrutinizer For This Post:
# 2  
Old 01-27-2019
You never answered the question of whether a file named filexfile.txt should be moved to newfilexfile.txt or to newfilexnewfile.txt. And, I'm disappointed that you didn't try to rewrite your code based on the comments I provided in post #2 in this thread. But, I did make (at least) one mistake in that post. If you run the command:
Code:
mv file1 file2

where file1 and file2 are the same and name an existing file or if file1 and file2 are different but both names are pathnames that refer to the same file (because they are linked together), the standards require that one of three things happen:
  1. the request is silently ignored,
  2. a diagnostic message is printed, no change is made to the file, and the final exit status of mv will be non-zero, or
  3. if the two operands are distinct (but name the same file), the file1 will be removed. (Note that if file2 is a symbolic link pointing to file1 and file1 is not a symbolic link, this may result in the loss of your data.)
Note that none of the suggestions that have been posted in this thread (including the two suggestions below) make any attempt to verify that the new pathname you want to use is not linked to the current pathname. The code below at least makes sure that when mv is invoked, the two operands won't be the same string. If there is a chance that the old and new names you are trying to create for a file could refer to the same file, I leave it to you to make adjustments to the code if any system on which you run your script has a mv utility that does not behave the way you want it to behave.

If you really don't want to use the shell's "${path/file/newfile}" variable expansion because it is not in the standards yet or because you really do want to be able to replace multiple occurrences of file with newfile if you run into a pathname containing multiple occurrences of that string, and you really want to use
Code:
awk

or
Code:
sed

to solve this problem; at least consider something like the following so you aren't invoking awk or sed and a shell for each pathname you process and so you don't invoke mv to move a file whose name won't change because it didn't contain the string file to begin with:
Code:
#!/bin/bash
set -vx

for path in ~/Shell_Practice/rename/*file*.txt 
do	[ -e "$path" ] && printf '%s\n' "$path"
done | awk '
{	old = $0
	gsub(/file/, "newfile")
	print "echo mv --", "\""old"\"", "\""$0"\""
}' | bash -xv

or (preferably):
Code:
#!/bin/bash
set -vx

for path in ~/Shell_Practice/rename/*file*.txt 
do	[ -e "$path" ] && printf '%s\n' "$path"
done | sed 'p; s/file/newfile/g' | while read -r oldpath && read -r newpath
do	echo mv -- "$oldpath" "$newpath"
done

If one of these prints the mv commands you want to invoke, remove the word echo from the script and run it again to actually rename the files.

Obviously, the awk script could also be rewritten to get rid of the second invocation of bash. I will leave doing that set of trivial changes as an exercise for the reader.
This User Gave Thanks to Don Cragun For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Renaming multiple files in sftp server in a get files script

Hi, In sftp script to get files, I have to rename all the files which I am picking. Rename command does not work here. Is there any way to do this? I am using #!/bin/ksh For eg: sftp user@host <<EOF cd /path get *.txt rename *.txt *.txt.done ... (7 Replies)
Discussion started by: jhilmil
7 Replies

2. Shell Programming and Scripting

renaming files

Hi, I have a list of files in a folder with the same name ending (over 1000 files) joe.jpy.jpeg joe1.jpy.jpeg joe2.jpy.jpeg jon3.jpy.jpeg jor5.jpy.jpeg .....jpy.jpeg etc. I want to change jpy to hhk So the output will be: joe.hhk.jpeg joe1.hhk.jpeg joe2.hhk.jpeg jon3.hhk.jpeg... (3 Replies)
Discussion started by: kylle345
3 Replies

3. UNIX for Dummies Questions & Answers

Renaming Files With 2 .

Dear All expertise.. just wanna ask if there is a way on how to change the filename as per below sample:- filename:- cob120514093156.03.466926330 CCBS-CPMM_SEND_COB_120514_100549_3.rpt to convert to:- cob120514093156.03.466926330.bd (rename from cob120514093156.03.466926330) ... (17 Replies)
Discussion started by: yokomo
17 Replies

4. Shell Programming and Scripting

renaming files or adding a name in the beginning of all files in a folder

Hi All I have a folder that contains hundreds of file with a names 3.msa 4.msa 21.msa 6.msa 345.msa 456.msa 98.msa ... ... ... I need rename each of this file by adding "core_" in the begiining of each file such as core_3.msa core_4.msa core_21.msa (4 Replies)
Discussion started by: Lucky Ali
4 Replies

5. Shell Programming and Scripting

renaming files

Hello, I wanted to rename one file where filename contains space.. How can i rename in unix? The file name is ABC XYZ.TXT I wanted to rename this file as ABCXYZ.TXT. Any help is greatly appreciated... Regards. (4 Replies)
Discussion started by: govindts
4 Replies

6. UNIX for Dummies Questions & Answers

Need help renaming files

I just can't figure this one out. I have a lot of files name (for example) ABC1234.5678.ext I need to rename these files U0105678PQRS So I'm removing everything before the first "." I'm keeping "5678" in the file name Adding "U010" to the front of "5678" Dropping the ".ext" extension ... (5 Replies)
Discussion started by: bbbngowc
5 Replies

7. Shell Programming and Scripting

Getting error by renaming all the files in a folder

Hi All, I have a folder name as postscript folder and it contains the following postscript files. package1.ps package2.ps package3.ps when i am renaming all the ps files to xps files by using the following command mv /postscript/*.ps /postscript/*.xps Then i am getting the... (4 Replies)
Discussion started by: sunitachoudhury
4 Replies

8. Shell Programming and Scripting

Renaming Files

Hi Alll, I have a script that we use on the servers to change the name of files that have spaces in the name: #!/bin/tcsh set n = 0 foreach f ( * ) echo $f | grep " " if ( $? == 0 ) then mv "$f" `echo $f | sed -e "s/ /_/g"` @ n += 1 endif end echo $n changed I need to write a... (2 Replies)
Discussion started by: abch624
2 Replies

9. UNIX for Dummies Questions & Answers

renaming files

I have a list of files named ab_*.csv I would like to remane them all by removing the ab_ and have *.csv I did the following but I am surely missing something. /* wrong script */ for i in `ls -1 ab_*`; do mv ab_$i $i; done Thanks in advance. (1 Reply)
Discussion started by: jxh461
1 Replies

10. Shell Programming and Scripting

Renaming files

hi, I have the following files as below. reg_test_123232 reg_test_125654 reg_test_473843 How do I rename reg_test_123232 to abc_123232 and the rest of file by just keeping the numeric field ? Please advise :) (3 Replies)
Discussion started by: cedrichiu
3 Replies
Login or Register to Ask a Question