私が達成したいことは2つのパラメータに基づいて、テキストファイルのレコードと一致するディレクトリ内のファイルを移動します。。
たとえば、テキストファイルには次の履歴があります。
SPPARK|10416|3308123|3308123|Uphold|Thelma|1930/05/20||
私のディレクトリには、次の内容のファイルがあります。
1123_M1123_UPHOLD_M1123_MESSAGE_SPPARK_348642.pdf
したがって、パフォーマンスのUPHOLD
4番目のフィールドがM1123
私のテキストファイルのフィールドと一致する場合は、そのフィールドを指定されたディレクトリに移動したいと思います。
for files in test/* ; do
echo $files | awk -F "_" '{print $3,$4}'
done
答え1
この試み。テスト後、「echo」コマンドをcpまたはmvに変更します。
for f in samples.txt ; do
echo /source/path/*$(cut -d '|' -f 5,2 $f | tr '|'a-z '_'A-Z)*.pdf /destination/path
done
すみません、私の間違いです。 @Kusalananda ありがとうございます。上記の回答が間違っていると思って、この回答を試してください。 /srcから/dstにファイルをコピーする列5と4をフィルタリングするとします。
awk -F "|" '{system("cp /src/*"toupper($5)"_"$4"*.pdf /dst")}' samples.txt
答え2
私はこれに反対方向に近づきます:
- テキストファイルを1行ずつ読み、フィールドに分割
- そのファイルを一致させて移動します。
EG(家庭bash
とGNU mv
):
#!/bin/bash
shopt -s nullglob
while IFS='|' read -r loc a b c last first d e; do
echo mv --no-clobber -t path/to/target/ -- *_"$a"_"${last^^}"_*_*_*_*.pdf
done < file.txt
echo
必要に応じて機能しているという事実に満足している場合は、削除してください。