[英]How to pass captured regex group to a shell command inside perl-rename
我有一組文件,我想使用 WSL Ubuntu 中提供的重命名實用程序批量重命名。 我的文件名包含以下模式,我想更正文件中的日期格式。
file_10Feb2022.pptx
file_10Mar2022.pptx
file_17Feb2022.pptx
file_17Mar2022.pptx
file_24Feb2022.pptx
file_3Feb2022.pptx
file_3Mar2022.pptx
我嘗試使用以下命令重命名
rename -n "s/_(.*)\./_`date +%F -d \1`\./g" *.pptx
我使用正則表達式捕獲日期部分,並嘗試使用日期命令(在 `` 內)正確格式化,但我無法將捕獲的正則表達式組(\1)傳遞給 shell 命令。
我有另一個文件夾,其中包含不同日期格式的后綴文件,我想捕獲它並讓 date 命令處理格式,而不是捕獲單個部分,如日期、月份和年份。 關於如何正確執行此操作的任何想法?
這可能超出了單線是一個好主意的范圍,但是:
$ rename 's{_(.*?)(\.[^.]+)$}{
my ($d,$s) = ($1,$2);
my $nd = `date +%F -d "$d"`;
chomp $nd;
$? ? $& : "_$nd$s"
}e' file_*
s{}{}e
- 搜索和替換,將替換視為代碼$?
設置出錯,返回原值; 否則做更換date
錯誤將照常出現在 stderr 上; 受影響的文件不會被重命名use IPC::System::Simple qw( capturex );
capturex( "date", "+%F", "-d", $d );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.