for WhatFile in $(find $Downloads -regex ".*\.\(mkv\|m4v\|mp4\|ts\|avi\)" -and -mmin +30 | sort -r );
do
// извлекаем название найденного файла
WhatFileName=$(basename "$WhatFile" )
echo "$WhatFileName"
// извлекаем папку найденного файла
WhatFolder=$(dirname "$WhatFile" )
echo "$WhatFolder"
// извлекаем папку найденного файла
#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
пришлось начать переезд на WSL2 Ubuntu 20.04
Столкнулся с первой ошибкой. Ругается на "for RenameFile in "${WhatFile[@]}"; do"
/mnt/c/Users/Bolshukhin_roman/Script/Media.sh: 28: [[: not found
cat -n скрипт
x="IFS";IFS=$"";
x="$IFS";IFS=$'\n';
#!/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 Нет файлов для обработки
Нет файлов для обработки
type bash
x="$IFS";IFS=$'\n';for WhatFile in $(find $Downloads -regex ".*\.\(mkv\|m4v\|mp4\|ts\|avi\)" -and -mmin +30 | sort -r );
do
IFS="$x"
for WhatFile in "$(find $Downloads -regex '.*\.\(mkv\|m4v\|mp4\|ts\|avi\)' -and -mmin +30 | sort -r )";
зачем мне удалять ваш пост вместе с моим ответом ?
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 Возвращает точку. Как убрать? Спасибо
.
./путь/к/файлу
#!/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
#!/bin/bash
# #папка загрузки
# Downloads=(/volume1/Media/Downloads )
# #папка фильмы
# FilmFolder=(/volume1/Media/Shared_Videos/Films )
# #папка видео файлов
# VideosFolder=(/volume1/Media/Shared_Videos )
# #файл с шаблоном замен
# Renamer=(/volume1/Media/Software/Synology/rename.txt)
# #!!! скобки используются недмного для другого, а именно для массивов - (элемент1 элемент2 элемент3)
# #!!! см. https://devhints.io/bash#arrays
# #!!! а для обьявления переменных достаточно будет:
DIR="/volume1/Media" # базовая папка
Downloads="$DIR/Downloads" # папка загрузки
VideosFolder="$DIR/Shared_Videos" # папка фильмы
FilmFolder="$DIR/Shared_Videos/Films" # папка видео файлов
Renamer="$DIR/Software/Synology/rename.txt" # файл с шаблоном замен
x="IFS";IFS=$'\n';for WhatFile in $(find $Downloads -regex '.*\.\(mkv\|m4v\|mp4\|ts\|avi\)' -and -mmin +30 | sort -r );
do
#!!! IFS как я писал выше лучше всё же использовать не внутри $(), а в цикле или за ним.
#!!! так как область видимости в $() замкнута и обратное преобразование IFS не будет глобальным.
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
#!!! код во многом дублирует продыдущий if... что в принципе можно было бы вынести в отдельную фцнкцию
#переименовываем папку
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
Так вот, скрипт переименовывает 30-ти минутные и перемещает их, захватывая 29-минутные, которые не обработаны.
#!/bin/bash
set -o xtrace
x="IFS";IFS=$'\n';
x="$IFS";IFS=$'\n';
файл "Название какого-то файла.mkv" $WhatFile возвращает в виде "Название" , отрезая всё, что есть после первого пробела
for WhatFile in $(...)
лучше использовать конструкцию find ... -print0 | xargs -0 ...
. Т.е.find $Downloads -regex ".*\.\(mkv\|m4v\|mp4\|ts\|avi\)" -and -mmin +30 -print0 | sort -zr | xargs -0 -I\{} bash -c '
WhatFile=\{}
// извлекаем название найденного файла
WhatFileName=$(basename "$WhatFile" )
echo "$WhatFileName"
// извлекаем папку найденного файла
WhatFolder=$(dirname "$WhatFile" )
echo "$WhatFolder"
// извлекаем папку найденного файла
#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
'
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 ]]