私の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)を追加します。1d
names.txt
s/$/.tar.gz/
.tar.gz
$
xargs -n2
スペース/タブで区切られた2セットの文字列を読み取っています。
メモ:
cat -e names.txt
ファイルの出力がUnix形式の行末形式ではないため、Unix形式に変換した後、上記dos2unix fileName
のコマンドを適用して名前を変更します。テスト実行のために削除してください
echo
。