[英]Working with hidden files and files\folders that have spaces in the name
我制作了一個腳本,該腳本可以獲取當前目錄中的所有文件,並檢查它是常規文件還是文件夾,並為其設置權限。
我的問題是遇到名稱中包含空格的隱藏文件\\文件夾和文件\\文件夾時。
這是我的腳本:
#!/bin/bash
FILES=$(pwd)/*
for f in $FILES
do
if [ -f $f ]; then chmod u+x $f; fi
if [ -d $f ]; then chmod u=w,g+r,o-rwx $f; fi
done
這是我從測試計算機得到的錯誤的示例:
'test / .bwhajtbzmu xswxcgqsvz'具有錯誤的權限:預期為250,得到414。
其他錯誤基本相同。
我實際上不確定這是什么問題,如果它是隱藏文件或名稱中有空格的事實。 我想這都是問題。
如何修改腳本,使其可以與隱藏文件和名稱中帶有空格的文件一起使用?
謝謝
PS。 請不要懷疑腳本的用途,這是學校的功課。
處理文件名中的空格非常棘手。 第一條規則是:圍繞變量的所有用法雙引號。 否則,外殼程序會將空格解釋為分隔符。 不幸的是,您不能簡單地將列表保存在變量中。 您必須為此使用數組變量。
#!/bin/bash
FILES=( "$(pwd)"/* )
for f in "${FILES[@]}"
do
if [ -f "$f" ]; then chmod u+x "$f"; fi
if [ -d "$f" ]; then chmod u=w,g+r,o-rwx "$f"; fi
done
為了處理隱藏的文件和文件夾(那些以點開頭.
),你應該設置最佳shell選項dotglob
這使得*
還匹配這些(這否則不會)。 (使用.*
不好,因為它還會匹配通常不想要的.
和..
,而像.??*
這樣的東西將不匹配通常想要的.a
東西。):
shopt -s dotglob
FILES=( "$(pwd)"/* )
shopt -u dotglob
我不建議保留它,因此在使用后將其關閉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.