@[email protected] to [email protected] • 17 hours agoWhat's a handy terminal command you use often?message-square149fedilinkarrow-up1116arrow-down16
arrow-up1110arrow-down1message-squareWhat's a handy terminal command you use often?@[email protected] to [email protected] • 17 hours agomessage-square149fedilink
minus-square@[email protected]linkfedilink8•15 hours agoLet’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.
minus-square@friend_of_satanlinkEnglish5•13 hours agoCheck 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
minus-square@[email protected]linkfedilink4•edit-214 hours agoxargs 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.
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
$ 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
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.