次の形式のファイル(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
。