locate is a command I’ve used in the past, but now, fresh installed with sudo apt get locate it doesn return anything.

locate --version returns locate (GNU findutils) 4.10.0, from 2024

or, have I forgotten something?

  • gnuhaut@lemmy.ml
    link
    fedilink
    arrow-up
    8
    ·
    edit-2
    5 months ago

    locate uses an index you need to update using updatedb before it is able to find anything.

    updatedb may run periodically because of a cron job, but the index is probably missing right after installing it manually.

      • gnuhaut@lemmy.ml
        link
        fedilink
        arrow-up
        4
        ·
        5 months ago

        I guess because that adds extra complexity that isn’t inherently necessary and can be added on top, plus it eats resources. You’ll spend the cycles either way basically, at least this way it’s optional. I don’t bother with a file indexer because with SSDs nowadays, find is pretty fast, and how often do you search for files anyway?

        Linux has APIs to get notified on file system events (fanotify, inotify) which would allow such a service to update itself whenever files are created/delete immediately, but locate is way older than that, from the 80s. I think popular DEs have something like that.

        There’s also ways to search for specific files that come with packages (e.g. dpkg -S), because the package manager already maintains an index of files that were installed by it, so you can use that for most stuff outside /home.

        • interdimensionalmeme@lemmy.ml
          link
          fedilink
          arrow-up
          0
          ·
          5 months ago

          I search for files dozens of times per day, it’s largely how I navigate between folders.
          And often advanced searches like only this root folder, in reverse order of accessed time, or only folder
          On windows I use void tools everything but nothing like it compares in speed and ease of use on linux.
          It’s one of my many roadblock to transition to linux.

          • pitiable_sandwich540@feddit.org
            link
            fedilink
            arrow-up
            1
            ·
            5 months ago

            Have you tried RTFM? :P

            Jokes aside afaik you could do everything you mentioned with sort, find (with -type f, -printf and -mtime) and grep (filtering via regex with the -e flag).

            Alternatively you could try KDE’s file explorer dolphin (or even just its search utility kfind) as a graphical alternative.

            My point is switching to linux is not quick or easy, but there are few really impassable roadblocks (games with shitty kernel level anticheat for example) and there is a high likelyhood someone in this community has encountered your problems aswell and migjt even know a solution.

            • swelter_spark@reddthat.com
              link
              fedilink
              English
              arrow-up
              0
              ·
              5 months ago

              Nemo, Cinnamon’s file manager, also has great built-in search. I almost never feel the need to open up Catfish.

              • pitiable_sandwich540@feddit.org
                link
                fedilink
                arrow-up
                1
                ·
                5 months ago

                Yeah, i like nemo a lot, i use it on my main machine when i need a gui, because it has not as many dependencies as dolphin. And it does not feel as “bloated” as dolphin. It does one thing (be a file explorer) and does well. :)

            • interdimensionalmeme@lemmy.ml
              link
              fedilink
              arrow-up
              0
              ·
              5 months ago

              using find to sort all pictures in /pics/ by inverted (i.e., most recently accessed first) access time, and filtering only those with an exposure time between 1/20 and 1/100 seconds

              find /pics/ -type f \( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' \) \
                -exec exiftool -ExposureTime -T {} \; -exec bash -c '
                  file="$1"
                  exposure="$2"
              
                  # Convert exposure to decimal
                  if [[ "$exposure" =~ ^([0-9]+)/([0-9]+)$ ]]; then
                      num="${BASH_REMATCH[1]}"
                      denom="${BASH_REMATCH[2]}"
                      exposure_val=$(echo "$num / $denom" | bc -l)
                  else
                      exposure_val="$exposure"
                  fi
              
                  # Filter by exposure between 1/100 and 1/20 seconds
                  if (( $(echo "$exposure_val >= 0.01" | bc -l) )) && (( $(echo "$exposure_val <= 0.05" | bc -l) )); then
                      atime=$(stat -c %X "$file")  # Access time (epoch)
                      echo "$atime $file"
                  fi
                ' bash {} $(exiftool -s3 -ExposureTime {}) | sort -nr
              

              In voidtools everything it would be

              pic: path:"C:\pics" sort:da-descending ExposureTime:1/20..1/100

              But actually doesn’t work because “ExposureTime” is only available as an sorting order not a filter but you get the gist ;)

              • pitiable_sandwich540@feddit.org
                link
                fedilink
                arrow-up
                1
                ·
                5 months ago

                Ah yeah okay, I see, that would be quite tedious to implement in bash. Everything looks pretty neat. :D

                Buuut I just looked at KDE’s search framework filter options (used by dolphin if you press <crtl> + f ) and it seems it is indeed possible to search/filter by exposure time with dolphin or via directly in the cli.

      • wewbull@feddit.uk
        link
        fedilink
        English
        arrow-up
        1
        ·
        5 months ago

        They do. You look at it every time you see the contents of your disk. It’s just organised in a tree to make path based lookups fast and locate organises its database differently to make fast basename lookups.

  • thingsiplay@beehaw.org
    link
    fedilink
    arrow-up
    1
    ·
    5 months ago

    Several distributions made an effort to replace locate with alternative and updated versions of it. For usage the command name is still locate, but the package name should be different, in example mlocate or plocate and there are other alternatives too. The main difference between the old and new versions is they are faster.

    • N0x0n@lemmy.ml
      link
      fedilink
      arrow-up
      1
      ·
      edit-2
      5 months ago

      plocate is backwards-compatible with mlocate, and is much faster and more efficient than mlocate. source

      From your personal experience, what do you prefer and why, if you don’t mind :).

  • MonkderVierte@lemmy.zip
    link
    fedilink
    arrow-up
    1
    ·
    5 months ago

    Btw, there’s also
    IFS=:; find $PATH -executable -iname "$1" -print
    Speed advantages of a indexed DB don’t matter much anymore with nowadays hardware.