我正在尝试重命名自动生成的PDF文件,以便每个文件都包含要转到的用户的名称,使用当前名称的CSV地图为其新名称,使用我认为是直截了当的和bash shell中的简单脚本。
目录中的原始文件以Cover_Letter_1.pdf
,Cover_Letter_2.pdf
等格式命名,在CSV中,它们的格式如下:
Cover_Letter_1.pdf,Cover_Letter_User1.pdf
Cover_Letter_2.pdf,Cover_Letter_User2.pdf
我将CD放入目录(文件和CSV都是),并尝试了这个脚本:
sed 's/"//g' rename_list.csv | while IFS=, read orig new; do echo mv "$orig" "$new"; done
返回预览,准确显示我的预期:
mv Cover_Letter_1.pdf Cover_Letter_User1.pdf
mv Cover_Letter_2.pdf Cover_Letter_User2.pdf
(sed 's/"//g' files.csv
如果CSV文件中的文件名中有引号,则恰好不适用于第一组文件)
因此,我会删除echo
以实际运行它,但结果是它会破坏文件,将它们转换为通用.file
格式,并使用像P4L8I7~B.file
这样的乱码名称/ p>
我运行了一个“预览”命令(例如mv Cover_Letter_2.pdf Cover_Letter_User2.pdf
),只是为了确保脚本的一部分是正确的(确实如此)。
编辑:我只是想尝试运行sed 's/"//g' rename_list.csv | while echo IFS=, read orig new; do echo mv "$orig" "$new"; done
,这会导致它在while循环中无限期地运行而没有明显的结束。我想它会在文件中没有逗号的情况下终止,但是,如果我理解正确,它只是试图继续永久地读取行。
答案 0 :(得分:0)
您可以通过以下方式更改命令,如果它正确显示移动命令,它应该可以正常工作。
(sed 's/"//g' rename_list.csv | while IFS=, read orig new; do echo mv "$orig" "$new"; done) | bash
这将是:
mv Cover_Letter_1.pdf Cover_Letter_User1.pdf
mv Cover_Letter_2.pdf Cover_Letter_User2.pdf
作为命令并运行它。
在运行此命令之前备份文件。