2017-09-07 4 views
0

私は、端末OSXでは、制限されたシステムディレクトリのファイル名をどのように配列に入れるのですか?

files=(/var/db/*); printf '%s\n' "${files[@]}" 

に入力し、それを実行すると、私はそのフォルダ内のファイルのリストを取得しますが、制限されたTokenCacheのディレクトリに入ることは何も与えていない:

files=(/var/db/TokenCache/*); printf '%s\n' "${files[@]}" 

このコマンドは私を与えます/ var/db/TokenCache/*とその内部のファイル/フォルダではありません。制限されたフォルダの中で動作させる方法はありますか?sudo lsさらにsudo rm内部で作業しますか?例えば:

sudo ls -la /var/db/TokenCache 

は、その内容、すなわち、2つのフォルダ設定トークンを示しています。

+0

ディレクトリのコンテンツを一覧表示したいので、現在のユーザーには読み取りアクセス権がありません。 –

+0

本質的には、私の例にsudoを組み込む方法を知りたいと思います。 – IgorD

答えて

0

答えはこのようなものが考えられます。

files=($(sudo ls "/var/db/TokenCache")) 
printf '%s\n' "${files[@]}" 

しかし、これは、指定したフォルダ(この場合はTokenCacheが)だけで自分の名前にスペースなしの要素が含まれていることを、仮定の下でのみ安全です。

各ファイルの配列のうち、完全なパスを取得したい場合は、私はこのような何かを示唆している:

directory="/var/db/TokenCache" 
files=($(sudo ls "${directory}")) 
printf "${directory}/%s\n" "${files[@]}" 

お知らせ"はの書式指定子でに変更されたことをシェルによって変数の展開が必要にprintfコール。厥。

+0

各要素にフルパスを入れる方法はありますか? – IgorD

+0

配列は "/ var/db/TokenCache/config"のようになりますか?本当に必要な場合は、[あなたの答えは](https://stackoverflow.com/questions/27340307/list-file-using-ls-command-in-linux-with-full-path)を調べることをお勧めします。 –

+0

しかし、パス内のスペースは配列を壊すことに注意してください。個人的には、パスに変数を格納することをお勧めします。(あなたが持っている 'ls'呼び出しにそれを与えなければならないので)' filesの中の要素の1つを使用するときにそれをちょうど追加します。 –

0

グロブ展開はシェルで起こるので、あなたが適切な権限を持つユーザーとして実行されているシェルのインスタンスを必要としています。

sudo bash -c 'files=(/var/db/*); printf "%s\n" "${files[@]}"' 
関連する問題