GNU/Linux >> Linux の 問題 >  >> Linux

定義されたディレクトリ範囲でコマンドを実行しますか?

ディレクトリリストを「パーティション化」することは可能ですか?たとえば、いくつかのブロックに分割して、各「範囲」で異なるアクションを実行することは可能ですか?

たとえば、別のフォルダ内に次のディレクトリがあるとします。

$ ls test
abc/
def/
hij/
klm/
nop/
qrs/
tuv/
wxy/
zzz/

そして、最初の3つのディレクトリでいくつかのアクションを実行し、次の3つのディレクトリで別のアクションを実行したいと思います。

私の考えでは、ls | nl (しかし、誰かがそれについて言及する前に、私はlsを解析することを知っています ノーノーです!)

これは明らかに機能しませんが、私が望む私のポイントを示しています:

for dir in `ls | nl`; 
do
    do-something-with ${dir{1..3}} # Where $dir has taken on some numerical value linked to the folder)
    do-something-with ${dir{4..6}} 
# And so on...
    do-something-with ${dir{n-3..n}} 
done

私が実際にこれを行う予定のフォルダーは、任意の順序で処理できます(つまり、最終的な分割は完全に任意です)が、論理的な名前の一貫性はありません。つまり、アルファベット順または数値で適切に整理することはできません。ディレクトリ名自体のキーに基づいています。

承認された回答:

次の間違いのいずれかを行う理由はありません この状況の場合:

  1. 移植性のないGNU拡張機能(xargs -0など)を使用する )
  2. ファイル名をテキストのストリームとしてのみ解析し、改行を含めることができないふりをします。

これは、それほど問題なく移植可能に処理できます:

set -- */
while [ "$#" -gt 0 ]; do
  case "$#" in
    1)
      my-command "$1"
      shift 1
      ;;
    2)
      my-command "$1" "$2"
      shift 2
      ;;
    *)
      my-command "$1" "$2" "$3"
      shift 3
      ;;
  esac
done

実際、これは必要以上に冗長ですが、この方法で読み取ることができます。

すべてのディレクトリを正確に3つの異なる処理方法に分割する(ただし、同時に処理する必要はない)別のタイプのパーティショニングの場合は、次のように行うことができます。

x=1
for d in *; do
  [ ! -d "$d" ] && continue
  case "$x" in
    1)
      # do stuff with "$d"
      ;;
    2)
      # do stuff with "$d"
      ;;
    3)
      # do stuff with "$d"
      ;;
  esac
  x=$(($x+1))
  [ "$x" -eq 4 ] && x=1
done

Linux
  1. Linuxでファイルとディレクトリをコピーする

  2. 入力でNohupコマンドを実行しますか?

  3. Linux の「検索」コマンドのガイド

  1. リモートアクティブターミナルでコマンドを実行しますか?

  2. ファイルが見つかった場所でコマンドを実行しますか?

  3. 特定のディレクトリで特定のコマンドを実行しますか?

  1. Linuxはコマンドをリモートで実行します

  2. コマンドを履歴に残さずに実行する

  3. コマンドLinuxラインからのmatlab実行スクリプト