テキストファイルの一致に基づいてtar.gzファイルの名前を変更する方法

テキストファイルの一致に基づいてtar.gzファイルの名前を変更する方法

私のLinuxシステム上のフォルダには、tar.gzファイル名と一致するサンプル名を含むテキストファイルだけでなく、複数のtar.gzファイルがあります。

Current_directory
      |_______TDF.tar.gz
      |_______DFG.tar.gz
      |_______GHY.tar.gz

現在のディレクトリのnames.txtファイルは次のとおりです。

Tar.gz_filenames       Sample_Names
DFG.tar.gz                Sample2
TDF.tar.gz                Sample1
GHY.tar.gz                Sample3

したがって、一致に基づいてCurrent_directoryから次の出力を取得したいと思います。

Output:

Sample1.tar.gz
Sample2.tar.gz
Sample3.tar.gz

私は成功せずに次のことを試しました。

for j in .tar.gz ; do
  sed "s/\(\w\+\)\s\+\(\w\+\)/mv '*_\1$j' '*_\2$j'/e" names.txt
done

私の質問に対する小さなアップデート:このコマンドを使用すると、cat -e names.txt次の内容が表示されます。

Tar.gz_filenames    Sample_Names^M$
DFG.tar.gz  Sample2^M$
TDF.tar.gz  Sample1^M$
GHY.tar.gz  Sample3

ベストアンサー1

ファイル名にスペースがないと仮定する別の方法は次のとおりです。

$ xargs -n2 echo mv -i <<<"$(sed '1d; s/$/.tar.gz/' names.txt)"
mv -i TDF.tar.gz Sample1.tar.gz
mv -i DFG.tar.gz Sample2.tar.gz
mv -i GHY.tar.gz Sample3.tar.gz

では、入力ファイル名の最初の行を削除し、各行のsed '1d; s/$/.tar.gz/'末尾に(行の末尾にponits)を追加します。1dnames.txts/$/.tar.gz/.tar.gz$

xargs -n2スペース/タブで区切られた2セットの文字列を読み取っています。

メモ:

  • cat -e names.txtファイルの出力がUnix形式の行末形式ではないため、Unix形式に変換した後、上記dos2unix fileNameのコマンドを適用して名前を変更します。

  • テスト実行のために削除してくださいecho

次に接続それは何^Mであり、どのように削除しますか?

おすすめ記事