我想將它添加到Automator並讓用戶選擇它運行的目錄。一個雲端硬盤不會上傳包含空間的文件。我設法刪除所有空格,但不刪除從開始和結束的所有空間。Bash腳本刪除目錄中所有文件的前導和尾部空格
我的代碼:
for f in "$1"/*; do
dir=$(dirname "$f")
file=$(basename "$f")
mv "$f" "${dir}/${file//[^0-9A-Za-z.]}"
done
我想將它添加到Automator並讓用戶選擇它運行的目錄。一個雲端硬盤不會上傳包含空間的文件。我設法刪除所有空格,但不刪除從開始和結束的所有空間。Bash腳本刪除目錄中所有文件的前導和尾部空格
我的代碼:
for f in "$1"/*; do
dir=$(dirname "$f")
file=$(basename "$f")
mv "$f" "${dir}/${file//[^0-9A-Za-z.]}"
done
#!/usr/bin/env bash
shopt -s extglob # Enable extended globbing syntax
for path in "$1"/*; do
file=${path##*/} # Trim directory name
file=${file##+([[:space:]])} # Trim leading spaces
file=${file%%+([[:space:]])} # Trim trailing spaces
if [[ $file != "${path##*/}" ]]; then # Skip files that aren't changed
mv -- "$path" "$1/${file}"
fi
done
注:
bash
,不sh
,啓動以確保擴展名(如extglobbing和[[ ]]
)可供選擇。dirname
,因爲我們總是知道目錄名稱:它在$1
。extglob
語法擴展了常規glob表達式,使其具有與正則表達式相媲美的功能。 +([[:space:]])
是「一個或多個空格」的extglob,而${var%%pattern}
和${var##pattern}
分別從變量值的後面或前面刪除儘可能多的匹配pattern
的字符。mv
毫無意義,所以我們可以通過首先檢查來優化一點。如何在Automator中調用它,以便我的用戶可以選擇dir來運行它?我要求一個Finder物品。然後將其設置爲Var,運行一個shell腳本。 –
不能告訴你 - 我的專長領域是bash,而不是Automator。但是,如果您可以從Automator成功啓動原始腳本,則希望使用相同的機制來處理新腳本。 –
這是* extglob *擴展模式匹配*選項的亮點,如果沒有它,最終會出現'file =「$ {file#」$ {file %% [![:space:]] *}「}」 ''和'file =「$ {file ## * [![:space:]]}}}」'要完成同樣的事情(更加麻煩......) –
目前尚不清楚,但我認爲你是在談論文件*名稱*而不是文件*內容*。你可以簡單地使用'for'或'while'循環,或者用'-maxdepth 1'來查找''(除非你需要一個遞歸查找),並且由於你使用的是bash,你可以使用參數擴展去除前導並尾隨空白。 –