Shell-Script
如何更改目錄中所有文件的副檔名?
我正在使用 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
否則,它將刪除句點(最後一個句點)及其之後的所有內容。