簡體   English   中英

Bash腳本刪除目錄中所有文件的前導和尾隨空格

[英]Bash Script to remove leading and trailing spaces for all files in a directory

我只想將其添加到Automator中,然后讓用戶選擇運行它的目錄。 一驅動器將不會上傳具有空間的文件。 我設法刪除了所有空格,但沒有刪除開頭和結尾的所有空格。

我的代碼:

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

筆記:

  • Shell必須以bash而不是sh開頭,以確保擴展名(例如extglobbing和[[ ]] )可用。
  • 不需要調用dirname ,因為我們總是知道目錄名稱:它在$1
  • extglob語法擴展了常規glob表達式,使其具有與正則表達式相當的功能。 +([[:space:]])是extglob,表示“一個或多個空格”,而${var%%pattern}${var##pattern}從后面或前面刪除盡可能多的與pattern匹配的字符分別代表變量的值。
  • 當不需要更改文件名時,沒有必要運行mv ,因此我們可以通過首先檢查來進行一些優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM