2017-01-30 53 views
2

我想要的文件夾結構如下命名:傳遞一個bash變量,一個Perl命令

xxx_name_surname/ 
├── whatever.jpg 
├── foobar.jpg 
├ [...] 
├── barfoo.jpg 
└── full 
    ├── whatever.jpg 
    ├── foobar.jpg 
    ├ [...] 
    ├── barfoo.jpg 

在類似:

xxx_name_surname/ 
├── 001_name_surname.jpg 
├── 001_name_surname.jpg 
├ [...] 
├── 011_name_surname.jpg 
└── full 
    ├── 001_name_surname.jpg 
    ├── 002_name_surname.jpg 
    ├ [...] 
    ├── 011_name_surname.jpg 

我使用下面的腳本:

#!/bin/sh 
for d in *; 
    do 
     if [ -d "$d" ]; then 
      cd $d; 

      folder_name=${PWD##*/} 
      image_name=${folder_name:4} 
      echo Current dir is: 
      echo $current_dir 
      echo "Rename and sanitize image in folder ..." 
      export $image_name 

      rename -f -N ...001 -X -e '$_ = $N . '_' . $_' *.jpg 

      echo 
      echo "Creating folder" $d"/full ..." 
      mkdir full 
      echo "Adding padding to image ..." 
      mogrify -path full -background white -gravity center -resize 1920x1080\> -extent 1920x1080 *.jpg 
      cd .. 
      echo 
     fi 
done 

echo "Done." 

我所做的腳本試圖:

  • 解析的文件夾結構
  • 得到父文件夾的名稱(不XXX號)
  • 重命名和消毒的文件名(重命名是一個Perl腳本 - >指http://plasmasturm.org/code/rename/
  • 創建一個完整版使用mogrify將圖像輸出到完整文件夾中。

我的問題是有關重命名命令:

rename -f -N ...001 -X -e '$_ = $N . '_' . $_' *.jpg 

按照manual page是不可能性的文件,一個計數器爲前綴命名。 我知道這是一個與將bash參數傳遞給perl腳本有關的語法問題。我也在stackexchange上找到了同樣的答案,但我無法解決自己,因爲我不是Perl專家。

然後我意識到腳本非常簡單,但我想問問你是否有建議,以獲得相同的結果 - 使用bash,命令行 - 但以更好的方式。

謝謝。

+0

這是bash,而不是Perl。你指的是什麼樣的Perl腳本?此外,您的示例樹輸出顯示文件名兩次。 – simbabque

+1

我指的是用Perl編寫的rename命令http://plasmasturm.org/code/rename/ – fabiosirna

+0

我認爲'-N ... 001'沒什麼特別的。這不是什麼魔術,它只是一個字符串。在'rename'程序中,它解析該字符串。我認爲你不需要第二個零,只是做'-N ... 01'就足以讓數字和原來一樣寬,並且填零。你用'-n'運行你的程序來做一個幹運行,看看會發生什麼? – simbabque

回答

0

SOLUTION

這解決了我的問題:

IMAGENAME=$(echo $image_name) 
    export IMAGENAME 
    rename -f -N ...001 -X -e '$_ = $N . "_" . $ENV{IMAGENAME}' *.jpg 

所以最終的bash腳本是:

#!/bin/sh 

for d in *; 
    do 
     if [ -d "$d" ]; then 
      cd $d; 
      folder_name=${PWD##*/} 
      image_name=${folder_name:4} 

      echo "Rename and sanitize image in folder ..." 
      IMAGENAME=$(echo $image_name) 
      export IMAGENAME 
      rename -f -N ...001 -X -e '$_ = $N . "_" . $ENV{IMAGENAME}' *.jpg 
      echo "Creating folder" $d"/full ..." 
      mkdir full 
      echo "Adding padding to image ..." 
      mogrify -path full -background white -gravity center -resize 1920x1080\> -extent 1920x1080 *.jpg 
      cd .. 
      echo 
     fi 
done 
echo "Done." 

注意

正如你可以見T他的腳本不是最好的解決方案,但是正在完成這項工作。

相關問題