プロンプト、ループコマンド

プロンプト、ループコマンド

Unixコマンドを実行してファイルリストを繰り返す一般的な方法はありますか?たとえば、あるディレクトリ内のすべてのファイル(ディレクトリを除く)を別のディレクトリに移動し、各ファイルの前にy / nプロンプトを表示するとします。明らかにこれはスクリプトを介して実行できますが、mvだけでなくファイルに対する同様の操作(rm、cat、wc、grepなど)にも使用できるコマンド方法はありますか?

答え1

はい、

find /path/to/source/dir -type f -maxdepth 1 -ok mv {} /path/to/target/dir \;

ここのコマンドは、findすべての一般ファイルを検索し、/path/to/source/dirユーザーに与えられたアクションを実行するように求めるメッセージを表示します。この場合、ファイルをに移動します/path/to/target/dir。ユーザーがy(およびenter)を押すと、操作が実行されます。

{}は順番に見つかった各ファイルの名前に置き換えられ、各ファイルに対して実行されたコマンドは\;

-okに置き換えると、-execユーザーにメッセージが表示されず、次のメッセージが表示されます。みんな文書。

-maxdepth 1ファイル検索を最上位ディレクトリ(/path/to/source/dir)に制限します。これがなければ、find指定されたパスの下のすべてのサブディレクトリに再帰されます。

-type f検索を通常のファイルに限定します(ディレクトリ、ソケット、デバイスファイルなどは検索しません)。

答え2

通常、シェルグローブを使用して作業するファイルのリストを生成し、読み取りとテストを実行して操作を実行するかどうかを決定します。

(あなたの)例えば:

for f in *
do 
  [ -f "$f" ] || continue
  read -p "mv $f to /tmp? "
  if [ $REPLY = "y" ]
  then 
    echo "moving $f to /tmp"
    # mv -- "$f" /tmp
  else 
    echo "not doing anything with $f"
  fi
done

シェルの設定によっては、ドットファイル(例)を選択したり選択したりしない場合があります.bashrc

必要に応じて変更できます。 「いいえ」と答えないでください。 「y」、「y」、「yes」、または「yabadabadoo」を許可します。

関連情報