互いに依存する2つの変数を持つForループを使用する方法は?

互いに依存する2つの変数を持つForループを使用する方法は?

100個の.mp4ファイルを含むホームディレクトリがあります。また、dir_1, dir_2, dir_3最大100個のサブディレクトリセットがあります。私が望むのは、メインディレクトリを繰り返して、.mp4ファイルをサブフォルダごとに1つずつ、すべてのサブフォルダに展開することです。その後、できるだけ2つのループまたは2つの変数を持つ1つのループが必要です。これが約1行のコードで達成しようとする目標です。

for file in *.mp4 & x in {1..100}; do mv $file dir_$x; done

ベストアンサー1

set -- *.mp4

for dir in dir_*/; do
    mv -- "$1" "$dir"
    shift
done

すべてのMP4ファイルの名前を場所引数リストに割り当てることから始めますset。その後、パターンに一致するディレクトリを繰り返しますdir_*/。各ディレクトリの場所パラメータリストの最初のMP4ファイルをディレクトリに移動し、MP4ファイルをリストから移動します。

上記のコードには、MP4ファイルと同じくらい多くのディレクトリがあることを確認するチェックはありません。あなたはそれを望んであなたはできます

set -- *.mp4

for dir in dir_*/; do
    if [ "$#" -eq 0 ]; then
        echo 'Ran out of MP4 files' >&2
        exit 1
    fi
    mv -- "$1" "$dir"
done

if [ "$#" -ne 0 ]; then
    echo 'Too many MP4 files' >&2
    exit 1
fi

このコードは、shPOSIXに似たすべてのシェルで動作します。

おすすめ記事