我有一個目錄,其中包含許多我想要備份的已編譯的 C 程式。現在它們已被命名,program.out
但我想將其更改為program
.
是否還可以排除這些?另外,我會使用什麼樣的正規表示式來快速重新命名它們?
答案1
若要備份程式碼,請使用 git 或其他版本控制軟體。在網路上,您有很多選擇:github、bitbucket。
在 git 中,如果你加入 *.out 文件,你會得到文件 .gitignore 那麼它不會被傳輸到儲存庫
答案2
你的第一個問題我不太清楚。如果您想重新命名program.out
為,program
則只需運行:
mv program{.out,}
/etc
對於第二個問題,假設我想取得帶有後綴的檔案清單:
#!/bin/bash
ls /etc > /tmp/etcfiles
while read line
do
if [[ $line =~ \..+ ]]; then
echo $line
fi
done < /tmp/etcfiles
您可以根據需要調整以上內容。
\.
匹配字面句號。.
匹配句點後面的任何字元。+
表示至少一個字元必須位於初始句點之後。所以這將匹配,但test.c
不匹配。test.
test.
+
*
答案3
如果您使用 bash 作為 shell,這對於 shell 管道來說是一個簡單的任務。
ls | grep '\.out$' | while read file; do echo mv "$file" "${file%.*}"; done
ls
產生目錄中的檔案列表。
grep '\.out$'
提取以 .out 結尾的檔案名稱並丟棄其餘部分。
while read file
一次讀取一個檔案名稱。
echo mv "$file" "${file%.*}"
顯示但不執行將每個檔案重新命名為不含副檔名的版本的 mv 命令。業務${file%.*}
是用於剝離檔案副檔名的 bash 語法。當您確信管道在實際運行時能夠滿足您的要求時,請刪除該echo
部分並讓它真正運作。
ls | grep '\.out$' | while read file; do mv "$file" "${file%.*}"; done