如何复制并重命名 TXT 文件中列出的文件?

如何复制并重命名 TXT 文件中列出的文件?

我需要将 TXT 文件中列出的所有文件从一个位置复制到另一个位置。

/1132526906_tt_nad87_1.jpg  /thumb/t1132526906_tt_nad87_1.jpg
/1132526906_tt_nad87_10.jpg /thumb/t1132526906_tt_nad87_10.jpg
/1132526906_tt_nad87_11.jpg /thumb/t1132526906_tt_nad87_11.jpg
/1132526907_tt_nad87_12.jpg /thumb/t1132526907_tt_nad87_12.jpg
/1132526907_tt_nad87_13.jpg /thumb/t1132526907_tt_nad87_13.jpg
/1132526908_tt_nad87_14.jpg /thumb/t1132526908_tt_nad87_14.jpg

我可以创建一个 CSV 文件并使用一些可用的字符source进行划分。target

例子

我想复制文件1132526906_tt_nad87_1.jpg.//thumb/t1132526906_tt_nad87_1.jpg- 重命名并移动。

问题

有一些命令行命令可以做到这一点吗?我找到了示例,但这些示例仅进行复制(不重命名)。

更新

我创建了这个脚本:

#!/bin/bash

input="/data/web/web/gallery/data.csv"

while IFS=',' read from to
do
    echo "from: $from, to: $to"
done < "$input"

但没有任何行被“回显”,似乎data.csv文件没有被读取。有什么不对?

答案1

从OP的示例来看,重命名和更改似乎相当一致,例如filename.jpg似乎总是以相同的路径加上“t”作为前缀thumb/tfilename.jpg。如果是这种情况,那么可以做一些更简单的事情。

如果全部都发往“thumb/”目录。

当前目录中有测试文件 abc.jpg、xyz.jpg。

这是示例文件列表

$ cat testfile
abc.jpg
xyz.jpg

测试

使用 echo 来执行命令的测试版本会很有帮助,以查看代码将执行的操作:

$ while read my_file; do
   echo cp -a "$my_file" "thumb/t$my_file"
done < testfile

测试结果:

cp -a abc.jpg thumb/tabc.jpg
cp -a xyz.jpg thumb/txyz.jpg
  • while read my_file; do ... done语法将逐行处理 stdin
  • < testfile用于<重定向testfile到标准输入,因此 while 语句读取它
  • my_file是我们为保存输入而创建的变量,正如我们在代码正文中看到的那样,可以使用$my_file
  • cp如果文件名包含空格或其他奇怪的字符,这些字符可能会破坏命令用于识别参数的空格,请使用引号以避免潜在的问题

最终的

如果对测试回显结果满意,我们可以删除回显以实际执行命令:

$ while read my_file; do
  cp -a "$my_file" "thumb/t$my_file"
done < testfile

当您检查thumb/目录时,您将看到复制到那里的两个测试文件。

最终结果,有反馈

默认情况下cp,除非有错误,否则不提供反馈。因此,如果您要复制数百或数千个文件,则可能看起来好像什么也没发生。要查看反馈,请使用详细选项-v

$ while read my_file; do
  cp -av "$my_file" "thumb/t$my_file"
done < testfile

结果:

`abc.jpg' -> `thumb/tabc.jpg'
`xyz.jpg' -> `thumb/txyz.jpg'

答案2

最简单的是xargs

< file-list.txt  xargs -n2 cp -v

相关内容