chmod をインタラクティブにする 1 行のコマンドはありますか?

chmod をインタラクティブにする 1 行のコマンドはありますか?

次のようなものを探しています:

ls | ask_yes_no_for_each_file | chmod +x the_files_approved

または同様の構文。

個別に確認したい他のコマンドでも機能します。

答え1

これはあなたが探しているものを実現します:

find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x

これは、一般的に、findではなく、ls解析ls出力は信頼できないただし、を使用するこの形式はfind、改行やその他の難しい文字が含まれているファイル名でも機能します。

説明

  • find . -maxdepth 1 -type f -print0

    これはファイルを選択します。これは find の多くのオプションのいずれかを使用してカスタマイズできます。このオプションは、ファイル名を null で区切られたリストに印刷するようにprint0指示しますfind。これはファイル名のリストを転送する唯一の信頼できる方法です。

  • xargs -L1 -p0 chmod +x

    これは、によって生成されたファイル名の null 区切りのリストを取得しfind、それらにコマンドを適用します。

この-L1オプションは、xargs一度に 1 つのファイル名のみを処理するように指示します。この-pオプションは、xargs続行する前に承認を求めるように指示します。このオプションは、ファイル名間の区切り文字としてヌル文字を使用するように-0指示します。xargs

[ @kwan が指摘するまで、その-pオプションがあることを知りませんでした。]xargs

答え2

を使用できますxargs

例えば:

ls|xargs -I path -p chmod +x path

オプション-p各コマンド ラインを実行するかどうかをユーザーに確認し、端末から 1 行読み取ります。応答が「y」または「Y」で始まる場合にのみ、コマンド ラインを実行します。

関連情報