テキストファイルの一致に基づいて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であり、どのように削除しますか?

答え2

names.txt示されているように、名前にスペースがなく、ファイルの最初の行にタイトルがあると仮定すると、次のようになります。

tail -n +2 names.txt | while read old new; do
    mv -i "$old" "$new"
done 

2行目から始めてファイル内のすべての行を印刷するので、tail -n +2ヘッダーをスキップします。その後、-iGNUのオプションは、mv既存のファイルを上書きする前に(名前が競合している場合)プロンプトを表示するように指示します。

答え3

シェルの使用:tarファイル名にスペースが含まれておらず、サンプル名にもスペースが含まれていないとします。

{
    read header
    while read -r tarfile sample; do
        if [[ -f "$tarfile" ]]; then
            echo mv "$tarfile" "$sample.tar.gz"
        fi
    done
} < names.txt

答え4

入力ファイル形式を考えると、sed次の1つのコマンドで十分です。

sed '1!{s/^/mv /;s/$/.tar.gz/e}' names.txt

デモ、いいえe

sed '1!{s/^/mv /;s/$/.tar.gz/}' names.txt

出力:

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

関連情報