• anonymouse2
    link
    fedilink
    arrow-up
    7
    ·
    9 hours ago

    I recently learned to use a for loop on the command line to organize hundreds of files in a few seconds.

      • anonymouse2
        link
        fedilink
        arrow-up
        8
        ·
        8 hours ago

        Let’s say, for example, you have a directory of files named x01-001; x01-002; x02-001; x02-002; x03-001… and so on.

        I want to create subdirectories for each ‘x’ iteration and move each set to the corresponding subdirectory. My loop would look like this:

        for i in {1…3}; do mkdir Data_x0$i && mv x0$i* Data_x0$i; done

        I’ve also been using it if I need to rename large batches of files quickly.

        • friend_of_satan@lemmy.world
          link
          fedilink
          English
          arrow-up
          5
          ·
          6 hours ago

          Check out rename

          $ touch foo{1..5}.txt
          $ rename -v 's/foo/bar/' foo*
          foo1.txt renamed as bar1.txt
          foo2.txt renamed as bar2.txt
          foo3.txt renamed as bar3.txt
          foo4.txt renamed as bar4.txt
          foo5.txt renamed as bar5.txt
          $ rename -v 's/\.txt/.text/' *.txt
          bar1.txt renamed as bar1.text
          bar2.txt renamed as bar2.text
          bar3.txt renamed as bar3.text
          bar4.txt renamed as bar4.text
          bar5.txt renamed as bar5.text
          $ rename -v 's/(.*).text/1234-$1.txt/' *.text
          bar1.text renamed as 1234-bar1.txt
          bar2.text renamed as 1234-bar2.txt
          bar3.text renamed as 1234-bar3.txt
          bar4.text renamed as 1234-bar4.txt
          bar5.text renamed as 1234-bar5.txt
          
        • tetris11@lemmy.ml
          link
          fedilink
          arrow-up
          2
          ·
          edit-2
          7 hours ago

          xargs is also fun, and assuming your for loop doesn’t update anything out of the loop, is highly parallelizable

          The equivalent of the same command, that handles 10 tasks concurrently, using %% as a variable placeholder.

          seq 1 100 | xargs -I'%%' -P 10 sh -c 'mkdir Data_X0%% && mv x0%%* Data_X0%%;'
          

          But for mass renaming files, dired along with rectangle-select and multicursors within Emacs is my goto.