• Почему не срабатывает CRON?

    @skyspirit Автор вопроса
    AUser0, через терминал работает, через cron - нет
    /bin/bash -c "test -f /mnt/c/Users/user1/Script/Media.sh && /mnt/c/Users/user1/Script/Media.sh >>/mnt/c/Users/user1/Script/Media-cron.txt"
  • Почему не срабатывает CRON?

    @skyspirit Автор вопроса
    ://$ sudo crontab -u root -l
    # Edit this file to introduce tasks to be run by cron.
    #
    # Each task to run has to be defined through a single line
    # indicating with different fields when the task will be run
    # and what command to run for the task
    #
    # To define the time you can provide concrete values for
    # minute (m), hour (h), day of month (dom), month (mon),
    # and day of week (dow) or use '*' in these fields (for 'any').
    #
    # Notice that tasks will be started based on the cron's system
    # daemon's notion of time and timezones.
    #
    # Output of the crontab jobs (including errors) is sent through
    # email to the user the crontab file belongs to (unless redirected).
    #
    # For example, you can run a backup of all your user accounts
    # at 5 a.m every week with:
    # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
    #
    # For more information see the manual pages of crontab(5) and cron(8)
    #
    # m h dom mon dow command
    */5 * * * * /mnt/c/Users/bolshukhin_roman/Script/Media.sh >> /mnt/c/Users/bolshukhin_roman/Script/Media-cron.txt

    крон в лог что пишет?


    ничего не пишет, не создается лог

    sudo chmod ugo+x /mnt/c/Users/bolshukhin_roman/Script/Media.sh

    не помогло
  • Почему не берутся пробелы в bash переменной?

    @skyspirit Автор вопроса
    xotkot, sudo bash /mnt/c/Users/Bolshukhin_roman/Script/Media.sh
  • Почему не берутся пробелы в bash переменной?

    @skyspirit Автор вопроса
    xotkot,

    #!/bin/bash
    #stat -c %y "$entry"
    #%y   time of last modification, human-readable
    #date -r <filename>
    
    
    set -o xtrace
    
    Dir="/mnt/d" # корневая папка & всех медиа 
    Downloads="$Dir/Downloads" # папка загрузки
    FilmFolder="$Dir/Films" # папка фильмы
    Renamer="/mnt/c/Users/bolshukhin_roman/rename.txt" # файл с шаблоном замен
    #for run in {1..10}; do
    x="$IFS";IFS=$'\n';for WhatFile in $(find $Downloads -regex '.*\.\(mkv\|m4v\|mp4\|ts\|avi\)' -and -mmin +30 | sort -r  );
    do
    
    IFS="$x"
    	#echo $WhatFile
    	#извлекаем название найденного файла
    	WhatFileName=$(basename "$WhatFile" )
    	#echo $WhatFileName
    	
    	#извлекаем папку найденного файла
    	WhatFolder=$(dirname "$WhatFile" )
    	#echo $WhatFolder
    
    	#переименовываем файл
    	if [[ -n "$WhatFileName" ]]
    then
    		for RenameFile in "${WhatFile[@]}"; do
    		WhatRenameFile=$( echo "$WhatFileName" |
    		sed -f "$Renamer" ) ; 
    			if [ "$WhatFileName" != "$WhatRenameFile" ]; then
    				echo "переименовываем файл из $WhatFileName в $WhatRenameFile"
    				mv -fv "$WhatFile" "$WhatFolder"/"$WhatRenameFile"
    				echo "пауза 2 секунды"
    				sleep 2s
    			#else 
    				#echo "Файл соответствует правилам "$WhatFileName""
    			fi
    		#echo $WhatRenameFile
    		done
    	fi
      
    done
    
    
    
    #sleep 1m
    #done
    
    	#переименовываем папку
    	if [[ -n "$WhatFolder" ]]
    	then
    		for RenameFolder in "${WhatFolder[@]}"; do
    		WhatRenameFolder=$( echo "$WhatFolder" |
    		sed -f "$Renamer" ) ; 
    			if [[ "$WhatFolder" != "$WhatRenameFolder" ]]
    			then
    				echo "переименовываем папку из $WhatFolder в $WhatRenameFolder"
    				mv -fv  "$WhatFolder" "$WhatRenameFolder"
    				echo "пауза 2 секунды"
    				sleep 2s
    			#else 
    				#echo "Папка соответствует правилам "$WhatFolder""
    			fi
    				#echo $WhatRenameFolder
    		done
    	fi
    
    #фильм или серал?
    	
    if [[ -n "$WhatFile" ]]
     then
    		if [[ "$WhatFolder" == "$Downloads" ]] 
    		then
    			echo "Обнаружен Фильм"
    			echo mv -fv "$WhatFile" "$FilmFolder"
    			echo "Переместили в Фильмы"
    			else 
    				#проверяем в сериалах файлы
    				echo "ищем сериалы"
    						#проверяем в сериалах файлы
    						if [[ "$WhatFile" != "$WhatRenameFile" ]]
    							then 
    								Serials_destination=$(find "$VideosFolder" -type f -iname "$WhatRenameFile" | sed -n '1p' );
    								
    						else
    								Serials_destination=$(find "$VideosFolder" -type f -iname "$WhatFileName" | sed -n '1p' );
    						fi
    				if [[ -n "$Serials_destination" ]]
    				then
    							#нашли в сериалах
    							echo $Serials_destination
    							#извлекаем название найденного файла в сериалах
    							Serials_file_destination=$(basename "$Serials_destination")
    							echo $Serials_file_destination
    							#извлекаем папку найденного файла в сериалах
    							Serials_folder_destination=$(/mnt/dname "$Serials_destination" )
    							echo $Serials_folder_destination
    							#переименовали или нет?
    							if [[ "$WhatFolder" != "$WhatRenameFolder" ]]
    								then
    									mv -fv "$WhatRenameFolder"/* "$Serials_folder_destination"
    									echo "пауза 1 минуту"						
    									sleep 1m 
    									echo "удаление папки $WhatFolder"
    									rm -Rfv "$WhatRenameFolder"
    								else 
    									mv -fv  "$WhatFolder"/* "$Serials_folder_destination"
    									echo "пауза 1 минуту"						
    									sleep 1m 
    									echo "удаление папки $WhatFolder"
    									rm -Rfv "$WhatFolder"
    							fi		
    					else
    						#не нашли в сериалах
    							WhatFolderNumber=$(find $WhatFolder -type f | wc -l)
    							if (( "$WhatFolderNumber" > 1 )); then
    								echo $WhatFolderNumber
    								echo "В сериалах не найдено папки"
    								echo "перемещаем в сериалы что-то новое из "$WhatFolder" в "$VideosFolder/Serials/""
    								mv -fv "$WhatFolder" "$VideosFolder/Serials/"
    							fi
    				fi
    		fi
    else 
    			echo "Нет файлов для обработки"
    	fi


    вывод
    + Dir=/mnt/d/
    + Downloads=/mnt/d//Downloads
    + FilmFolder=/mnt/d//Films
    + Renamer=/mnt/c/Users/bolshukhin_roman/rename.txt
    + x=
    
    + IFS=$\n
    + find /m t/d//Dow loads+  -regex .*\.\(mkv\|m4v\|mp4\|ts\|avi\) -and -mmin +30
    sort -r
    find: ‘/m’: No such file or directory
    find: ‘t/d//Dow’: No such file or directory
    find: ‘loads’: No such file or directory
    + [[ -n  ]]
    /mnt/c/Users/Bolshukhin_roman/Script/Media.sh: 53: [[: not found
    + [[ -n  ]]
    /mnt/c/Users/Bolshukhin_roman/Script/Media.sh: 73: [[: not found
    + echo Нет файлов для обработки
    Нет файлов для обработки
  • Почему не берутся пробелы в bash переменной?

    @skyspirit Автор вопроса
    xotkot , пришлось начать переезд на WSL2 Ubuntu 20.04
    Столкнулся с первой ошибкой. Ругается на "for RenameFile in "${WhatFile[@]}"; do"
    x="IFS";IFS=$"";for WhatFile in $(find $Downloads -regex '.*\.\(mkv\|m4v\|mp4\|ts\|avi\)' -and -mmin +30 | sort -r  );
    do
    
    IFS="$x"
    	#echo $WhatFile
    	#извлекаем название найденного файла
    	WhatFileName=$(basename "$WhatFile" )
    	#echo $WhatFileName
    	
    	#извлекаем папку найденного файла
    	WhatFolder=$(dirname "$WhatFile" )
    	#echo $WhatFolder
    
    	#переименовываем файл
    	if [[ -n "$WhatFileName" ]]
    then
    		for RenameFile in "${WhatFile[@]}"; do
    		WhatRenameFile=$( echo "$WhatFileName" |
    		sed -f "$Renamer" ) ; 
    			if [ "$WhatFileName" != "$WhatRenameFile" ]; then
    				echo "переименовываем файл из $WhatFileName в $WhatRenameFile"
    				mv -fv "$WhatFile" "$WhatFolder"/"$WhatRenameFile"
    				echo "пауза 2 секунды"
    				sleep 2s
    			#else 
    				#echo "Файл соответствует правилам "$WhatFileName""
    			fi
    		#echo $WhatRenameFile
    		done
    	fi
      
    done


    + Downloads=/mnt/d/Downloads
    + VideosFolder=/mnt/d/
    + FilmFolder=/mnt/d/Films
    + Renamer=/mnt/c/Users/bolshukhin_roman/rename.txt
    + x=IFS
    + IFS=$
    + find /mnt/d/Downloads -regex .*\.\(mkv\|m4v\|mp4\|ts\|avi\) -and -mmin +30
    + sort -r
    + IFS=IFS
    + basename /mnt/d/Downloads/The Edge.2010.x264.BDRip1080p.mkv
    /mnt/d/Downloads/Adventures of Rufus.The Fantastic Pet 2020 WEB-DL 1080p.mkv
    + WhatFileName=Adventures of Rufus.The Fantastic Pet 2020 WEB-DL 1080p.mkv
    + dirname /mnt/d/Downloads/The Edge.2010.x264.BDRip1080p.mkv
    /mnt/d/Downloads/Adventures of Rufus.The Fantastic Pet 2020 WEB-DL 1080p.mkv
    + WhatFolder=/mnt/d/Downloads/The Edge.2010.x264.BDRip1080p.mkv
    /mnt/d/Downloads
    + [[ -n Adventures of Rufus.The Fantastic Pet 2020 WEB-DL 1080p.mkv ]]
    /mnt/c/Users/Bolshukhin_roman/Script/Media.sh: 28: [[: not found
    + [[ -n /mnt/d/Downloads/The Edge.2010.x264.BDRip1080p.mkv
    /mnt/d/Downloads ]]
  • Почему не берутся пробелы в bash переменной?

    @skyspirit Автор вопроса
    xotkot, берет 1-29, условно говоря. Опять таки, не все файлы могут в этот диапазон попасть.
  • Почему не берутся пробелы в bash переменной?

    @skyspirit Автор вопроса
    xotkot
    Спасибо. Поправил. Из того, что заметил. Вылетает один баг: условие: в папке Downlods/Какой-то сериал/файлы.mkv могут быть файлы как поражающие в критерий 30 минут давности, так и файлы, которые оказались там 29 минут назад и не попадающие в критерий. Так вот, скрипт переименовывает 30-ти минутные и перемещает их, захватывая 29-минутные, которые не обработаны.

    Как с этим можно бороться?
  • Почему не берутся пробелы в bash переменной?

    @skyspirit Автор вопроса
    xotkot, спасибо. Благодаря Вам получилось сие: в папку Downloads скачиваются фильмы или сериалы через RSS. Дальше скрипт разбирает файлы на сериалы или фильмы. Если сериал новый - перемещает папку с ним, если существующий - добавляет серию и подчищает за собой. Если что-то не предусмотрел - буду признателен за "тык на ошибку / дополнение". Спасибо

    #!/bin/bash
    
    #папка загрузки
    Downloads=(/volume1/Media/Downloads )
    #папка фильмы
    FilmFolder=(/volume1/Media/Shared_Videos/Films )
    #папка видео файлов
    VideosFolder=(/volume1/Media/Shared_Videos )
    #файл с шаблоном замен
    Renamer=(/volume1/Media/Software/Synology/rename.txt)
    x="IFS";IFS=$'\n';for WhatFile in $(find $Downloads -regex '.*\.\(mkv\|m4v\|mp4\|ts\|avi\)' -and -mmin +30 | sort -r; IFS="$x" );
    do
    	#echo $WhatFile
    	#извлекаем название найденного файла
    	WhatFileName=$(basename "$WhatFile" )
    	#echo $WhatFileName
    	
    	#извлекаем папку найденного файла
    	WhatFolder=$(dirname "$WhatFile" )
    	#echo $WhatFolder
    
    	#переименовываем файл
    	if [ -n "$WhatFileName" ]; then
    		for RenameFile in "${WhatFile[@]}"; do
    		WhatRenameFile=$( echo "$WhatFileName" |
    		sed -f "$Renamer" ) ; 
    			if [ "$WhatFileName" != "$WhatRenameFile" ]; then
    				echo "переименовываем файл из $WhatFileName в $WhatRenameFile"
    				mv -fv "$WhatFile" "$WhatFolder"/"$WhatRenameFile"
    				echo "пауза 2 секунды"
    				sleep 2s
    			#else 
    				#echo "Файл соответствует правилам "$WhatFileName""
    			fi
    		#echo $WhatRenameFile
    		done
    	fi
      
    done
    
    	#переименовываем папку
    	if [ -n "$WhatFolder" ]; 
    	then
    		for RenameFolder in "${WhatFolder[@]}"; do
    		WhatRenameFolder=$( echo "$WhatFolder" |
    		sed -f "$Renamer" ) ; 
    			if [ "$WhatFolder" != "$WhatRenameFolder" ]; 
    			then
    				echo "переименовываем папку из $WhatFolder в $WhatRenameFolder"
    				mv -fv  "$WhatFolder" "$WhatRenameFolder"
    				echo "пауза 2 секунды"
    				sleep 2s
    			#else 
    				#echo "Папка соответствует правилам "$WhatFolder""
    			fi
    				#echo $WhatRenameFolder
    		done
    	fi
    
    #фильм или серал?
    	
    if [[ -n "$WhatFile" ]]
     then
    		if [[ "$WhatFolder" == "$Downloads" ]] 
    		then
    			echo "Обнаружен Фильм"
    			mv -fv "$WhatFile" "$FilmFolder"
    			echo "Переместили в Фильмы"
    			else 
    				#проверяем в сериалах файлы
    				echo "ищем сериалы"
    						#проверяем в сериалах файлы
    						Serials_destination=$(find "$VideosFolder" -type f -iname "$WhatFileName" | sed -n '1p' );
    				if [[ -n "$Serials_destination" ]]
    				then
    							echo $Serials_destination
    							#извлекаем название найденного файла в сериалах
    							Serials_file_destination=$(basename "$Serials_destination")
    							echo $Serials_file_destination
    							#извлекаем папку найденного файла в сериалах
    							Serials_folder_destination=$(dirname "$Serials_destination" )
    							echo $Serials_folder_destination
    							
    							#переименовали или нет?
    							if [[ "$WhatFolder" != "$WhatRenameFolder" ]]
    								then
    									mv -fv "$WhatRenameFolder"/* "$Serials_folder_destination"
    									echo "пауза 1 минуту"						
    									sleep 1m 
    									echo "удаление папки $WhatFolder"
    									rm -Rfv "$WhatRenameFolder"
    								else 
    									mv -fv  "$WhatFolder"/* "$Serials_folder_destination"
    									echo "пауза 1 минуту"						
    									sleep 1m 
    									echo "удаление папки $WhatFolder"
    									rm -Rfv "$WhatFolder"
    							fi		
    					else
    							echo "В сериалах не найдено папки"
    							echo "перемещаем в сериалы что-то новое в "$VideosFolder/Serials/$WhatFolder""
    							mv -fv "$WhatFolder" "$VideosFolder/Serials/"
    				fi
    		fi			
    	fi
  • Почему не берутся пробелы в bash переменной?

    @skyspirit Автор вопроса
    xotkot, СПАСИБО. Ещё один вопрос, с позволения.


    Serials_destination=$(find "$VideosFolder" -type f -iname "$WhatFileName" );
    if [ -n $Serials_destination ] ; then
    echo $Serials_destination
    #извлекаем название найденного файла в сериалах
    Serials_file_destination=$(basename "$Serials_destination")
    echo $Serials_file_destination
    #извлекаем папку найденного файла в сериалах
    Serials_folder_destination=$(dirname "$Serials_destination" )
    echo $Serials_folder_destination


    $Serials_folder_destination Возвращает точку. Как убрать? Спасибо
  • Почему не берутся пробелы в bash переменной?

    @skyspirit Автор вопроса
    xotkot
    Спасибо. А как сюда сделать так, чтобы find выводил по 1 результату, но циклом? А то вываливает всё, что найдет а потом это всё не переварить дальше...
  • Почему не берутся пробелы в bash переменной?

    @skyspirit Автор вопроса
    xotkot, файл "Название какого-то файла.mkv" $WhatFile возвращает в виде "Название" , отрезая всё, что есть после первого пробела
  • Как поправить поиск в BASH?

    @skyspirit Автор вопроса
    shurshur

    Всё круто,

    for WhatFile in $(find $Downloads -regex ".*\.\(mkv\|m4v\|mp4\|ts\|avi\)" -and -mmin +1 | sort -u )
    do
       #извлекаем название найденного файла
    WhatFileName=$(basename "$WhatFile")
    echo $WhatFileName
    #извлекаем папку найденного файла
    WhatFolder=$(dirname "$WhatFile")
    echo $WhatFolder
    #извлекаем папку найденного файла
    #WhatFolder=$(dirname "$WhatFile" | sed 's/\/volume1\/Media\/Downloads\///' )
    #echo WhatFolder $WhatFolder
    #переименование
    #файла
    	if [ -n "$WhatFileName" ]; then
    	WhatRenameFile=$( echo "$WhatFileName" |
    	sed -f "$Renamer" )
    		if [ "$WhatFileName" != "$WhatRenameFile" ]; then
    			echo "переименовываем файл из $WhatFileName в $WhatRenameFile"
    		mv -fv "$WhatFile" "$WhatFolder"/"$WhatRenameFile"
    	echo "пауза 2 секунды"
    		sleep 2s
    	else 
    		echo "Файл соответствует правилам "$WhatFileName""
    		fi
    	#echo $WhatRenameFile
    	fi
    done


    Как вывести в $WhatFileName первый найденный файл после выполнения скрипта выше?

    Спасибо
  • Как поправить работу sed?

    @skyspirit Автор вопроса
    xotkot, Спасибо, как вариант.
  • Как поправить работу sed?

    @skyspirit Автор вопроса
    xotkot,

    s/(//g;
    s/)//g;
    s/А/A/g;
    s/а/a/g;
    s/Б/B/g;
    s/б/b/g;
    s/В/V/g;
    s/в/v/g;


    И тд
  • Как поправить работу sed?

    @skyspirit Автор вопроса
    Lynn «Кофеман», в самом верху указано.
  • Как на Mac OS High Sierra добавить администратора?

    @skyspirit Автор вопроса
    Andrey Barbolin, нет, дома у родителей стоит. Вероятно, что-то понажимали, что теперь такое произошло. Не дает никуда войти и ничего не установить / ни сделать
  • Как на Mac OS High Sierra добавить администратора?

    @skyspirit Автор вопроса
    Andrey Barbolin, ну тут вообще нет администратора )
  • Как поправить find запрос?

    @skyspirit Автор вопроса
    Виктор, помогите, пожалуйста, разобраться с find

    Затея. В папке /путь/downloads скачивается всё подряд. Мне надо сделать разбор этого всего по условиям:

    1. Если в корень папки downloads и имеет расширения файлов .mkv, avi то переместить их в папку /путь/media/films
    2. Если скачивание произошло в подпапку* ( /путь/downloads/folder1/ ) то переместить их в папку /путь/media/serials

    *подпапка динамическая, названия создаются произвольно согласно тому сериалу, который скачивается.

    Спасибо
  • Как поправить find запрос?

    @skyspirit Автор вопроса
    Saboteur, он ищет без промежуточных папок (после Serials), как вижу по результатам. ТО ЕСТЬ, ищет /Serials/Folder1/Folder2/Folder3/ , но не выводит в результатах /Serials/Folder1/
  • Как оптимизировать Bash скрипт?

    @skyspirit Автор вопроса
    Saboteur,
    папка:
    было: /volume1/Geroev_Avenue_18/Shared_Videos/Serials/Петербургские тайны
    стало: /volume1/Geroev_Avenue_18/Shared_Videos/Serials/Peterbugskiye.tajny

    файл:
    было: /volume1/Geroev_Avenue_18/Shared_Videos/Serials/Петербургские тайны/Эпизод 10.ts
    стало: /volume1/Geroev_Avenue_18/Shared_Videos/Serials/Peterbugskiye.tajny/Epizod.10.ts

    Собственно, скрипт всё делает, только повторяет что поиск, что иные телодвижения, что в результате грузит систему. Один поиск и дальше разбор папок и/или файлов для переименования. А у меня как-то в лоб пока: отдельно ищем папку, отдельно файл