使用:
for eachfile in /mnt/thara/*
また、隠しファイルもナビゲートします。ファイルを隠す必要はありません。
答え1
bashの一般的な振る舞いは、forを使用するときに隠されたファイルを見ないことです。ただし、この動作はshoptコマンドを使用して変更できます。
「*」を使用して隠しファイルスキャンを有効にするには:
shopt -s dotglob
「*」を使用して隠しファイルチェックを無効にする(デフォルト動作)
shopt -u dotglob
したがって、次のスクリプトを試してください。
shopt -u dotglob
for eachfile in /mnt/thara/*
今隠されたファイルは消えなければなりません。
答え2
他の方法は
for eachfile in /mnt/thara/[^.]*
答え3
シェルオプションに関するコメントに同意しますdotglob
。設定しないと、forループの動作が予想されます。
utente@computer:/tmp/test$ shopt | grep dotglob
dotglob off
a
、、、b
をc
通常のファイル.hidden1
と.hidden2
隠しファイルのままにします。
utente@computer:/tmp/test$ touch a b c .hidden1 .hidden2
utente@computer:/tmp/test$ ls -al
totale 8
drwxrwxr-x 2 utente utente 4096 giu 10 18:28 .
drwxrwxrwt 13 root root 4096 giu 10 18:28 ..
-rw-rw-r-- 1 utente utente 0 giu 10 18:28 a
-rw-rw-r-- 1 utente utente 0 giu 10 18:28 b
-rw-rw-r-- 1 utente utente 0 giu 10 18:28 c
-rw-rw-r-- 1 utente utente 0 giu 10 18:28 .hidden1
-rw-rw-r-- 1 utente utente 0 giu 10 18:28 .hidden2
ループの場合:
utente@computer:/tmp/test$ for eachfile in * ; do ls $eachfile ; done
a
b
c
find
シェルオプションとは無関係なもう1つのアプローチ:初期文字にドットと一致するすべてのパス名をフィルタリングするように指示します.
。
utente@computer:/tmp/test$ find . \( ! -path '*/.*' \) -type f -exec ls {} \;
./c
./b
./a
また、見ることができますこの問題superuser.comから
答え4
または非常に簡単に...
ls -l | egrep -v "^\."
または、ファイル名を表示するすべてのディレクトリを繰り返します。
ls -R | egrep -v "^\."