1. 程式人生 > >處理檔名中的空格

處理檔名中的空格

方法一:
方法一有一個缺陷就是目前不能直接在shell指令碼中處理問題,只能在終端命令列才可以,因為shell讀入ls時用空格將各個檔名分開放入到陣列,而檔名中本身含空格時,shell讀入時會當做兩個元素,所以在指令碼中無法處理該問題

#將dir目錄下面的所有檔名中的空格替換為下劃線"_"
rename 's/ /_/g' dir/*

#將dir目錄下面的所有檔名中的空格去掉
rename 's/ //g' dir/*

方法二:
方法二稍微複雜一些,需要對shell與awk之間如何傳遞引數進行深入瞭解

#思路:用awk取得ls -l命令的各欄位,然後將檔名拼接起來
del_blank_in_filename
() { #系統ubuntu14.04 desk,執行ls -l命令,用空格將輸出分開之後總共9個欄位,大於九個欄位說明檔名中有空格,該程式只能處理檔名中含有一個空格的情況 ls -l $1 | awk -v cur_dir=$1 'NF>9 { print "mv "cur_dir"/"$9"\ "$10 " "cur_dir"/"$9$10}' | bash } #將當前目錄下檔名中所含的空格刪除 del_blank_in_filename $(pwd)

方法三:通用空格處理函式

#==============================================================
#引數1:要處理的目錄,目錄下含有帶空格的檔名 #引數2:用什麼字元來替換空格,像*之類對shell比較敏感的字元要加上反斜槓\* #============================================================== delete_names_blank() { ls -l | awk -v dir=$1 -v sp=$2 'NF>10 { i=10; src_file_name=$9; dst_file_name=$9; while(i<=NF){ dst_file_name=dst_file_name""
sp""$i; src_file_name=src_file_name"\ "$i; i++; } print "mv "dir"/"src_file_name" "dir"/"dst_file_name; }' | bash } #使用方法 delete_names_blank /home/dkos/test "\*"