this post was submitted on 21 Sep 2024
221 points (97.0% liked)
Asklemmy
44004 readers
1389 users here now
A loosely moderated place to ask open-ended questions
Search asklemmy ๐
If your post meets the following criteria, it's welcome here!
- Open-ended question
- Not offensive: at this point, we do not have the bandwidth to moderate overtly political discussions. Assume best intent and be excellent to each other.
- Not regarding using or support for Lemmy: context, see the list of support communities and tools for finding communities below
- Not ad nauseam inducing: please make sure it is a question that would be new to most members
- An actual topic of discussion
Looking for support?
Looking for a community?
- Lemmyverse: community search
- sub.rehab: maps old subreddits to fediverse options, marks official as such
- !lemmy411@lemmy.ca: a community for finding communities
~Icon~ ~by~ ~@Double_A@discuss.tchncs.de~
founded 5 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
I recently learned to use a for loop on the command line to organize hundreds of files in a few seconds.
Example of said Black Magik?
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.
Check out
rename
In your second example, it looks like you have an escape character before the first 'dot', but not the second one. Is this a typo, or am I misunderstanding the command?
It's not a typo. The first section of the regex is a matching section, where a dot means "match any character", and an escaped dot is a literal dot character. The second section is the replacement section, and you don't have to escape the dot there because that section isn't matching anything. You can escape it though if it makes the code easier to read.
rename
is written in Perl so all Perl regular expression syntaxes are valid.However, your comment did make me realize that I hadn't escaped a dot in the third example! So I fixed that.
SED combinator, you win ๐
xargs
is also fun, and assuming your for loop doesn't update anything out of the loop, is highly parallelizableThe equivalent of the same command, that handles 10 tasks concurrently, using
%%
as a variable placeholder.But for mass renaming files,
dired
along with rectangle-select and multicursors within Emacs is my goto.