1

数値でソートされた2つのファイルがあります。これら 2 つのファイルを読み取り、1:1 のマッピングを行い、マッピングされたケース番号でファイル名の名前を変更するには、シェル スクリプトを使用する必要があります。

例えば:

cat case.txt
10_80
10_90

cat files.txt
A BCD_x 1.pdf
A BCD_x 2.pdf

ls pdf_dir
A BCD_x 1.pdf A BCD_x 2.pdf

これらの 2 つの txt を読み、pdf_dir 内の pdf ファイルの名前を変更します。

A BCD_x 1.pdf as A BCD_10_80.pdf
A BCD_x 1.pdf as A BCD_10_90.pdf
4

4 に答える 4

2

を使用pasteして「マッピング」を作成し、シェル機能を使用して名前を変更します。

shopt -s extglob
while IFS=$'\t' read file replacement; do
    echo mv "$file" "${file/x +([0-9])/$replacement}"
done < <(paste files.txt case.txt)

満足したら「エコー」を削除します。

于 2013-08-09T19:17:28.743 に答える
1

通常の配列と sed 置換の使用 - mv の前に echo を削除すると、移動機能が提供されます。/path/to/pdf_dir/ を変更して、目的のディレクトリへのパスを指定できます

#!/bin/bash
i=0
while read line
do
    arr[i]="$line"
  ((i=i+1));
done < files.txt

i=0
while read case
do
   newFile=$(echo "${arr[i]}" | sed "s/x/"$case"/")
   echo mv /path/to/pdf_dir/"${arr[i]}" /path/to/pdf_dir/"$newFile"
   ((i=i+1))
done < case.txt
于 2013-08-10T00:32:06.600 に答える