だから私は初心者であり、仕事で問題があります。 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
(よろしければ削除してください。)
ls
with は-v
数値順にソートされます。たとえば、一般的な語彙の順序であるbetween andではなく、between andに10.txt
なります。9.txt
11.txt
1.txt
2.txt
paste
圧縮された合計ls
の行ですyour-program
。
xargs
一度に2つの行をに渡しますmv
。
-v
、-r
は-d
GNU拡張ですが、システムには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