3

私はいくつかのファイルを持っています、それらはこのように命名されています

.abc efg.txt 
.some other name has a dot in front.txt
......

そして、私はこのようなことをしたい

for i in `ls -a` ; do echo $i; done;

私は結果が

.abc efg.txt
.some other name has a dot in front.txt

しかし、それはかなり混乱していることがわかりました..どうすればそれらの隠しファイルを入手できますか???

ありがとう

4

3 に答える 3

4

lsシェル パターン マッチングを使用する代わりに、次のようにします。

for i in .* ; do echo $i; done;

すべてのファイルが必要な場合は、隠しファイルと通常のファイルを次のように実行します。

for i in * .* ; do echo $i; done;

(これはあなた...を取得することに注意してください。それらが必要ない場合は、それらをフィルターで除外する必要があります。また、(隠し)ファイルがない場合、このアプローチは失敗することに注意してください。その場合、フィルターで除外する必要があります*.*)

bashすべてのファイルが必要で、特定のオプションを使用してもかまわない場合は、 と を設定dotglobしてこれを調整できますnullglob。隠しファイルも検索します (ただし、 and は検索しませんdotglob) 。一致するファイルがない場合は返されません。したがって、この場合、フィルタリングを行う必要はありません。*...nullglob*

shopt -s dotglob nullglob
for i in * ; do echo $i; done;
于 2010-12-19T09:27:49.667 に答える
2

回避する.には、次の..ことができます。

find . -name ".*" -type f -maxdepth 1 -exec basename {} ";"

これにより、必要なものが印刷されます。以外のことをする必要がある場合はecho、それを の引数として入れてくださいexec

for fname in .*; do echo $fname; done;も印刷...れます。

于 2010-12-19T09:29:55.727 に答える
1

非表示のファイルを見つけるには、find を使用します。

find . -wholename "./\.*"

それらを結果から除外するには:

find . -wholename "./\.*" -prune -o -print

また、スペースを含むファイル全体を処理する別の方法は、それらを行として処理することです。

ls -1a | while read aFileName
do
  echo $aFileName
done
于 2014-05-20T12:41:08.610 に答える