我有一个目录,下面有4个文件
ERR315336_1.fastq.gz ERR315336_2.fastq.gz ERR315337_1.fastq.gz ERR315337_2.fastq.gz
我还在名为 info.txt 的 sep 文件中提供了这 4 个文件的信息文件
placenta_6c placenta_6c_ERR315336_1.fastq.gz ERR315336_1.fastq.gz
placenta_6c placenta_6c_ERR315336_2.fastq.gz ERR315336_2.fastq.gz
thyroid_5b thyroid_5b_ERR315337_1.fastq.gz ERR315337_1.fastq.gz
thyroid_5b thyroid_5b_ERR315337_2.fastq.gz ERR315337_2.fastq.gz
我想从 info.txt 文件更改目录中文件的名称,因此更改名称后我的目录应如下所示:
placenta_6c_ERR315336_1.fastq.gz
placenta_6c_ERR315336_2.fastq.gz
thyroid_5b_ERR315337_1.fastq.gz
thyroid_5b_ERR315337_2.fastq.gz
所以基本上改变ERR315336_1.fastq.gz to placenta_6c_ERR315336_1.fastq.gz
等等。我有一个巨大的信息列表文件。我怎样才能做到这一点。
谢谢
答案1
笨拙地:
cd directory-with-files
awk '{system("echo mv " $3 " " $2)}' < /path/to/info.txt
bash-edly:
cd directory-with-files
while read -r junk new old
do
echo mv "$old" "$new"
done < /path/to/info.txt
当回声看起来不错时将其删除。
这不会对文件名中的空格或文件名中的引号进行任何错误检查。
答案2
$ while read -r c1 c2 c3; do echo mv "$c3" "$c2"; done < info.txt
mv ERR315336_1.fastq.gz placenta_6c_ERR315336_1.fastq.gz
mv ERR315336_2.fastq.gz placenta_6c_ERR315336_2.fastq.gz
mv ERR315337_1.fastq.gz thyroid_5b_ERR315337_1.fastq.gz
mv ERR315337_2.fastq.gz thyroid_5b_ERR315337_2.fastq.gz
- 逐行读取
info.txt
文件并保存 3 个字段(假设空格/制表符分隔) echo
用于试运行,没问题后将其移除- 进一步阅读:http://mywiki.wooledge.org/BashFAQ/001