質問: 現在のディレクトリと親ディレクトリを除くすべての隠しファイルをグロブする方法 すべての隠しファイルとディレクトリをグロブしたいが、現在の(.)と親ディレクトリ(..)はグロブしたくない。私はbashを使用しています。現在の行動を観察する:$ ls -a . .. ...a ...aa ..a ..aa .a .aa .aaa a $ echo * a $ echo .* . .. ...a ...aa ..a ..aa .a .aa .aaa .*をこのように動作させたい$ echo .* ...a ...aa ..a ..aa .a .aa .aaa シェルオプションdotglobがあります$ shopt -s dotglob それはある方法で機能します。今、私は*を使用してすべて(非表示かどうかにかかわらず)をグロブできますが、.と..はグロブできません$ echo * ...a ...aa ..a ..aa .a .aa .aaa a しかし今、私は隠されているかどうかを区別できません。また、.*は引き続き.および..をグロブします$ echo .* . .. ...a ...aa ..a ..aa .a .aa .aaa .*を.および..に展開しないようにする方法はありますか?
回答: 非表示のファイル/フォルダを表示したいが、.および..?このbashワイルドカードを使用してください{.[!.]*,..?*}サンプルデータサンプルデータを生成して試すことができます:$ touch ...a ...aa ..a ..aa .a .aa .aaa a $ mkdir ...b ...bb ..b ..bb .b .bb .bbb b 証明以下に、削除されることが予想されるエントリを示します。$ diff <(\ls -a) <(\ls -ad {.[!.]*,..?*}) 1,3d0 < . < .. < a 11d7 < b プロたとえば、すべての非表示要素を削除するのに役立ちます。$ rm -rf .* rm: cannot remove directory: `.' rm: cannot remove directory: `..' # <regenerate sample data here> $ rm -rf {.[!.]*,..?*} # no error