Shell-Script
僅更改文件的副檔名
我正在開發一個簡單的 shell 腳本來將文件更改
one.PDF
為one.pdf
. 我將此文件儲存在名為 Task1 的文件夾中。我的腳本與 Task1 位於同一目錄中。當我執行它時呼叫
Shell1.sh
Task1 變為 Task1.pdf 但 one.PDF 中的文件沒有改變。我需要它的另一種方式,但我嘗試的任何方法似乎都沒有工作我一直在語法錯誤之間交替, mv 由於資源繁忙或只是重命名目錄而無法移動。誰能告訴我我做錯了什麼?
#!/bin/bash #shebang for bourne shell execution echo "Hello this is task 1" #Initial prompt used for testing to see if script ran #/rename .* .pdf *.pdf // doesnt work #loop to iterate through each file in current directory and rename for file in Task1; do mv "$file" "${file%.PDF}.pdf" done
使用 globbing 獲取文件名:
for file in Task1/*; do mv ...; done
為了精確起見,只匹配以 結尾的文件
for file in Task1/*.PDF; do mv ...; done
更準確地說,確保我們處理的是文件,而不是目錄:
for file in Task1/*.PDF; do [ -f "$file" ] && mv ...; done
作為旁注,您的參數擴展模式很好。
除了基本的 shell 命令外,在大多數 Lunux 發行版上,都有一個很好的工具
rename
可以在單個命令中完成重命名多個文件的工作:rename 's/PDF/pdf/' Task1/*
這是一篇關於它的好文章:Rename – A Command Line Tool For Renameing Multiple Files in Linux。