簡體   English   中英

使用隱藏文件和名稱中帶有空格的文件\\文件夾

[英]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.

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