Where does FileBot store the "Copy to" directory string?
Where does FileBot store the "Copy to" directory string?
I am running the AMC script. Before a file is COPY from [/path/to/original/file] to [/path/to/renamed/file] is that final destination path stored in an argument that I can use?
Do I have access to the argument containing the name of the directory where it will be stored after FileBot has decided how to rename it but before it has been copied there?
I want to use that information for a shell script.
Do I have access to the argument containing the name of the directory where it will be stored after FileBot has decided how to rename it but before it has been copied there?
I want to use that information for a shell script.
Re: Where does FileBot store the "Copy to" directory string?
You can write your own "copy to" shell script and do your own pre-processing and post-processing there as you see fit:
viewtopic.php?t=4915
The -exec option is more suitable if you just want to call a shell script on newly processed files:
viewtopic.php?t=11078
viewtopic.php?t=4915
The -exec option is more suitable if you just want to call a shell script on newly processed files:
viewtopic.php?t=11078
Please read the FAQ and How to Request Help.
Re: Where does FileBot store the "Copy to" directory string?
Thanks for the speedy response.
Sorry, I wasn't clear. Let's say AMC script has done its job and found a match and knows what the new directory name will be. Is that something that I can use after it has Copied?
First my shell script runs filebot fn:amc
Next it runs another command to find non-english subtitles, but because I don't know the exact path for the new movie directory yet, the find command I run looks inside /Movies instead of /Movies/Movie_Name_Date. Searching the whole /Movies directory is unnecessary since it has been searched before.
Thank you.
Sorry, I wasn't clear. Let's say AMC script has done its job and found a match and knows what the new directory name will be. Is that something that I can use after it has Copied?
First my shell script runs filebot fn:amc
Next it runs another command to find non-english subtitles, but because I don't know the exact path for the new movie directory yet, the find command I run looks inside /Movies instead of /Movies/Movie_Name_Date. Searching the whole /Movies directory is unnecessary since it has been searched before.
Thank you.
Re: Where does FileBot store the "Copy to" directory string?
If you want to run a custom shell script on all the folders where we have newly copied files, then that would look like this:
Your /path/to/script.sh is then called multiple times for each unique {folder} value, which is available inside your script via the $1 argument variable.
Code: Select all
-exec /path/to/script.sh {folder}
Please read the FAQ and How to Request Help.
Re: Where does FileBot store the "Copy to" directory string?
It takes me hours and sometimes days to figure this stuff out... and that's with your help.
My torrent client is set up to run a shell script which contains my filebot commands. My "on torrent completion run external program" commands in the client are:
I am trying to add the destination path to this find/remove command inside my existing shell script. I played around with the idea you presented but had bad results.
I added an additional --action command to run another script but it ran for both --def MovieFormat and --def SeriesFormat . I don't think we can have two --action commands?
In my script the "{$1}" argument variable is --def "ut_title"="${1}" , which is the original title of the movie, not the FileBot corrected title and newly created directory.
According to the page you link to above the source path is $1 and the destination is $2
My torrent client is set up to run a shell script which contains my filebot commands. My "on torrent completion run external program" commands in the client are:
Code: Select all
/Users/john/.filebot/scripts/qBT_e-program.sh "%N" "%L" "%F" "%R" "%D" "%C" "%Z" "%T" "%I" "%G"
I added an additional --action command to run another script but it ran for both --def MovieFormat and --def SeriesFormat . I don't think we can have two --action commands?
In my script the "{$1}" argument variable is --def "ut_title"="${1}" , which is the original title of the movie, not the FileBot corrected title and newly created directory.
According to the page you link to above the source path is $1 and the destination is $2
Code: Select all
!/bin/bash
{
filebot -script fn:amc --output "/Volumes/PlexMedia/PlexServer_1" \
--action copy \
--conflict index -non-strict \
--log-file amc.log \
--def "ut_kind"="multi" \
--def "ut_title"="${1}" \
--def "ut_label"="${2}" \
--def "ut_tags"="${10}" \
--def "ut_dir"="${3}" \
--def "ut_rpath"="${4}" \
--def "ut_spath"="${5}" \
--def "ut_files"="${6}" \
--def "ut_bytes"="${7}" \
--def "ut_track"="${8}" \
--def "ut_info"="${9}" \
--def excludeList="/Users/john/.filebot/amc_excludes.txt" \
--def pushover=xxx \
--def unsorted=y \
--def music=y \
--def skipExtract=y \
--def seriesFormat="/Volumes/SeedDrive/PlexServer_2/{plex.derive{' {thetvdb-'}{id}{'}'}{' - ['+allOf{tags}{vf}{vs}{crc32}.join(' ')}{']'}}{if (dc > 1) '.'+di}" \
--def movieFormat="/Volumes/PlexMedia/PlexServer_1/{plex.derive{' {imdb-'}{imdbid}{'}'}{' ['+allOf{tags}{audio.language}{if ('Documentary' in genres)'[doc]'}{info:video[0].displayAspectRatioString.colon('"∶"').replace('?', '')}{ws}{vf}{vs}{vc}{crc32}.join(' ')}{']'}}{if (dc > 1) '.'+di}" \
"ut_dir"="${3}" "ut_title"="${1}" "ut_label"="${2}"
}
#this is where I do the find... Add {$1} at the end of the path here?
{
find /Volumes/PlexMedia/PlexServer_1/Movies -type f -iname "*.srt" | \
grep -v \\.eng | \
grep -v "].srt" | \
while read -r file; do trash -F "$file";done;
}
{
DATEVAR=$(date '+%Y_%m_%d_%H:%M:%S'); echo "$DATEVAR ""${1}""" >> ~/Desktop/qbtscriptresult.txt
}
Re: Where does FileBot store the "Copy to" directory string?
1.
2.
Your post-process script is just deleting *.srt files, so that'd be a rather straight-forward -exec use case. You'll want to refactor that into it's own standalone script and then have filebot call it via -exec on the destination folder as explained above.
Here's what the call stack would look like:
1. qBT calls your qBT_e-program.sh
1.1. qBT_e-program.sh calls filebot
1.1.1. filebot -exec calls your delete-srt-files.sh passing along the destination {folder} as Argument $1
1.1.1.1. delete-srt-files.sh calls find "$1" ...
e.g.
e.g. delete-srt-files.sh
I see. So you want a process called by your shell script to be able to set variables within the context of the calling shell script? AFAIK, that is fundamentally conceptually not possible since a parent processes cannot communicate with a child processes on this level of detail. There is standard IO though. Your shell script can always parse the standard output of the filebot process though, and then set variables accordingly.
2.
Your post-process script is just deleting *.srt files, so that'd be a rather straight-forward -exec use case. You'll want to refactor that into it's own standalone script and then have filebot call it via -exec on the destination folder as explained above.
Here's what the call stack would look like:
1. qBT calls your qBT_e-program.sh
1.1. qBT_e-program.sh calls filebot
1.1.1. filebot -exec calls your delete-srt-files.sh passing along the destination {folder} as Argument $1
1.1.1.1. delete-srt-files.sh calls find "$1" ...
e.g.
Code: Select all
-exec /path/to/delete-srt-files.sh {folder}
Code: Select all
#!/bin/sh -xu
find "$1" # JUST PRINT FILE PATHS FOR TESTING
Please read the FAQ and How to Request Help.
Re: Where does FileBot store the "Copy to" directory string?
Thank you. The test worked. The script was called and there was output in my txt log.
However, it's not finding and removing subtitles as a script.
I think I need to add a "/" to the argument? So it treats the the end of the path as a directory and not a file?
Right now the path that is printed using $1 looks like this: (using a different example)
Shouldn't it look like this:
to search for content inside that directory.
Or maybe the find command needs a quoted path because of the spaces in the path?
I used #!/bin/bash for the shebang and I didn't use -u flag. I don't think that works on macOS with bash or sh
The argument has to be double quoted because the path has spaces.
Code: Select all
#!/bin/bash
#find "$1" >> ~/Desktop/SsubDeletetest.txt
Code: Select all
/Volumes/SeedDrive/PlexServer_2/TV Shows/Last Week Tonight with John Oliver/Season 08
/Volumes/SeedDrive/PlexServer_2/TV Shows/Last Week Tonight with John Oliver/Season 08/Last Week Tonight with John Oliver - S08E01 - Episode 210 {thetvdb-278518} - [720p WEB-DL B0D70BE9].mkv
/Volumes/SeedDrive/PlexServer_2/TV Shows/Last Week Tonight with John Oliver/Season 08/Last Week Tonight with John Oliver - S08E02 - Episode 211 {thetvdb-278518} - [720p WEB-DL 53A2A391].mkv
/Volumes/SeedDrive/PlexServer_2/TV Shows/Last Week Tonight with John Oliver/Season 08/Last Week Tonight with John Oliver - S08E03 - Episode 212 {thetvdb-278518} - [720p WEB-DL 4744E726].mkv
/Volumes/SeedDrive/PlexServer_2/TV Shows/Last Week Tonight with John Oliver/Season 08/Last Week Tonight with John Oliver - S08E04 - Episode 213 {thetvdb-278518} - [720p WEB-DL 2A3AC986].mkv
I think I need to add a "/" to the argument? So it treats the the end of the path as a directory and not a file?
Code: Select all
"$1/"
Code: Select all
/Volumes/PlexMedia/PlexServer_1/Movies/Sin Nombre (2009)
Code: Select all
/Volumes/PlexMedia/PlexServer_1/Movies/Sin Nombre (2009)/
Or maybe the find command needs a quoted path because of the spaces in the path?
I used #!/bin/bash for the shebang and I didn't use -u flag. I don't think that works on macOS with bash or sh
The argument has to be double quoted because the path has spaces.
Code: Select all
'"$1"'
Re: Where does FileBot store the "Copy to" directory string?
I have been working on this for quite awhile and couldn't get the second script to run. I finally figured out how to log the shell script process and have useful information to share. I can PM you the err.txt?rednoah wrote: ↑07 Mar 2021, 04:44
Here's what the call stack would look like:
1. qBT calls your qBT_e-program.sh
1.1. qBT_e-program.sh calls filebot
1.1.1. filebot -exec calls your delete-srt-files.sh passing along the destination {folder} as Argument $1
1.1.1.1. delete-srt-files.sh calls find "$1" ...
e.g.e.g. delete-srt-files.shCode: Select all
-exec /path/to/delete-srt-files.sh {folder}
Code: Select all
#!/bin/sh -xu find "$1" # JUST PRINT FILE PATHS FOR TESTING
The -exec command seems to running properly. The directory "/Volumes/PlexMedia/PlexServer_1" does exist but that is not where we're supposed to be running the script. It supposed to be run on "/Volumes/PlexMedia/PlexServer_1/Movies/CurrentDirectory"
I am getting results from the "1.1.1.1." script using the find command you suggested above. Which would indicate that it's being called and run on the correct path. I am not sure why the error. It looks like the -exec command is getting the value from "ut_dir"="${3}".
Do I have the -exec command in the wrong place in the filebot script? Where should it be?
According to the error output:
Code: Select all
[2021-03-28 18:40:57.330] Cannot run program "/Users/john/.filebot/scripts/remove_non-english_subtitles.sh" (in directory "/Volumes/PlexMedia/PlexServer_1"): error=2, No such file or directory
[2021-03-28 18:40:57.336] Processed 26 files
[2021-03-28 18:40:57.342] Sending Pushover notification
[2021-03-28 18:40:58.247] Done ヾ(@⌒ー⌒@)ノ
Code: Select all
#!/bin/bash
set -x
{
filebot -script fn:amc --output "/Volumes/PlexMedia/PlexServer_1" \
--action copy \
--conflict index -non-strict \
--log-file amc.log \
--def "ut_kind"="multi" \
--def "ut_title"="${1}" \
--def "ut_label"="${2}" \
--def "ut_tags"="${10}" \
--def "ut_dir"="${3}" \
--def "ut_rpath"="${4}" \
--def "ut_spath"="${5}" \
--def "ut_files"="${6}" \
--def "ut_bytes"="${7}" \
--def "ut_track"="${8}" \
--def "ut_info"="${9}" \
--def excludeList="/Users/john/.filebot/amc_excludes.txt" \
--def pushover=xxxx \
--def unsorted=y \
--def music=y \
--def skipExtract=y \
--def seriesFormat="/Volumes/SeedDrive/PlexServer_2/{plex.derive{' {thetvdb-'}{id}{'}'}{' - ['+allOf{tags}{vf}{vs}{crc32}.join(' ')}{']'}}{if (dc > 1) '.'+di}" \
--def movieFormat="/Volumes/PlexMedia/PlexServer_1/{plex.derive{' {imdb-'}{imdbid}{'}'}{' ['+allOf{tags}{audio.language}{if ('Documentary' in genres)'[doc]'}{info:video[0].displayAspectRatioString.colon('"∶"').replace('?', '')}{ws}{vf}{vs}{vc}{crc32}.join(' ')}{']'}}{if (dc > 1) '.'+di}" \
"ut_title"="${1}" "ut_label"="${2}" "ut_dir"="${3}" -exec /Users/john/.filebot/scripts/remove_non-english_subtitles.sh {folder}
} 2>&1 >> /Users/john/Desktop/qbt_e-program_exec_results.txt
Re: Where does FileBot store the "Copy to" directory string?
Does remove_non-english_subtitles.sh exist? Is it executable? Did you test remove_non-english_subtitles.sh independently of the amc script beforehand?
You can try other commands that can't fail for comparison, and then expand step by step from there:
Code: Select all
Cannot run program "/Users/john/.filebot/scripts/remove_non-english_subtitles.sh" (in directory "/Volumes/PlexMedia/PlexServer_1"): error=2, No such file or directory
You can try other commands that can't fail for comparison, and then expand step by step from there:
Code: Select all
-exec echo {f}
Please read the FAQ and How to Request Help.