As the title says, I just started with linux mint and am falling in love with bash scripts 😍 Actually I’m not sure if it’s considered a script, but I want to delete the last 2 files in all subfolders in a folder. So far I’ve (after great effort) got the terminal to list the files, but I want to delete them. Here is how I get them listed:

for f in *; do ls $f | tail -n 2; done

All their names come satisfyingly up in the terminal. Now what? I tried adding | xargs rm but that didn’t delete them. I also tried something with find command but that didn’t work either. Some folders have 3 items, so I want to delete #2 and 3. Some folders have 15 items so I want to delete #14 and 15. Folders are arranged by name, so it’s always the last 2 that I want to delete.

It’s frustrating to be sooooo clooooose, but also very fun. Any help is appreciated!

    • skaarl@feddit.nlOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      2 hours ago

      for f in *; do ls $f | tail -n 2 | xargs rm -rf; done

      You mean like that? rm -rf followed by a question mark does not inspire confidence XD

      • huf [he/him]@hexbear.net
        link
        fedilink
        English
        arrow-up
        1
        ·
        2 hours ago

        this will break pretty badly if you have filenames with spaces or newlines in them. so to make this actually robust, you now get to learn about find -print0, xargs -0, and why you always, always need to add "" around variables in bash.

      • calm.like.a.bomb@lemmy.dbzer0.com
        link
        fedilink
        English
        arrow-up
        1
        ·
        2 hours ago

        yes. that’s what I suggested… the question mark was there to ask you if you tried that :-D I’m at work, pretty busy :-D I hope you read the rm manual.

        -r means recursive
        -f means force, which will delete the files/directories without interaction