有人可以創建一個短代碼,使用命令行選項-r來重命名子目錄中的文件擴展名嗎?使用大小寫和遞歸重命名文件擴展名
所以,如果我有一個名爲loc的文件夾中的文件a.txt。我輸入「change -r txt doc」,文件將成爲loc子目錄下的一個.doc文件(如loc/a.doc中)。
我需要將其添加到我的代碼。另外我之所以要使用case語句是因爲我將來會添加更多選項。
有人可以創建一個短代碼,使用命令行選項-r來重命名子目錄中的文件擴展名嗎?使用大小寫和遞歸重命名文件擴展名
所以,如果我有一個名爲loc的文件夾中的文件a.txt。我輸入「change -r txt doc」,文件將成爲loc子目錄下的一個.doc文件(如loc/a.doc中)。
我需要將其添加到我的代碼。另外我之所以要使用case語句是因爲我將來會添加更多選項。
如果我正確理解您的問題,您想要遞歸更改文件擴展名。
腳本change.sh
:
# recursive rename: ./change.sh -r -f txt -t doc
# current directory only: ./change.sh -f txt -t doc
find_depth="-maxdepth 1" # defaults to current directory
while getopts "rf:t:" Option
do
case $Option in
f) from=$OPTARG ;;
t) to=$OPTARG ;;
r) find_depth="" ;;
esac
done
shift $(($OPTIND - 1))
for file in $(find . $find_depth -name "*.$from")
do
mv $file "${file/.$from/.$to}"
done
編輯響應您的評論。
要得到推廣和使用case/esac
extension=${filename##*.}
case "$extension" in
"doc") ... ;;
"txt") ... ;;
esac
有趣。感謝kurumi。 – JonSmith 2011-04-01 01:00:45
您是否嘗試過?什麼沒有用?請提出具體問題。 – 2011-03-31 23:34:10
我只是不能這樣做。我看了一個案例陳述的例子,我不知道如何將其應用於此。我試圖將它添加到這一點:在* $ 爲newext TXT 做 出口NAME ='基名$ newext $ .txt'做 – JonSmith 2011-03-31 23:39:44
MV $ NAME $ .TXT $ NAME $ 2.doc 似乎不可思議想要將.txt重命名爲.doc。然後編寫一個自定義腳本來執行'find ... -exec mv「{}」...'無論如何,可能值得注意的是,某些發行版有一個很好的重命名命令,用Perl正則表達式:'rename's /\.txt$/.doc/'* .txt' – mivk 2011-11-24 23:44:05