Shell-Script

如何更改目錄中所有文件的副檔名?

  • March 31, 2021

我正在使用 Linux,我想編寫一個 shell 腳本,它需要兩個目錄並將第二個目錄移動到第一個目錄中(因此第二個目錄成為第一個目錄的子目錄),並且第二個目錄中的所有文件都變為“.txt “ 擴大。例如:dir2包含:

file1
file2
dir3
file3.jmp

執行後./shell_scrip dir1 dir2,我想dir1包含並且 dir2看起來dir2像這樣:

file1.txt
file2.txt
dir3
file3.txt

我嘗試更改副檔名,但出現此錯誤:

mv: cannot stat `file1`: No such file or directory

使用以下程式碼:

#!/bin/sh
for file in $2/*;
do
f=$(basename "$file")
mv "$f" "${f}.txt"
done

您沒有移動或引用 dir2。嘗試這樣的事情:

#!/bin/sh
mv "$2" "$1"  ||  exit               # Make $2 a subdirectory of $1
cd "$1/$(basename "$2")"  ||  exit   # Change directories for simplicity
for f in *; do
   mv "$f" "${f%.*}.txt"            # Add or change the extension
done

如果命令失敗,在and命令|| exit之後添加將導致腳本退出,這樣可以提供一點保護,以防萬一事情不是您所期望的。mv``cd

表達式與名稱中沒有句${f%.*}點相同。$f否則,它將刪除句點(最後一個句點)及其之後的所有內容。

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