TXTファイルにリストされているファイルをコピーして名前を変更するにはどうすればよいですか?

TXTファイルにリストされているファイルをコピーして名前を変更するにはどうすればよいですか?

TXTファイルにリストされているすべてのファイルをある場所から別の場所にコピーする必要があります。

/1132526906_tt_nad87_1.jpg  /thumb/t1132526906_tt_nad87_1.jpg
/1132526906_tt_nad87_10.jpg /thumb/t1132526906_tt_nad87_10.jpg
/1132526906_tt_nad87_11.jpg /thumb/t1132526906_tt_nad87_11.jpg
/1132526907_tt_nad87_12.jpg /thumb/t1132526907_tt_nad87_12.jpg
/1132526907_tt_nad87_13.jpg /thumb/t1132526907_tt_nad87_13.jpg
/1132526908_tt_nad87_14.jpg /thumb/t1132526908_tt_nad87_14.jpg

CSVファイルを生成し、使用可能な文字の一部を使用してsource分割できます。target

はい

私の考えではコピー1132526906_tt_nad87_1.jpgからまでの./ファイル -/thumb/t1132526906_tt_nad87_1.jpg名前が変更されて移動されました。

質問

これを実行できるコマンドラインコマンドはありますか?例を見つけましたが、これらはコピーのみ可能です(名前を変更することはできません)。

修正する

私はこのスクリプトを作成しました:

#!/bin/bash

input="/data/web/web/gallery/data.csv"

while IFS=',' read from to
do
    echo "from: $from, to: $to"
done < "$input"

data.csvしかし、どの行も「反響」されず、ファイルを読み取っていないようです。何が問題なの?

答え1

OPの例では、名前の変更と変更はかなり一貫しているようです。たとえば、filename.jpg常に「t」プレフィックスが付いた同じパスのようですthumb/tfilename.jpg。もしそうなら、もっと簡単な方法があります。

すべて "thumb/" ディレクトリに転送された場合。

現在、ディレクトリにはテストファイルabc.jpgとxyz.jpgがあります。

サンプルファイルのリストは次のとおりです。

$ cat testfile
abc.jpg
xyz.jpg

テスト

echoを使用してコマンドのテストバージョンを実行して、コードが何をすべきかを判断するのに役立ちます。

$ while read my_file; do
   echo cp -a "$my_file" "thumb/t$my_file"
done < testfile

テスト結果:

cp -a abc.jpg thumb/tabc.jpg
cp -a xyz.jpg thumb/txyz.jpg
  • while read my_file; do ... done構文はstdinを1行ずつ処理します。
  • < testfilewhileステートメントが標準入力を読み取ることができるように、標準入力にリダイレクトするために<使用されます。testfile
  • my_fileコードの本文に示すように、入力を保持するために作成した変数です。$my_file
  • cpファイル名にコマンドが引数を識別するために使用するスペースを破る可能性があるスペースやその他の奇妙な文字が含まれている場合は、潜在的な問題を回避するために引用符を使用してください。

決定的な

テストエコーの結果に満足したら、エコーを削除して実際にコマンドを実行できます。

$ while read my_file; do
  cp -a "$my_file" "thumb/t$my_file"
done < testfile

ディレクトリを調べると、thumb/そこにコピーされた2つのテストファイルが表示されます。

フィードバックを含む最終結果

デフォルトでは、cpエラーがない限りフィードバックは提供されません。したがって、何百または数千のファイルをコピーすると、何も起こらないように見えることがあります。フィードバックを表示するには、詳細オプションを使用してください-v

$ while read my_file; do
  cp -av "$my_file" "thumb/t$my_file"
done < testfile

結果:

`abc.jpg' -> `thumb/tabc.jpg'
`xyz.jpg' -> `thumb/txyz.jpg'

答え2

最も簡単なのは次のとおりですxargs

< file-list.txt  xargs -n2 cp -v

関連情報