tolikpunkoff

Batch rename files (graphic interface)

Jun 25th, 2016
142
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/sh
  2. #
  3. # Пакетное переименование файлов
  4. # Batch rename files
  5. # version: 1.0.0
  6. #
  7. # RENAME(){
  8. #       DIRNAME1        Каталог с файлами
  9. #       NEWNAME         Новый префикс
  10. #       CURRENTNAME     Текущий префикс
  11. #       NUMBER          Нумерация файлов от
  12. #       FOLDER          Путь сохранения
  13. # }
  14. # export -f RENAME
  15. #
  16. # REPLACE(){
  17. #       DIRNAME2        Каталог с файлами
  18. #       F1              Найти (что заменить)
  19. #       R1              Заменить (на что заменить)
  20. #       H1              Удалить специальные символы и знаки
  21. #       S1              Исключить пробелы (склейка)             
  22. #       P1              Заменить пробелы на 0x5F (hex)
  23. #       P2              Нижний регистр в расширении файла
  24. #       P3              Нижний регистр в имени файла
  25. #       T1              Транслит
  26. # }
  27. # export -f REPLACE
  28. #
  29.  
  30. RENAME(){  
  31.     if [ -z "$DIRNAME1" ]; then
  32.         Xdialog --title " " --msgbox "$(gettext 'Не указан каталог с файлами!')" 0 0  
  33.         exit 1
  34.     fi     
  35.     if [ -z "$NEWNAME" ]; then
  36.         Xdialog --title " " --msgbox "$(gettext 'Не указан новый префикс!')" 0 0  
  37.         exit 1
  38.     fi
  39.     if [ "$NUMBER" == "" ]; then NUMBER=1000; fi       
  40.     if [ "$FOLDER" != "" ]; then mkdir "$FOLDER"/"$NEWNAME"; fi
  41.  
  42. i=$NUMBER
  43. cd "$DIRNAME1"
  44. ls "$DIRNAME1" | while read x
  45. do
  46.     if [ -f "$x" ]; then
  47.         if [ "$CURRENTNAME" != "" ]; then
  48.                     nname=`echo $x | sed -e s/"$CURRENTNAME"/"$NEWNAME"/g`
  49.                     nname=`echo ${nname%.*}`
  50.             else    nname="$NEWNAME$i"
  51.         fi
  52.         if [ -z "$FOLDER" ]; then
  53.                 if ! [ -f "$nname".`echo ${x##*.}` ]; then
  54.                     mv "$x" "$nname".`echo ${x##*.}`
  55.                 fi
  56.             else    cp "$x" "$FOLDER/$NEWNAME/$nname".`echo ${x##*.}`
  57.         fi
  58.         i=$(($i+1))
  59.     fi
  60. done
  61. }
  62. export -f RENAME
  63.  
  64. REPLACE(){ 
  65.     if [ -z "$DIRNAME2" ]; then
  66.         Xdialog --title " " --msgbox "$(gettext 'Не указан каталог с файлами!')" 0 0  
  67.         exit 1
  68.     fi  
  69.     if [ -z "$F1" ]; then F1=""; fi
  70.     if [ -z "$R1" ]; then R1="" ;fi
  71.        
  72. FROM="ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЗИЙКЛМНОПРСТУФХЦЫ"        
  73. TOOO="abcdefghijklmnopqrstuvwxyzабвгдезийклмнопрстуфхцы"
  74. cd "$DIRNAME2"
  75. ls "$DIRNAME2" | while read x
  76. do
  77.     nname=`echo ${x%.*}`
  78.     ext=`echo ${x##*.}`
  79.     if [ -f "$x" ]; then
  80.         if [[ -n "$F1" && -n "$R1" ]]; then
  81.             nname=`echo $nname | sed -e s/"$F1"/"$R1"/g`
  82.         fi
  83.         if [[ -n "$F1" && -z "$R1" ]]; then
  84.             nname=`echo $nname | sed -e s/"$F1"//g`
  85.         fi 
  86.         if [ "$S1" == "true" ]; then
  87.             nname=`echo $nname | sed 's/[[:space:]]//g'`
  88.         fi
  89.         if [ "$P3" == "true" ]; then
  90.             nname=`echo $nname | sed -e y/"$FROM"/"$TOOO"/`
  91.         fi
  92.         if [ "$P2" == "true" ]; then
  93.             ext=`echo $ext | sed -e y/"$FROM"/"$TOOO"/`
  94.         fi 
  95.         if [ "$P1" == "true" ]; then
  96.             nname=`echo $nname | sed 's/[[:space:]]/_/g'`
  97.             nname=`echo $nname | sed s/'_\{2,\}'/'_'/g`
  98.         fi
  99.         if [ "$T1" == "true" ]; then
  100.             translit_file_name=`echo $nname | sed "y/абвгдезийклмнопрстуфхцы/abvgdezijklmnoprstufxcy/"`
  101.             translit_file_name=`echo $translit_file_name | sed "y/АБВГДЕЗИЙКЛМНОПРСТУФХЦЫ/ABVGDEZIJKLMNOPRSTUFXCY/"`
  102.             translit_file_name=${translit_file_name//ч/ch};
  103.             translit_file_name=${translit_file_name//Ч/CH} translit_file_name=${translit_file_name//ш/sh};
  104.             translit_file_name=${translit_file_name//Ш/SH} translit_file_name=${translit_file_name//ё/jo};
  105.             translit_file_name=${translit_file_name//Ё/JO} translit_file_name=${translit_file_name//ж/zh};
  106.             translit_file_name=${translit_file_name//Ж/ZH} translit_file_name=${translit_file_name//щ/sh};
  107.             # translit_file_name=${translit_file_name///SH\'}
  108.                                                            translit_file_name=${translit_file_name//э/je};
  109.             translit_file_name=${translit_file_name//Э/JE} translit_file_name=${translit_file_name//ю/ju};
  110.             translit_file_name=${translit_file_name//Ю/JU} translit_file_name=${translit_file_name//я/ja};
  111.             translit_file_name=${translit_file_name//Я/JA} translit_file_name=${translit_file_name//ъ/};
  112.             translit_file_name=${translit_file_name//ъ/} translit_file_name=${translit_file_name//ь/};
  113.             translit_file_name=${translit_file_name//Ь/}
  114.             nname=$translit_file_name
  115.         fi     
  116.         if ! [ -f "$nname"."$ext" ]; then
  117.             mv "$x" "$nname"."$ext"
  118.         fi
  119.     fi
  120. done
  121. }
  122. export -f REPLACE
  123.    
  124. export PROG='
  125. <window title="Пакетное переименование файлов 1.0.0">
  126. <vbox>
  127. <notebook labels="Переименовать|Заменить|Помощь">
  128. <vbox>
  129.       <hbox>
  130.       <frame Выберите каталог с файлами>
  131.        <hbox>
  132.          <entry accept="directory"><variable>DIRNAME1</variable></entry>
  133.          <button>
  134.            <input file stock="gtk-open"></input>
  135.            <action type="fileselect">DIRNAME1</action>
  136.          </button>
  137.        </hbox>
  138.       </frame>
  139.       </hbox>
  140.       <frame Новый префикс                       Текущий префикс>
  141.        <hbox>
  142.          <entry>
  143.            <variable>NEWNAME</variable>
  144.          </entry>
  145.          <entry>
  146.            <variable>CURRENTNAME</variable>
  147.          </entry>
  148.        </hbox>    
  149.        <text xalign="0">
  150.          <label>При наличии данных в поле "Текущий префикс" поле "Нумерация файлов от" из алгоритма переименования исключается. Используйте для сохранения оригинальной нумерации фотоснимков.</label>
  151.        </text>    
  152.      </frame>
  153.      <frame Нумерация файлов от>
  154.        <hbox>
  155.          <entry>
  156.            <variable>NUMBER</variable>
  157.            <default>1000</default>
  158.          </entry>
  159.        </hbox>        
  160.      </frame>
  161.       <frame Путь сохранения>
  162.        <hbox>
  163.          <entry accept="directory"><variable>FOLDER</variable></entry>
  164.          <button>
  165.            <input file stock="gtk-open"></input>
  166.            <action type="fileselect">FOLDER</action>
  167.          </button>
  168.         </hbox>
  169.        <text xalign="0">
  170.          <label>Для пакетного переименования файлов, оставьте поле пустым, либо, укажите полный путь к другому каталогу, для сохранения в нем, переименованых копий.</label>
  171.        </text>
  172.       </frame>
  173.       <hbox>  
  174.         <button>
  175.             <label>Переименовать</label>
  176.             <action>RENAME</action>
  177.             <action>Clear:RENAME</action>
  178.         </button>
  179.         <button>
  180.             <label>Выход</label>
  181.         </button>
  182.       </hbox>
  183.  </vbox>
  184.  <vbox>
  185.     <hbox>
  186.       <frame Выберите каталог с файлами>
  187.        <hbox>
  188.          <entry accept="directory"><variable>DIRNAME2</variable></entry>
  189.          <button>
  190.            <input file stock="gtk-open"></input>
  191.            <action type="fileselect">DIRNAME2</action>
  192.          </button>
  193.        </hbox>
  194.       </frame>
  195.       </hbox>
  196.       <frame Найти                                       Заменить>
  197.        <hbox>
  198.          <entry>
  199.            <variable>F1</variable>
  200.          </entry>
  201.          <entry>
  202.            <variable>R1</variable>
  203.          </entry>
  204.        </hbox>    
  205.        <text xalign="0">
  206.          <label>Если в поле "Заменить" отсутствует элемент замены, производится склейка.</label>
  207.        </text>          
  208.        </frame>  
  209.        <frame Дополнительно>
  210.        <checkbox>
  211.            <label>удалить специальные символы и знаки</label>
  212.            <variable>H1</variable>
  213.            <default>no</default>
  214.        </checkbox>      
  215.        <checkbox>
  216.            <label>исключить пробелы (склейка)</label>
  217.            <variable>S1</variable>
  218.            <default>no</default>
  219.        </checkbox>  
  220.        <checkbox>
  221.            <label>заменить пробелы на 0x5F (hex)</label>
  222.            <variable>P1</variable>
  223.            <default>no</default>
  224.        </checkbox>
  225.        <checkbox>
  226.            <label>нижний регистр в расширении файла</label>
  227.            <variable>P2</variable>
  228.            <default>no</default>
  229.        </checkbox>    
  230.        <checkbox>
  231.            <label>нижний регистр в имени файла</label>
  232.            <variable>P3</variable>
  233.            <default>no</default>
  234.        </checkbox>  
  235.        <checkbox>
  236.            <label>транслит</label>
  237.            <variable>T1</variable>
  238.            <default>no</default>
  239.        </checkbox>      
  240.      </frame>    
  241.      <hbox>  
  242.         <button>
  243.             <label>Заменить</label>
  244.             <action>REPLACE</action>
  245.             <action>Clear:REPLACE</action>
  246.         </button>
  247.         <button>
  248.             <label>Выход</label>
  249.         </button>
  250.        </hbox>  
  251.  </vbox>  
  252.  <vbox>
  253.   <text space-fill="true">
  254.   <label>"   "</label>
  255.   </text>
  256.   <text space-fill="true">
  257.   <label>GTK 3</label>
  258.   </text>
  259.   <text space-fill="true">
  260.   <label>Пакетное переименование файлов</label>
  261.   </text>
  262.   <text space-fill="true">
  263.   <label>Batch rename files</label>
  264.   </text>
  265.   <text space-fill="true">
  266.   <label>версия 1.0.0</label>
  267.   </text>  
  268.   <text space-fill="true">
  269.   <label>"   "</label>
  270.   </text>    
  271.   <text space-fill="true">
  272.   <label>Скрипт предназначен для пакетного переименования</label>
  273.   </text>  
  274.   <text space-fill="true">
  275.   <label>графических файлов с цифровых фотокамер.</label>
  276.   </text>    
  277.   <text space-fill="true">
  278.   <label>Имеет ряд функций, позволяющих использование</label>
  279.   </text>    
  280.   <text space-fill="true">
  281.   <label>в других, отличных от заявленных выше целях.</label>
  282.   </text>
  283.   <text space-fill="true">
  284.   <label>" "</label>
  285.   </text>
  286.  </vbox>
  287. </notebook>
  288. </vbox>
  289. </window>
  290. '
  291.  
  292. gtkdialog3 --program PROG > /dev/null
RAW Paste Data