この問題を解決するのに苦労しています。
現在のディレクトリ内のすべてのファイルの実行権限を確認するシェル スクリプトを作成します。ファイルにユーザー実行権限がない場合は、ユーザーが実行できるようにします。
現在のディレクトリ内のすべてのファイルをループし、出力をテキストファイルに書き込むことを考えていました。次に、各行の4番目の文字を読み取り、それが「x」か「-」かを確認します。
答え1
あなたのアイデアは正当なもののように思えますが、不必要に大きくて複雑なので、代わりにこれを使用することができます:
#!/bin/bash
for file in *; do
[[ -x $file ]] || chmod u+x "$file"
done
*
これは現在のディレクトリ内のすべてのファイル( )を読み取ります次に、スクリプトを実行しているユーザーがファイルを実行できるかどうかを確認します(
[[ -x $file ]]
)そうでない場合(
||
)、ファイルはユーザーに対して実行可能になります(chmod u+x "$file"
)。
デフォルトでは*
隠しファイルと一致しません。隠しファイルに一致させるには、次の行も追加します。
shopt -s dotglob
シェバン行の後。
通常のファイルのみを検索および操作する場合:
#!/bin/bash
for file in *; do
if [[ -f $file ]]; then
[[ -x $file ]] || chmod u+x "$file"
fi
done
答え2
これはfind
次のような簡単なコマンドですchmod
:
find . -type f ! -perm -u+x -exec chmod u+x {} \;
または現在のフォルダーのみ:
find . -maxdepth 1 -type f ! -perm -u+x -exec chmod u+x {} \;
説明
.
現在のフォルダで検索を開始する
-maxdepth
再帰的ではない
-type f
ファイルのみ、フォルダなし
! -perm -u+x
ファイルの所有者に実行フラグがないファイルのみ
-exec chmod u+x {}
ファイルの所有者に実行フラグを設定する
答え3
それがより大きな自動化プロジェクトの一部なのか、それとも単にあなたがやりたいことなのかを述べてほしかったです。
ディレクトリ内で次の操作を実行するだけです。
chmod u+x *
これにより、フォルダ内のすべてのファイルに実行可能ステータスが追加されます。あなたのユーザー「」に追加してみてください。みんな" による
chmod a+x *
注意: ユーザーは特定のフォルダ内のファイルを変更する権限を持っている必要があります。つまり、「書く' 権限が必要です。権限がないと、何も変更できません。ユーザーが管理者の場合は、次のsudo
コマンドで呼び出すことができます。
sudo chmod a+x *
ファイルがすでに実行可能ステータスになっている場合は、再度ステータスを設定しても問題はありません。もちろん、前述したように、ステータスが変更されたすべてのファイルの名前をレポートなどの別の目的で使用する場合を除きます。heemayl のスクリプトは、そのような目的には便利です。
Mostafa Najafiyazdiのコメントから追加
[..] 実行権限のないフォルダの権限を変更したくない場合は、chmod u+x *
[..]を使用しないでください。