
次のようなものを探しています:
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」で始まる場合にのみ、コマンド ラインを実行します。