web-dev-qa-db-ja.com

テキストファイル内の一致に基づいて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
3
user3351523

ファイル名に空白がないと仮定する別の方法:

$ 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/'では、1dは入力fileNamenames.txtの最初の行を削除し、次にs/$/.tar.gz/はすべての行の終わりに.tar.gzを追加します($行末までポニート)。

xargs -n2では、Space /またはTabで区切られた2セットの文字列を読み取っています。

注:

  • cat -e names.txtの出力に基づいて、そのファイルはUnixタイプの行末形式ではありません。Unixタイプに変換するには、dos2unix fileNameを実行してから、上記のコマンドを適用して名前を変更します。

  • ドライランの場合はechoを削除します。

リンク先 ^Mとは何ですか?どうすればそれを取り除くことができますか?

1
αғsнιη

あなたの名前に空白がなく、あなたのnames.txtファイルには、表示されているように最初の行にヘッダーがあります。次のことができます。

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

tail -n +2は、2番目から始まるファイルのすべての行を出力するため、ヘッダーをスキップします。そうして -i option for GNU mvは、既存のファイルを上書きする前にプロンプ​​トを表示するように指示します(名前の衝突がある場合に備えて)。

0
terdon

シェルの使用:tarfile名にはスペースが含まれておらず、サンプル名にはスペースが含まれていないと想定しています。

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

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

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
0
agc