如何使用 Bash 脚本通过 grep 移动和重命名文件

如何使用 Bash 脚本通过 grep 移动和重命名文件

您好,我有一个名为 Input 的 FTP 文件夹,我在其中收到发送的文件,如下所示:

"Guide to Iceland _ Chen-ping Wang itinerary T-987654987.pdf"
"Guide to Iceland _ T-123654875 Chen-ping Wang itinerary.pdf"

基本上,文件的描述可以不同,但​​它总是包含“T-”和一些数字。

我需要创建一个 bash 脚本,将文件复制到文件夹 ../Output 并重命名该文件,以便“T-”和数字首先出现,然后是文件名的其余部分。例子:"T-123654875 - Guide to Iceland _ Chen-ping Wang itinerary.pdf"

我打算使用 Grep 来获得正确的名称。搜索(.+)(T-\d+)并替换为$2 - $1

但我无法让它正常工作。

答案1

grep单独和替换对我来说看起来不像是一个可用的组合。你对这个怎么看sed

$ ls *pdf
Guide to Iceland _ Chen-ping Wang itinerary T-987654987.pdf
Guide to Iceland _ T-123654875 Chen-ping Wang itinerary.pdf

然后是一个小 for 循环bash

$ for i in *pdf; do mv "$i" "$( echo $i |  sed -r  's/^(.*)(T-[0-9]{9})(.+)$/\2 - \1\3/'  )"; done

这会迭代当前目录中的所有 PDF;为每次迭代存储它们的名称$i,通过 sed 回显内容(并使用其输出作为 的目标mv)。sed将文件名分成三部分并重新排列。我建议替换mvecho mv进行测试:)

这给了我们:

$ ls *pdf
T-123654875 - Guide to Iceland _  Chen-ping Wang itinerary.pdf
T-987654987 - Guide to Iceland _ Chen-ping Wang itinerary .pdf

相关内容