Rename all the files within a folder with prefix “Unix_” i.e. suppose a folder has two files a.txt and b.pdf, then they both should be renamed from a single command to Unix_a.txt and Unix_b.pdf
相关问题
- Is shmid returned by shmget() unique across proces
- how to get running process information in java?
- Error building gcc 4.8.3 from source: libstdc++.so
- Why should we check WIFEXITED after wait in order
- Null-terminated string, opening file for reading
I recently faced this same situation and found an easier inbuilt solution. I am sharing it here so that it might help other people looking for solution.
With OS X Yosemite, Apple has integrated the batch renaming capabilities directly into Finder. Details information is available here. I have copied the steps below as well,
Rename multiple items
Select the items, then Control-click one of them.
In the shortcut menu, select Rename Items.
In the pop-up menu below Rename Folder Items, choose to replace text in the names, add text to the names, or change the name format.
Replace text: Enter the text you want to remove in the Find field, then enter the text you want to add in the “Replace with” field.
Add text: Enter the text to you want to add in the field, then choose to add the text before or after the current name.
Format: Choose a name format for the files, then choose to put the index, counter, or date before or after the name. Enter a name in the Custom Format field, then enter the number you want to start with.
Click Rename.
If you have a common pattern in your files than you can use Replace text otherwise Add text would also do the job.
You can just use
-i
instead of-I {}
This also works perfectly.
ls
- lists all the files in the directoryxargs
- accepts all files line by line due to the-i
option{}
is the placeholder for all files, necessary ifxargs
gets more than two arguments as inputUsing awk:
Try the
rename
command in the folder with the files:The argument of rename (sed s command) indicates to replace the regex ^ with Unix_. The caret (^) is a special character that means start of the line.
I think this is just what you'er looking for:
Yes, it is simple, elegant and powerful, and alos oneline-comand of courese. You can get more detailed intro from me on the page:Rename Files and Directories (Add Prefix)
Also works for items with spaces and ignores directories
Situation:
We have
certificate.key
certificate.crt
inside/user/ssl/
We want to rename anything that starts with
certificate
tocertificate_OLD
We are now located inside
/user
First, you do a dry run with
-n
:rename -n "s/certificate/certificate_old/" ./ssl/*
Which returns:
rename(./ssl/certificate.crt, ./ssl/certificate_OLD.crt) rename(./ssl/certificate.key, ./ssl/certificate_OLD.key)
Your files will be unchanged this is just a test run.
Solution:
When your happy with the result of the test run it for real:
rename "s/certificate/certificate_OLD/" ./ssl/*
What it means:
`rename "s/ SOMETHING / SOMETING_ELSE " PATH/FILES
Tip:
If you are already on the path run it like this:
rename "s/certificate/certificate_OLD/" *
Or if you want to do this in any sub-directory starting with
ss
do:rename -n "s/certificat/certificate_old/" ./ss*/*
You can also do:
rename -n "s/certi*/certificate_old/" ./ss*/*
Which renames anything starting with
certi
in any sub-directory starting withss
.The sky is the limit.
Play around with regex and ALWAYS test this BEFORE with
-n
.WATCH OUT THIS WILL EVEN RENAME FOLDER NAMES THAT MATCH. Better
cd
into the directory and do it there. USE AT OWN RISK.