Shell-Script

僅更改文件的副檔名

  • January 24, 2017

我正在開發一個簡單的 shell 腳本來將文件更改one.PDFone.pdf. 我將此文件儲存在名為 Task1 的文件夾中。

我的腳本與 Task1 位於同一目錄中。當我執行它時呼叫Shell1.shTask1 變為 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

為了精確起見,只匹配以 結尾的文件.PDF

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

引用自:https://unix.stackexchange.com/questions/339697