bashコマンドラインごとに複数のパラメータを読み取るには?

bashコマンドラインごとに複数のパラメータを読み取るには?

次の形式のファイル(ordered_names)があります。

pub 000.html
pub.19 001.html

約300行ですが、mvコマンドに入力する方法が見つかりません。

私が読んでファイルに格納されている文字列をコマンドの引数リストとして提供しますか?しかし、私が望むものを得ることはできません。

私が試したいくつかのことは次のとおりです。

for line in "$(cat ../ordered_files.reversed)"; do mv  $(echo "$line"); done
for line in "$(cat ../ordered_files.reversed)"; do echo mv $(echo $line | cut -d' ' -f 1) $(echo $line | cut -d' ' -f 2) ; done

ベストアンサー1

努力する:

while read -r file1 file2; do mv -n -- "$file1" "$file2"; done <inputfile

これは、入力ファイルの各行のファイル名がスペースで区切られていると仮定します。もちろん、これはファイル名自体にスペースが含まれていない場合にのみ機能します。その場合は、別の入力形式が必要です。

どのように動作しますか?

  • while read -r file1 file2; do

    これでサイクルが始まりますwhile。入力が可能な限りループは継続されます。各入力ラインに対して2つのパラメータ(file1および)を読みますfile2

  • mv -n -- "$file1" "$file2"

    file1に移動しますfile2

    このオプションを使用すると、ターゲットの場所-nにあるファイルが上書きされるのを防ぎます。もちろん、ファイルを上書きする場合は、このオプションを削除してください。

    この文字列は--オプションの終わりを示します。ファイル名が-

  • done

    これはサイクルの終わりを示しますwhile

  • <inputfile

    これはwhile、ループに名前付きファイルから入力を受け取るように指示しますinputfile

おすすめ記事