天天看點

Linux中批量把檔案名大小寫轉換

Linux中批量把檔案名大小寫轉換

一哥們從現場打來急電說現在有一個目錄,

目錄下有上千個檔案,現在需要把檔案名由小寫全部轉化為大寫。

首先不能寫腳本,那樣的話還要教他用vi,  改權限,隻能用指令了。

字元轉換嘛,當然想到的是 tr :

for file in * ;

do mv  $file `echo $file |  tr 'a-z' 'A-Z'`;

done

過了一會兒這哥們又打電話說,擴充名不要改為大寫的,保留為小寫就行了。

這樣明顯分段的事情當然要交給 awk 了:

for file in *;

do mv $file `echo $file | awk -F . '{print toupper($1)"."$2}' `;

done

這樣是可以把類似 a.txt 的檔案修改了,但有多個擴充名的就沒招了,比如 b.tar.gz,

還好 awk 支援變量:

for file in *;

do mv $file `echo $file |

awk -F . ' {

                       for (i = 1; i <= NF;i++)

                                  if (i == 1) 

                                        result = toupper($i);

                                 else

                                       result += "."$i;

                         print $result;

               }' `;

done

但結果是錯的,一個檔案名也沒有改變,

查了下說gawk才支援toupper, tolower,

換成gawk 還是不對。

最後沒辦法隻好找個折衷的方法,先全部轉化為大寫,然後再将擴充名轉回小寫:

for file in *;

do mv $file `echo $file |

         sed -e s/\.TXT/\.txt/g  `;

done

但是\.并沒有被轉義成., 而依然是代表任意字元,

這樣的話如果basename中含有擴充名就悲劇了。

試了幾下發現這樣才是轉義的:

             sed -e s/[.]TXT/.txt/g  `;

ok.

一定還有更友善的方法,

如果你遇到過請不吝賜教,謝謝!

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script> 閱讀(1236) | 評論(7) | 轉發(6) | 0

上一篇:oracle dblink應用

下一篇:正規表達式簡述

Linux中批量把檔案名大小寫轉換

personball2012-12-27 15:45:14

lgfang: 貌似我的rename在此不适用。你的rename腫木實作樓主的需求?

NAME

       rename - rename files

SYNOPSIS

       rename [options] expression replacement..... To translate uppercase names to lower, you'd use

               rename 'y/A-Z/a-z/' *

回複 | 舉報

Linux中批量把檔案名大小寫轉換

personball2012-12-27 15:44:09

lgfang: 貌似我的rename在此不适用。你的rename腫木實作樓主的需求?

NAME

       rename - rename files

SYNOPSIS

       rename [options] expression replacement..... 看了下,ubuntu下的rename是perl腳本。。。

man 之後有一段

把所有檔案名内含有大小字母的,修改為小寫字母。

rename      'y/A-Z/a-z/'      *

回複 | 舉報

Linux中批量把檔案名大小寫轉換

lgfang2012-12-25 10:08:39

personball: rename 淚目..... 貌似我的rename在此不适用。你的rename腫木實作樓主的需求?

NAME

       rename - rename files

SYNOPSIS

       rename [options] expression replacement file...

DESCRIPTION

       rename will rename the specified files by replacing the first occurrence of expression in their name by replacement.

回複 | 舉報

Linux中批量把檔案名大小寫轉換

ran3guns2012-10-09 12:49:41

lgfang: 如果用的是bash:

for each in *; do name=${each%%.*}; ext=${each#*.}; echo $each ${name^^}.$ext; done

或者

for each in *; do name=${each%%.*}; ext=$..... 贊

回複 | 舉報

Linux中批量把檔案名大小寫轉換

personball2012-10-09 10:12:29

手頭上麼linux,給個線上的man手冊參考吧:http://man.he.net/?topic=rename&section=all

回複 | 舉報

  • 首頁
  • 上一頁
  • 1
  • 2
  • 下一頁
  • 末頁

評論熱議