Batch file renaming in linux and unix
I'm going to remove the suffix .gz from the gzip compressed file:
Method 1:
[root@test mysql] # touch test1 test2 test3
[root@test mysql] # gzip *
[root@test mysql] # ls
Test1.gz test2.gz test3.gz
[root@test mysql] # ls-l * .gz | xargs rename .gz ""
[root@test mysql] # ls-l * .gz
Ls: * .gz: there is no such file or directory
[root@test mysql] ls
Test1 test2 test3
This method in HP-unix will prompt xargs parameter rename is invalid, what to do, don't worry, please see the next method.
Method 2:
[root@test mysql] # touch test1 test2 test3
[root@test mysql] # gzip *
[root@test mysql] # ls
Test1.gz test2.gz test3.gz
[root@test mysql] # ls-l * .gz | awk'{oldname=$9;sub (/ .gz $/, "); print oldname,$9}'| xargs-N2 mv
[root@test mysql] # ls * .gz
Ls: * .gz: there is no such file or directory
[root@test mysql] # ls
Test1 test2 test3 note: the argument-N2 passed to xargs here is the key, instructing xargs to take two Field from the standard input at a time and pass it to the command to be executed as a parameter. Otherwise, it will be fetched from the standard input until the command line just does not exceed the LINE_MAX. Ok, the second method solves the problem of batch file renaming in hp-unix