我經常需要對目錄中的所有文件(包括隱藏文件)執行命令。當我嘗試使用如何在bash中使用。*通配符但排除父目錄(..)?
chmod g+w * .*
它改變父目錄上的所有我想要的文件的權限(目錄)和所有的文件(我想單獨留在家中)。
是否有一個通配符可以做正確的事情,還是我需要開始使用find?
我經常需要對目錄中的所有文件(包括隱藏文件)執行命令。當我嘗試使用如何在bash中使用。*通配符但排除父目錄(..)?
chmod g+w * .*
它改變父目錄上的所有我想要的文件的權限(目錄)和所有的文件(我想單獨留在家中)。
是否有一個通配符可以做正確的事情,還是我需要開始使用find?
您將需要兩個全局模式來覆蓋所有潛在的「點文件」:.[^.]*
和..?*
。
第一個匹配所有具有兩個或更多字符的目錄條目,其中第一個字符是點,第二個字符不是點。第二個選項包含三個或更多以..
開頭的字符(這不包括..
,因爲它只有兩個字符並以.
開頭,但包含(不太可能)如..foo
)。
chmod g+w .[^.]* ..?*
這應該適用於大多數所有shell並適用於腳本。
對於常規的交互式使用,模式可能太難記了。對於這些情況,您的shell可能有一個更方便的方法來跳過.
和..
。 zsh總是從.*
等圖案中排除.
和..
。 With bash,您必須使用GLOBIGNORE shell變量。
# bash
GLOBIGNORE=.:..
echo .*
你可能會考慮在的bash自定義文件(例如.bash_profile
/.bash_login
或.bashrc
)的一個設置GLOBIGNORE。 但是,請注意,如果您經常使用其他環境,則習慣於此定製。 如果在缺少自定義的環境中運行類似chmod g+w .*
的命令,則會意外地在命令中包含.
和..
。
此外,您可以將shell配置爲在不以明確點開頭的模式中包含「點文件」(例如*
)。
# zsh
setopt glob_dots
# bash
shopt -s dotglob
# show all files, even 「dot files」
echo *
通常我只想用. .[a-zA-Z0-9]*
因爲我的文件名往往會遵循一定的規則,但不會趕上所有可能的情況。
您可以使用:
chmod g+w $(ls -1a | grep -v '^..$')
這將基本上列出所有的文件和目錄,去掉父目錄,然後處理其餘部分。注意文件名中的空格,但會將它們視爲單獨的文件。
當然,如果你只想做文件,你可以使用:
find . -maxdepth 0 -type f -exec chmod g+w {} ';'
,或者另一種解決方案,它應該做的所有文件和目錄,除了..
一個:
for i in * .* ; do if [[ ${i} != ".." ]] ; then chmod g+w "$i"; fi done
但現在您正在進入可能需要腳本或別名的領域。
只是刪除的grep -v「^ $」。因爲艾倫想要隱藏的文件,但不是父文件夾 – 2010-05-26 04:33:50
如何:
shopt -s dotglob
chmod g+w ./*
既然你可能不希望設置dotglob您的bash會話的其餘部分,你可以通過像這樣子進程運行設置了一組命令:
$ (shopt -s dotglob; chmod g+w ./*)
我做什麼
tar --directory my_directory --file my_directory.tar --create `ls -A mydirectory/`
工程就好了ls -A my_directory
擴展到目錄中除.
和..
以外的所有內容。沒有奇怪的球,並在一條線上。
ps:也許有人會告訴我爲什麼這不是一個好主意。 :P
是的,它工作正常(在ls中的'幾乎所有'選項,但是,這樣做,你現在開始另一個過程,在這種情況下/ bin/ls ..通常不是一個壞主意,但是,如果你正在工作說10,000 +目錄,它可以開始佔用一點資源 - globbing由shell完成,並且不啓動任何進程來提供列表,並且實際上大多數人可以通過使用*。[^。 ] *基本上看起來像一個帶單片眼鏡的禿頭男人,所以很容易記住(加上它與正則表達式很相似,現在不是每個人都知道正則表達式嗎?或者我在這裏不是這樣:)> – osirisgothra 2013-08-13 09:11:49
如果文件名包含空格。 – 2013-11-26 18:58:33
如果您確信兩個字符的隱藏文件名字永遠不會被使用,那麼最簡單的選項,只是做的事:
chmod g+w * ...*
實際上,GLOBIGNORE是一個很好的文件夾。如果你不想永久使用'(GLOBIGNORE = ..; echo。*)',你可以暫時使用它。僅爲那一小段信息+1。 – paxdiablo 2010-05-26 05:00:03
有一個與'。[^。] * ..?''glob的警告,它通常會抱怨不匹配..?*部分,除非你購買了nullglob。 – pixelbeat 2012-04-12 08:27:27