Revert files via the GUI/CLI - restored to a different folder

All your suggestions, requests and ideas for future development
Post Reply
seger85
Posts: 15
Joined: 15 Dec 2020, 10:52

Revert files via the GUI/CLI - restored to a different folder

Post by seger85 »

Hey,
First of all, thank you very much for the sensational programme, your commitment and support.

I have the following request:

You already offer the backup function, which refers to the history. Would it be possible to add an option to the backup menu in the GUI to set the source directory or the new destination directory before the actual backup?

In other words: AMC/Docker Container has detected something incorrect and already renamed it, and I want to manually undo this via the GUI, but it should be restored to a different folder with the original file name.

Why am I making this request?
I let AMC automatically detect and move everything via a container. Sometimes the source files are simply rubbish and something is detected that is not correct. But when I undo it, my automation immediately detects it again and reassigns it incorrectly. This is because it is restored to the watch folder. I deliberately do not have any locks in the watch folder; it should also process files that have already been processed again and again and overwrite my target library (because my new files are always of better quality).

I hope I have explained the context well and that the request is feasible and will also please others and you! If you have a solution to my challenge, I would be happy to accept it.

Many thanks,
Seger
Last edited by seger85 on 13 Jan 2026, 06:56, edited 1 time in total.
User avatar
rednoah
The Source
Posts: 24370
Joined: 16 Nov 2011, 08:59
Location: Taipei
Contact:

Re: Revert files via the GUI/CLI - restored to a different folder

Post by rednoah »

seger85 wrote: 13 Jan 2026, 00:23 I let AMC automatically detect and move everything via a container. Sometimes the source files are simply rubbish and something is detected that is not correct. But when I undo it, my automation immediately detects it again and reassigns it incorrectly. This is because it is restored to the watch folder.
:?: Are you not using the --def excludeList parameter? The rednoah/filebot:watcher container passes --def excludeList=".excludes" by default.


:idea: The amc script typically does not process the same file path twice. If you revert a file into your watch folder that may indeed trigger an amc script run but that file will then not be processed again.


e.g.

Console Output: Select all

$ filebot -script fn:amc input --output output --def excludeList=amc.excludes
...
Parameter: excludeList = amc.excludes
Argument[0]: input
Use excludes: output/amc.excludes (0)
...
[MOVE] from [input/Alias.1x01.mkv] to [output/TV Shows/Alias {tmdb-2046}/Season 01/Alias - S01E01 - Truth Be Told.mkv]
Processed 1 file
Done ヾ(@⌒ー⌒@)ノ...

Console Output: Select all

$ filebot -revert
...
Revert [output/TV Shows/Alias {tmdb-2046}/Season 01/Alias - S01E01 - Truth Be Told.mkv] to [input/Alias.1x01.mkv]
Reverted 1 file

Console Output: Select all

$ filebot -script fn:amc input --output output --def excludeList=amc.excludes
...
Parameter: excludeList = amc.excludes
Argument[0]: input
Use excludes: output/amc.excludes (1)
...
No files selected for processing
Done ¯\_(ツ)_/¯



EDIT
:idea: You can use the history script to query the history and then pass that along to a custom -exec command:

Console Output: Select all

$ filebot -script fn:history "/path/to/output" --filter "fn == /Alias - S01E01 - Truth Be Told/" -exec mv -v "{f}" "/path/to/{historic.f.name}"
/path/to/output/TV Shows/Alias {tmdb-2046}/Season 01/Alias - S01E01 - Truth Be Told.mkv -> /path/to/Alias.1x01.mkv
:idea: Please read the FAQ and How to Request Help.
seger85
Posts: 15
Joined: 15 Dec 2020, 10:52

Re: Revert files via the GUI/CLI - restored to a different folder

Post by seger85 »

seger85 wrote: 13 Jan 2026, 00:23
Why am I making this request?
I let AMC automatically detect and move everything via a container. Sometimes the source files are simply rubbish and something is detected that is not correct. But when I undo it, my automation immediately detects it again and reassigns it incorrectly. This is because it is restored to the watch folder. I deliberately do not have any locks in the watch folder; it should also process files that have already been processed again and again and overwrite my target library (because my new files are always of better quality).

Code: Select all

AMC_ENABLED: "1"
      AMC_INTERVAL: "20"
      AMC_INPUT_STABLE_TIME: "30"
      AMC_ACTION: "move"
      AMC_MATCH_MODE: "opportunistic"    # global opportunistic
      AMC_LANG: "German"
      AMC_CONFLICT: "override"

      # Ein Mount für Quelle & Ziel -> rename(2) / Instant-Move
      AMC_INPUT_DIR: "/media/Upload_Download/1 Download/1 Encodieren"

      # Ziel-Formate (Routing: Standard + Kids + Dokus)
      AMC_MOVIE_FORMAT: >-
        { f.path.contains('/2 Kinderfilme_Kinderserien/')
          ? '/media/- Kinderfilme'
          : (f.path.contains('/3 Doku_Filme_Doku_Serien/')
              ? '/media/- Filme_Serien_(Dokumentationen)'
              : '/media/- Filme') }/{collection.replaceAll(/[:|]/, " - ")}/{n.replaceAll(/[:|]/, " - ")}
        ({y}) {[vf]}/{n.replaceAll(/[:|]/, " - ")} ({y}) {[vf]}
      AMC_SERIES_FORMAT: >-
        { f.path.contains('/2 Kinderfilme_Kinderserien/')
          ? '/media/- Kinderserien'
          : (f.path.contains('/3 Doku_Filme_Doku_Serien/')
              ? '/media/- Filme_Serien_(Dokumentationen)'
              : '/media/- Serien') }/{n} ({y})/Staffel {s}/{n} - {s00e00} - {t} {[vf]}

      AMC_CUSTOM_OPTIONS: >-
        -non-strict
        -r
        --order Digital
        --file-filter "['1 Filme_Encodiert (Fertig)','1 Serien_Encodiert (Fertig)','11 Kinderfilme_Encodiert (Fertig)','11 Kinderserien_Encodiert (Fertig)','111 Dokumentationen_Filme_Encodiert (Fertig)','111 Dokumentationen_Serien_Encodiert (Fertig)'].contains(f.parentFile.name)"
        --filter "true"
        --def subtitles=n minFileSize=0
        unsorted=y
        unsortedFormat="/media/Upload_Download/1 Download/{file.name}"
        excludeList=/dev/null
        music=n
        ignore="(?i)(?:^|/)1_nicht_löschen\.lock$|(?:^|/)(Backup alt|@eaDir)(?:/|$)"
        exec="/config/scripts/post-hook.sh {quote f, historic.f}"
        movieDB=TheMovieDB
        seriesDB=TheTVDB
Wow, you've already replied, that's crazy :-). I'm translating our conversation, I hope I understand everything and that I'm also understandable and not too strange due to the translation :-).

I deliberately don't use the lock, as I wrote, I overwrite my files more often because I deliver better quality with the same input and I wanted to finalise manually sorted media as best I could.

Have I understood you correctly that I can achieve the redirection with a script? Does this script also work when I run "Reserve" via the GUI? Because the reversal and subsequent manual processing is usually carried out by users via the UI.

Thanks again for your help! Maybe you'll see something else in my AMC that you would do differently or better.

Thanks
Seger
User avatar
rednoah
The Source
Posts: 24370
Joined: 16 Nov 2011, 08:59
Location: Taipei
Contact:

Re: Revert files via the GUI/CLI - restored to a different folder

Post by rednoah »

:?: How do new and better files end up in the input folder yet don’t have a new unique file name? The file name typically includes video resolution, source medium, codec information, etc, so a new and better file would typically come with a different file name, higher resolution, BluRay source, better video codec, etc.


:idea: If you cannot use the file name to exclude previously processed files, then maybe some other logic might work better for your use case? Perhaps the last modified date?


:idea: I note that you are using a 3rd party docker container and not one of ours. This is important to know so that we’re on the same page.


:idea: Unfortunately, the revert function in the Desktop application cannot be modified.
:idea: Please read the FAQ and How to Request Help.
seger85
Posts: 15
Joined: 15 Dec 2020, 10:52

Re: Revert files via the GUI/CLI - restored to a different folder

Post by seger85 »

You're right with your question. Perhaps it's the very same file that I accidentally renamed twice and moved, because it's quicker to simply overwrite and move it than to manually sort through the actual misfilings and duplicate files afterwards.

Sometimes I also download a director's cut and the target file name always follows the same pattern for me, meaning that the file I have is the final version in my opinion. In other words, the name conversion in the target remains the same, the bitrate may be slightly lower, but it is a better version of the film for me.

Yes, you are absolutely right, and thank you for asking. I use jlesage/filebot:latest. Feel free to take a look at my configuration:

Code: Select all

version: "3.9"

services:
  filebot:
    image: jlesage/filebot:latest
    container_name: filebot
    restart: unless-stopped

    ports:
      - "5800:5800"
      # - "5900:5900"   # optional VNC-Client

    environment:
      TZ: Europe/Berlin
      USER_ID: "1030"
      GROUP_ID: "100"
      UMASK: "0022"

      # UI / VNC
      DISPLAY_WIDTH: "1920"
      DISPLAY_HEIGHT: "1080"
      VNC_PASSWORD: "password"

      # HTTPS & Web-Auth
      SECURE_CONNECTION: "1"
      WEB_AUTHENTICATION: "1"
      WEB_AUTHENTICATION_USERNAME: "User"
      WEB_AUTHENTICATION_PASSWORD: "password!!!"

      # EMBY & HA für post-hook.sh
      EMBY_HOST: "http://192.168.178.121:8096"
      EMBY_API_KEY: "APIKEY"
      HA_HOST: "http://192.168.178.122:8123"
      HA_TOKEN: "token"

      # Für Emby-Webhook
      INSTALL_PACKAGES: "curl"

      # NFS/XAttr
      FILEBOT_OPTS: "-DuseExtendedFileAttributes=false"

      # --- AMC (Polling) ---
      AMC_ENABLED: "1"
      AMC_INTERVAL: "20"
      AMC_INPUT_STABLE_TIME: "30"
      AMC_ACTION: "move"
      AMC_MATCH_MODE: "opportunistic"    # global opportunistic
      AMC_LANG: "German"
      AMC_CONFLICT: "override"

      # Ein Mount für Quelle & Ziel -> rename(2) / Instant-Move
      AMC_INPUT_DIR: "/media/Upload_Download/1 Download/1 Encodieren"

      # Ziel-Formate (Routing: Standard + Kids + Dokus)
      AMC_MOVIE_FORMAT: >-
        { f.path.contains('/2 Kinderfilme_Kinderserien/')
          ? '/media/- Kinderfilme'
          : (f.path.contains('/3 Doku_Filme_Doku_Serien/')
              ? '/media/- Filme_Serien_(Dokumentationen)'
              : '/media/- Filme') }/{collection.replaceAll(/[:|]/, " - ")}/{n.replaceAll(/[:|]/, " - ")}
        ({y}) {[vf]}/{n.replaceAll(/[:|]/, " - ")} ({y}) {[vf]}
      AMC_SERIES_FORMAT: >-
        { f.path.contains('/2 Kinderfilme_Kinderserien/')
          ? '/media/- Kinderserien'
          : (f.path.contains('/3 Doku_Filme_Doku_Serien/')
              ? '/media/- Filme_Serien_(Dokumentationen)'
              : '/media/- Serien') }/{n} ({y})/Staffel {s}/{n} - {s00e00} - {t} {[vf]}

      AMC_CUSTOM_OPTIONS: >-
        -non-strict
        -r
        --order Digital
        --file-filter "['1 Filme_Encodiert (Fertig)','1 Serien_Encodiert (Fertig)','11 Kinderfilme_Encodiert (Fertig)','11 Kinderserien_Encodiert (Fertig)','111 Dokumentationen_Filme_Encodiert (Fertig)','111 Dokumentationen_Serien_Encodiert (Fertig)'].contains(f.parentFile.name)"
        --filter "true"
        --def subtitles=n minFileSize=0
        unsorted=y
        unsortedFormat="/media/Upload_Download/1 Download/{file.name}"
        excludeList=/dev/null
        music=n
        ignore="(?i)(?:^|/)1_nicht_löschen\.lock$|(?:^|/)(Backup alt|@eaDir)(?:/|$)"
        exec="/config/scripts/post-hook.sh {quote f, historic.f}"
        movieDB=TheMovieDB
        seriesDB=TheTVDB

    volumes:
      - /srv/appdata/filebot:/config:rw
      - /mnt/media:/media:rw

      # --- GUI: eine Mount-Wurzel für Quelle+Ziel => echtes Move möglich ---
      - /mnt/media:/storage:rw


    # Ressourcen/Logging (dein Style)
    cpu_shares: 256
    cpus: "4.0"
    mem_reservation: 2g
    mem_limit: 3g
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

    networks: [edge]

networks:
  edge:
    external: true
The following was important to me when making my selection:
I want to be able to access it externally via GUI
It must have encryption
The GUI must be linked to the reserve function, i.e. I can see what the CLI has done and can undo it.
And probably many other reasons... haha.

:idea: If you cannot use the file name to exclude previously processed files, then maybe some other logic might work better for your use case? Perhaps the last modified date?
I have just corrected myself a little; sometimes I do actually just download the same one, which I cannot rule out either.

Can I perhaps turn off the loop and have it sort into two different folders according to defined errors? In other words, if it was the same file, move it to the recycle bin. If it was a non-match, move it to the defined location as in my script? This would prevent me from constantly moving files around and I would no longer overwrite duplicate files, but move them straight to the bin.

If you have any recommendations, solutions or improvements, I'm very open to them!

I am very grateful to you and think it's incredible what a service you offer!!!

Best regards
Seger
User avatar
rednoah
The Source
Posts: 24370
Joined: 16 Nov 2011, 08:59
Location: Taipei
Contact:

Re: Revert files via the GUI/CLI - restored to a different folder

Post by rednoah »

:idea: Well, if the new files generally have a relatively new time stamp, then you can probably add a few options to process only files that are less than a day old. If you revert a file, then that file would probably be already a few days old. I'm not sure how to do that within the context of the jlesage/filebot container, but as far as plain filebot commands are concerned, the --file-filter option will do the trick.


seger85 wrote: 13 Jan 2026, 09:44 If it was a non-match, move it to the defined location as in my script?
:idea: The --def unsortedFormat parameter allows you to define the target file path for unmatched files. You seem to be doing that already.


seger85 wrote: 13 Jan 2026, 09:44 Can I perhaps turn off the loop and have it sort into two different folders according to defined errors? In other words, if it was the same file, move it to the recycle bin.
:idea: The --conflict option allows you to control what happens when the target file path exists already, so instead of --conflict override you can set a different behaviour there, you can even have your own custom code come up with a new different file path:
viewtopic.php?t=12891


seger85 wrote: 13 Jan 2026, 09:44 Sometimes I also download a director's cut and the target file name always follows the same pattern for me.
:idea: You'd make your life a lot easier if you ensure a unique file name for each unique input file. If it's a Director's Cut, then add [Directors Cut] to the file name, thus ensuring a unique file name that's not on the exclude list yet. If you want to revert files via the GUI, then the files will be moved back into the input folder, so your automation will need to account for that, either via the exclude list, or via the last-modified timestamp, or maybe something else.




EDIT
FileBot r10891 now allows you to pass --output folder and / or --format expression options to filebot -revert commands to revert files into different folders / different file paths.
:idea: Please read the FAQ and How to Request Help.
seger85
Posts: 15
Joined: 15 Dec 2020, 10:52

Re: Revert files via the GUI/CLI - restored to a different folder

Post by seger85 »

:idea: The --def unsortedFormat parameter allows you to define the target file path for unmatched files. You seem to be doing that already.
We're getting closer to the issue. Yes, I'm already using unsortedFormat, which sorts the files that weren't recognised by Filebot and require my manual GUI intervention. However, I don't want both the files that Filebot didn't recognise and the files that caused a conflict because they already existed.
.
:idea: The --conflict option allows you to control what happens when the target file path exists already, so instead of --conflict override you can set a different behaviour there, you can even have your own custom code come up with a new different file path:
viewtopic.php?t=12891
This idea could be the solution in my case. If I understand it correctly, I can work with the --conflict command in addition to --def unsortedFormat, and this would only refer to the conflict that the file already exists, and I could define a path for --conflict in addition to --def unsortedFormat?
Would that then have to be solved via index, and would we define the new path there, or do I have to control it via a custom Groovy code? Do you have a template here so that I can implement it? If so, perhaps my folder where only the conflict files should be saved: "/media/Upload_Download/1 Download/1 Encodieren/Papiekorb" An alternative to the path would be to delete via confict, if possible.
:idea: You'd make your life a lot easier if you ensure a unique file name for each unique input file. If it's a Director's Cut, then add [Directors Cut] to the file name, thus ensuring a unique file name that's not on the exclude list yet. If you want to revert files via the GUI, then the files will be moved back into the input folder, so your automation will need to account for that, either via the exclude list, or via the last-modified timestamp, or maybe something else.
Thank you very much, but that doesn't apply in my specific case. I understand your suggestion, but I'm not going to do it for the following reasons:
It takes up significantly more storage space, and my family and I are more than happy with one version.
The second challenge would be that, in combination with my first point, I would eventually find myself in a situation where I wanted to update files that already exist.
In other words, if it were possible to separate them from --def unsortedFormat as I would like, that would be the solution and I could also stop the loop.
User avatar
rednoah
The Source
Posts: 24370
Joined: 16 Nov 2011, 08:59
Location: Taipei
Contact:

Re: Revert files via the GUI/CLI - restored to a different folder

Post by rednoah »

:idea: Yes, a Custom Conflict Action would be responsible for coming up with an alternate target file path if there is a conflict.


:arrow: e.g. maybe something like this will do the trick?

Groovy: Select all

{ from, to ->
	"/media/Upload_Download/1 Download/1 Encodieren/Papiekorb/" + to.name
}
:idea: Please read the FAQ and How to Request Help.
seger85
Posts: 15
Joined: 15 Dec 2020, 10:52

Re: Revert files via the GUI/CLI - restored to a different folder

Post by seger85 »

Code: Select all

version: "3.9"

services:
  filebot:
    image: jlesage/filebot:latest
    container_name: filebot
    restart: unless-stopped

    ports:
      - "5800:5800"
      # - "5900:5900"   # optional VNC-Client

    environment:
      TZ: Europe/Berlin
      USER_ID: "1030"
      GROUP_ID: "100"
      UMASK: "0022"

      # UI / VNC
      DISPLAY_WIDTH: "1920"
      DISPLAY_HEIGHT: "1080"
      VNC_PASSWORD: "password"

      # HTTPS & Web-Auth
      SECURE_CONNECTION: "1"
      WEB_AUTHENTICATION: "1"
      WEB_AUTHENTICATION_USERNAME: "user"
      WEB_AUTHENTICATION_PASSWORD: "Password!!!"

      # EMBY & HA für post-hook.sh
      EMBY_HOST: "http://192.168.178.121:8096"
      EMBY_API_KEY: "key"
      HA_HOST: "http://192.168.178.122:8123"
      HA_TOKEN: "token"

      # Für Emby-Webhook
      INSTALL_PACKAGES: "curl"

      # NFS/XAttr
      FILEBOT_OPTS: "-DuseExtendedFileAttributes=false"

      # --- AMC (Polling) ---
      AMC_ENABLED: "1"
      AMC_INTERVAL: "20"
      AMC_INPUT_STABLE_TIME: "30"
      AMC_ACTION: "move"
      AMC_MATCH_MODE: "opportunistic"    # global opportunistic
      AMC_LANG: "German"
      # AMC_CONFLICT: "override" - raus damit

      # Ein Mount für Quelle & Ziel -> rename(2) / Instant-Move
      AMC_INPUT_DIR: "/media/Upload_Download/1 Download/1 Encodieren"

      # Ziel-Formate (Routing: Standard + Kids + Dokus)
      AMC_MOVIE_FORMAT: >-
        { f.path.contains('/2 Kinderfilme_Kinderserien/')
          ? '/media/- Kinderfilme'
          : (f.path.contains('/3 Doku_Filme_Doku_Serien/')
              ? '/media/- Filme_Serien_(Dokumentationen)'
              : '/media/- Filme') }/{collection.replaceAll(/[:|]/, " - ")}/{n.replaceAll(/[:|]/, " - ")}
        ({y}) {[vf]}/{n.replaceAll(/[:|]/, " - ")} ({y}) {[vf]}
      AMC_SERIES_FORMAT: >-
        { f.path.contains('/2 Kinderfilme_Kinderserien/')
          ? '/media/- Kinderserien'
          : (f.path.contains('/3 Doku_Filme_Doku_Serien/')
              ? '/media/- Filme_Serien_(Dokumentationen)'
              : '/media/- Serien') }/{n} ({y})/Staffel {s}/{n} - {s00e00} - {t} {[vf]}

      AMC_CUSTOM_OPTIONS: >-
        -non-strict
        -r
        --order Digital
        --file-filter "['1 Filme_Encodiert (Fertig)','1 Serien_Encodiert (Fertig)','11 Kinderfilme_Encodiert (Fertig)','11 Kinderserien_Encodiert (Fertig)','111 Dokumentationen_Filme_Encodiert (Fertig)','111 Dokumentationen_Serien_Encodiert (Fertig)'].contains(f.parentFile.name)"
        --filter "true"
        --conflict /config/conflict_to_papierkorb.groovy
        --def subtitles=n minFileSize=0
        unsorted=y
        unsortedFormat="/media/Upload_Download/1 Download/{file.name}"
        excludeList=/dev/null
        music=n
        ignore="(?i)(?:^|/)1_nicht_löschen\.lock$|(?:^|/)(Backup alt|@eaDir)(?:/|$)"
        exec="/config/scripts/post-hook.sh {quote f, historic.f}"
        movieDB=TheMovieDB
        seriesDB=TheTVDB




    volumes:
      - /srv/appdata/filebot:/config:rw
      - /mnt/media:/media:rw

      # --- GUI: eine Mount-Wurzel für Quelle+Ziel => echtes Move möglich ---
      - /mnt/media:/storage:rw


    # Ressourcen/Logging (dein Style)
    cpu_shares: 256
    cpus: "4.0"
    mem_reservation: 2g
    mem_limit: 3g
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

    networks: [edge]

networks:
  edge:
    external: true

LOG

Code: Select all

2026-01-13T13:32:46.995928151Z [amc         ] Parameter: animeFormat = {plex}
2026-01-13T13:32:46.995966779Z [amc         ] Parameter: subtitles = n
2026-01-13T13:32:46.996050872Z [amc         ] Parameter: minFileSize = 0
2026-01-13T13:32:46.996191013Z [amc         ] Parameter: unsorted = y
2026-01-13T13:32:46.996276476Z [amc         ] Parameter: unsortedFormat = /media/Upload_Download/1 Download/{file.name}
2026-01-13T13:32:46.996345855Z [amc         ] Parameter: ignore = (?i)(?:^|/)1_nicht_löschen.lock$|(?:^|/)(Backup alt|@eaDir)(?:/|$)
2026-01-13T13:32:46.996450252Z [amc         ] Parameter: exec = /config/scripts/post-hook.sh {quote f, historic.f}
2026-01-13T13:32:46.996700443Z [amc         ] Parameter: movieDB = TheMovieDB
2026-01-13T13:32:46.996895277Z [amc         ] Parameter: seriesDB = TheTVDB
2026-01-13T13:32:47.000557259Z [amc         ] Argument[0]: /media/Upload_Download/1 Download/1 Encodieren/1 Filme_Serien/1 Filme_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:32:47.000578052Z [amc         ] Argument[1]: /media/Upload_Download/1 Download/1 Encodieren/1 Filme_Serien/1 Filme_Encodiert (Fertig)/Ein.zum.Tode.Verurteilter.ist.entflohen.1956.German.AC3D.DL.1080p.CC.BluRay.x265-FuN.mkv
2026-01-13T13:32:47.000581088Z [amc         ] Argument[2]: /media/Upload_Download/1 Download/1 Encodieren/1 Filme_Serien/1 Serien_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:32:47.000582204Z [amc         ] Argument[3]: /media/Upload_Download/1 Download/1 Encodieren/2 Kinderfilme_Kinderserien/11 Kinderfilme_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:32:47.000583428Z [amc         ] Argument[4]: /media/Upload_Download/1 Download/1 Encodieren/2 Kinderfilme_Kinderserien/11 Kinderserien_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:32:47.000584452Z [amc         ] Argument[5]: /media/Upload_Download/1 Download/1 Encodieren/3 Doku_Filme_Doku_Serien/111 Dokumentationen_Filme_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:32:47.000585447Z [amc         ] Argument[6]: /media/Upload_Download/1 Download/1 Encodieren/3 Doku_Filme_Doku_Serien/111 Dokumentationen_Serien_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:32:47.000586474Z [amc         ] Argument[7]: /media/Upload_Download/1 Download/1 Encodieren/Backup alt/1 Ordner Backup/1 Filme_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:32:47.000587483Z [amc         ] Argument[8]: /media/Upload_Download/1 Download/1 Encodieren/Backup alt/1 Ordner Backup/1 Serien_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:32:47.066615402Z [amc         ] Use excludes: /dev/null (0)
2026-01-13T13:32:47.111279216Z [amc         ] Ignore pattern: /media/Upload_Download/1 Download/1 Encodieren/1 Filme_Serien/1 Filme_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:32:47.227416004Z [amc         ] Ignore pattern: /media/Upload_Download/1 Download/1 Encodieren/1 Filme_Serien/1 Serien_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:32:47.229028879Z [amc         ] Ignore pattern: /media/Upload_Download/1 Download/1 Encodieren/2 Kinderfilme_Kinderserien/11 Kinderfilme_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:32:47.230015108Z [amc         ] Ignore pattern: /media/Upload_Download/1 Download/1 Encodieren/2 Kinderfilme_Kinderserien/11 Kinderserien_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:32:47.231078371Z [amc         ] Ignore pattern: /media/Upload_Download/1 Download/1 Encodieren/3 Doku_Filme_Doku_Serien/111 Dokumentationen_Filme_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:32:47.231903187Z [amc         ] Ignore pattern: /media/Upload_Download/1 Download/1 Encodieren/3 Doku_Filme_Doku_Serien/111 Dokumentationen_Serien_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:32:47.232500783Z [amc         ] Ignore pattern: /media/Upload_Download/1 Download/1 Encodieren/Backup alt/1 Ordner Backup/1 Filme_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:32:47.233163021Z [amc         ] Ignore pattern: /media/Upload_Download/1 Download/1 Encodieren/Backup alt/1 Ordner Backup/1 Serien_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:32:47.235803240Z [amc         ] Input: /media/Upload_Download/1 Download/1 Encodieren/1 Filme_Serien/1 Filme_Encodiert (Fertig)/Ein.zum.Tode.Verurteilter.ist.entflohen.1956.German.AC3D.DL.1080p.CC.BluRay.x265-FuN.mkv
2026-01-13T13:32:47.250236386Z [amc         ] Group files by movie or series
2026-01-13T13:32:51.280081689Z [amc         ] Group: {Movie=Ein zum Tode Verurteilter ist entflohen (1956), Series=null} => [Ein.zum.Tode.Verurteilter.ist.entflohen.1956.German.AC3D.DL.1080p.CC.BluRay.x265-FuN.mkv]
2026-01-13T13:32:51.289856990Z [amc         ] Rename movies using [TheMovieDB]
2026-01-13T13:32:51.290750620Z [amc         ] Auto-detect movie from context [/media/Upload_Download/1 Download/1 Encodieren/1 Filme_Serien/1 Filme_Encodiert (Fertig)/Ein.zum.Tode.Verurteilter.ist.entflohen.1956.German.AC3D.DL.1080p.CC.BluRay.x265-FuN.mkv]
2026-01-13T13:32:51.528350538Z [amc         ] Apply filter [true] on [1] option
2026-01-13T13:32:51.529822422Z [amc         ] Include [Ein zum Tode Verurteilter ist entflohen (1956)]
2026-01-13T13:32:51.529826362Z [amc         ] [1] option remaining
2026-01-13T13:33:45.559304611Z [amc         ] Failed to process [/media/Upload_Download/1 Download/1 Encodieren/1 Filme_Serien/1 Filme_Encodiert (Fertig)/Ein.zum.Tode.Verurteilter.ist.entflohen.1956.German.AC3D.DL.1080p.CC.BluRay.x265-FuN.mkv] because [/media/- Filme/Ein zum Tode Verurteilter ist entflohen(1956) [1080p]/Ein zum Tode Verurteilter ist entflohen (1956) [1080p].mkv] is an exact copy and already exists [Last-Modified: Sun Jan 04 11:20:36 CET 2026]
2026-01-13T13:33:45.560399755Z [amc         ] Processed 0 files
2026-01-13T13:33:45.568504172Z [amc         ] Processing 1 unsorted files
2026-01-13T13:33:45.618999387Z [amc         ] [MOVE] from [/media/Upload_Download/1 Download/1 Encodieren/1 Filme_Serien/1 Filme_Encodiert (Fertig)/Ein.zum.Tode.Verurteilter.ist.entflohen.1956.German.AC3D.DL.1080p.CC.BluRay.x265-FuN.mkv] to [/media/Upload_Download/1 Download/Ein.zum.Tode.Verurteilter.ist.entflohen.1956.German.AC3D.DL.1080p.CC.BluRay.x265-FuN.mkv]
2026-01-13T13:33:45.623040950Z [amc         ] Processed 1 file
2026-01-13T13:33:45.632956468Z [amc         ] Execute: /config/scripts/post-hook.sh '/media/Upload_Download/1 Download/Ein.zum.Tode.Verurteilter.ist.entflohen.1956.German.AC3D.DL.1080p.CC.BluRay.x265-FuN.mkv' '/media/Upload_Download/1 Download/1 Encodieren/1 Filme_Serien/1 Filme_Encodiert (Fertig)/Ein.zum.Tode.Verurteilter.ist.entflohen.1956.German.AC3D.DL.1080p.CC.BluRay.x265-FuN.mkv'
2026-01-13T13:34:06.809794786Z [amc         ] Clean clutter files and empty folders
2026-01-13T13:34:06.833366378Z [amc         ] Keep /media/Upload_Download/1 Download/1 Encodieren/1 Filme_Serien/1 Filme_Encodiert (Fertig)/1_nicht_löschen.lock (not clutter)
2026-01-13T13:34:06.833383624Z [amc         ] Keep /media/Upload_Download/1 Download/1 Encodieren/1 Filme_Serien/1 Serien_Encodiert (Fertig)/1_nicht_löschen.lock (not clutter)
2026-01-13T13:34:06.833385402Z [amc         ] Keep /media/Upload_Download/1 Download/1 Encodieren/2 Kinderfilme_Kinderserien/11 Kinderfilme_Encodiert (Fertig)/1_nicht_löschen.lock (not clutter)
2026-01-13T13:34:06.833386654Z [amc         ] Keep /media/Upload_Download/1 Download/1 Encodieren/2 Kinderfilme_Kinderserien/11 Kinderserien_Encodiert (Fertig)/1_nicht_löschen.lock (not clutter)
2026-01-13T13:34:06.833393591Z [amc         ] Keep /media/Upload_Download/1 Download/1 Encodieren/3 Doku_Filme_Doku_Serien/111 Dokumentationen_Filme_Encodiert (Fertig)/1_nicht_löschen.lock (not clutter)
2026-01-13T13:34:06.833394631Z [amc         ] Keep /media/Upload_Download/1 Download/1 Encodieren/3 Doku_Filme_Doku_Serien/111 Dokumentationen_Serien_Encodiert (Fertig)/1_nicht_löschen.lock (not clutter)
2026-01-13T13:34:06.833557137Z [amc         ] Keep /media/Upload_Download/1 Download/1 Encodieren/Backup alt/1 Ordner Backup/1 Filme_Encodiert (Fertig)/1_nicht_löschen.lock (not clutter)
2026-01-13T13:34:06.833641884Z [amc         ] Keep /media/Upload_Download/1 Download/1 Encodieren/Backup alt/1 Ordner Backup/1 Serien_Encodiert (Fertig)/1_nicht_löschen.lock (not clutter)
2026-01-13T13:34:06.835594113Z [amc         ] Done ヾ(@⌒ー⌒@)ノ
2026-01-13T13:34:27.598839673Z [amc         ] Changes detected in input folder.
2026-01-13T13:34:27.651579265Z [amc         ] Waiting 30 seconds before proceeding...
2026-01-13T13:34:57.792077512Z [amc         ] Invoking AMC script...
2026-01-13T13:34:58.513878462Z [amc         ] Run script [fn:amc] at [Tue Jan 13 14:34:58 CET 2026]
2026-01-13T13:34:58.520444033Z [amc         ] Parameter: artwork = n
2026-01-13T13:34:58.522453391Z [amc         ] Parameter: music = n
2026-01-13T13:34:58.522469831Z [amc         ] Parameter: clean = y
2026-01-13T13:34:58.522484083Z [amc         ] Parameter: excludeList = /dev/null
2026-01-13T13:34:58.523068737Z [amc         ] Parameter: movieFormat = { f.path.contains('/2 Kinderfilme_Kinderserien/')
2026-01-13T13:34:58.523070968Z [amc         ] ? '/media/- Kinderfilme'
2026-01-13T13:34:58.523072394Z [amc         ] : (f.path.contains('/3 Doku_Filme_Doku_Serien/')
2026-01-13T13:34:58.523073841Z [amc         ] ? '/media/- Filme_Serien_(Dokumentationen)'
2026-01-13T13:34:58.523075063Z [amc         ] : '/media/- Filme') }/{collection.replaceAll(/[:|]/, " - ")}/{n.replaceAll(/[:|]/, " - ")}
2026-01-13T13:34:58.523076655Z [amc         ] ({y}) {[vf]}/{n.replaceAll(/[:|]/, " - ")} ({y}) {[vf]}
2026-01-13T13:34:58.523078049Z [amc         ] Parameter: musicFormat = {plex}
2026-01-13T13:34:58.523079302Z [amc         ] Parameter: seriesFormat = { f.path.contains('/2 Kinderfilme_Kinderserien/')
2026-01-13T13:34:58.523080613Z [amc         ] ? '/media/- Kinderserien'
2026-01-13T13:34:58.523081755Z [amc         ] : (f.path.contains('/3 Doku_Filme_Doku_Serien/')
2026-01-13T13:34:58.523082946Z [amc         ] ? '/media/- Filme_Serien_(Dokumentationen)'
2026-01-13T13:34:58.523084133Z [amc         ] : '/media/- Serien') }/{n} ({y})/Staffel {s}/{n} - {s00e00} - {t} {[vf]}
2026-01-13T13:34:58.523171225Z [amc         ] Parameter: animeFormat = {plex}
2026-01-13T13:34:58.523297139Z [amc         ] Parameter: subtitles = n
2026-01-13T13:34:58.523431423Z [amc         ] Parameter: minFileSize = 0
2026-01-13T13:34:58.524046883Z [amc         ] Parameter: unsorted = y
2026-01-13T13:34:58.524080436Z [amc         ] Parameter: unsortedFormat = /media/Upload_Download/1 Download/{file.name}
2026-01-13T13:34:58.524138251Z [amc         ] Parameter: ignore = (?i)(?:^|/)1_nicht_löschen.lock$|(?:^|/)(Backup alt|@eaDir)(?:/|$)
2026-01-13T13:34:58.524171192Z [amc         ] Parameter: exec = /config/scripts/post-hook.sh {quote f, historic.f}
2026-01-13T13:34:58.524247731Z [amc         ] Parameter: movieDB = TheMovieDB
2026-01-13T13:34:58.524587346Z [amc         ] Parameter: seriesDB = TheTVDB
2026-01-13T13:34:58.528570891Z [amc         ] Argument[0]: /media/Upload_Download/1 Download/1 Encodieren/1 Filme_Serien/1 Filme_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:34:58.528587550Z [amc         ] Argument[1]: /media/Upload_Download/1 Download/1 Encodieren/1 Filme_Serien/1 Serien_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:34:58.529029797Z [amc         ] Argument[2]: /media/Upload_Download/1 Download/1 Encodieren/2 Kinderfilme_Kinderserien/11 Kinderfilme_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:34:58.529032878Z [amc         ] Argument[3]: /media/Upload_Download/1 Download/1 Encodieren/2 Kinderfilme_Kinderserien/11 Kinderserien_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:34:58.529033762Z [amc         ] Argument[4]: /media/Upload_Download/1 Download/1 Encodieren/3 Doku_Filme_Doku_Serien/111 Dokumentationen_Filme_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:34:58.529034734Z [amc         ] Argument[5]: /media/Upload_Download/1 Download/1 Encodieren/3 Doku_Filme_Doku_Serien/111 Dokumentationen_Serien_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:34:58.529035705Z [amc         ] Argument[6]: /media/Upload_Download/1 Download/1 Encodieren/Backup alt/1 Ordner Backup/1 Filme_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:34:58.529036468Z [amc         ] Argument[7]: /media/Upload_Download/1 Download/1 Encodieren/Backup alt/1 Ordner Backup/1 Serien_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:34:58.617551110Z [amc         ] Use excludes: /dev/null (0)
2026-01-13T13:34:58.648020741Z [amc         ] Ignore pattern: /media/Upload_Download/1 Download/1 Encodieren/1 Filme_Serien/1 Filme_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:34:58.648052460Z [amc         ] Ignore pattern: /media/Upload_Download/1 Download/1 Encodieren/1 Filme_Serien/1 Serien_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:34:58.648054843Z [amc         ] Ignore pattern: /media/Upload_Download/1 Download/1 Encodieren/2 Kinderfilme_Kinderserien/11 Kinderfilme_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:34:58.648056116Z [amc         ] Ignore pattern: /media/Upload_Download/1 Download/1 Encodieren/2 Kinderfilme_Kinderserien/11 Kinderserien_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:34:58.648057211Z [amc         ] Ignore pattern: /media/Upload_Download/1 Download/1 Encodieren/3 Doku_Filme_Doku_Serien/111 Dokumentationen_Filme_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:34:58.648679700Z [amc         ] Ignore pattern: /media/Upload_Download/1 Download/1 Encodieren/3 Doku_Filme_Doku_Serien/111 Dokumentationen_Serien_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:34:58.648703691Z [amc         ] Ignore pattern: /media/Upload_Download/1 Download/1 Encodieren/Backup alt/1 Ordner Backup/1 Filme_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:34:58.648980687Z [amc         ] Ignore pattern: /media/Upload_Download/1 Download/1 Encodieren/Backup alt/1 Ordner Backup/1 Serien_Encodiert (Fertig)/1_nicht_löschen.lock
2026-01-13T13:34:58.664002399Z [amc         ] No files selected for processing
2026-01-13T13:34:58.664027527Z [amc         ] Done ¯_(ツ)_/¯
Goove

Code: Select all

// /config/conflict_to_papierkorb.groovy

def bin = new File("/media/Upload_Download/1 Download/1 Encodieren/Papierkorb")
bin.mkdirs()

{ File from, File to ->
    // Wenn Größe ODER Datum anders: überschreiben (REPLACE)
    if (from.length() != to.length() || from.lastModified() != to.lastModified()) {
        return to
    }

    // Wenn identisch: ab in den Papierkorb (mit eindeutigem Namen)
    def name = from.name
    def dot = name.lastIndexOf('.')
    def base = dot >= 0 ? name.substring(0, dot) : name
    def ext  = dot >= 0 ? name.substring(dot) : ''
    def ts   = System.currentTimeMillis()

    return new File(bin, "${base}.DUP.${ts}${ext}")
}
In the log, it looks like this when it is:
--conflict /config/conflict_to_papierkorb.groovy
ignored. I would have thought that I had set it correctly.
User avatar
rednoah
The Source
Posts: 24370
Joined: 16 Nov 2011, 08:59
Location: Taipei
Contact:

Re: Revert files via the GUI/CLI - restored to a different folder

Post by rednoah »

:!: If you process the exact same file twice, then the amc script will assume that your setup is broken (i.e. accidental infinite loop) and fail with a warning:

Code: Select all

Failed to process [...] because [...] is an exact copy and already exists [Last-Modified: Sun Jan 04 11:20:36 CET 2026]

:idea: Your --conflict resolution logic is never called. Your conflict logic would be called if you added a new file to your input folder which is then processed and then conflicts with something.


e.g.

Console Output: Select all

$ filebot -rename Alias.1x01.mkv --conflict '{ from, to -> "/path/to/Trash" / to.name }'
...
[MOVE] from [Alias.1x01.mkv] to [/path/to/Trash/Alias - 1x01 - Truth Be Told.mkv]
:idea: Please read the FAQ and How to Request Help.
Post Reply