テキストファイルの名前を使用してファイル名を一括変更するには、コアユーティリティを使用する必要があります。

テキストファイルの名前を使用してファイル名を一括変更するには、コアユーティリティを使用する必要があります。

だから私は初心者であり、仕事で問題があります。 IEから名前を出力するプログラムがあります

apple
banana
orange
P1n34ppl3

問題は、このファイルに該当するファイル(別のプログラム)が1.txt、2.txtなどにしかないという点だ。特定のディレクトリのファイルを繰り返して、コアユーティリティ(mv、ls、grep、awk、sedなど)だけを使用してテキストファイルの名前に名前を変更する方法はありますか?システムは、少し古く、パッチを取得したり、新しいプログラムを使用してリポジトリに接続できないスタンドアロンRHELボックスです。

答え1

現在の作業ディレクトリに出力行数ほど隠されていないファイルがあり、your-programすべてのファイル名に改行文字が含まれていないと仮定すると、kshスタイルプロセス置換(ksh)をサポートするシェルで次のことを実行できます。 、zsh、bash)操作:

paste -d '\n' <(ls -v) <(your-program) | xargs -rn2 -d '\n' echo mv --

echo(よろしければ削除してください。)

lswith は-v数値順にソートされます。たとえば、一般的な語彙の順序であるbetween andではなく、between andに10.txtなります。9.txt11.txt1.txt2.txt

paste圧縮された合計lsの行ですyour-program

xargs一度に2つの行をに渡しますmv

-v-r-dGNU拡張ですが、システムにはGNUユーティリティが必要です。

がある場合は、以下をzsh使用してより安定して実行できます。

files=( *(Nn) ) # or *.txt(Nn) or <->.txt(Nn) for number.txt only
lines=( ${(f)"$(your-program)"} )
for old new (${files:^lines}) echo mv -- $old $new

関連情報