Difference between revisions of "Loops"

From Steak Wiki
Jump to navigationJump to search
 
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
 +
===Template Loop===
 
This is a basic (bash) loop to operate on files.
 
This is a basic (bash) loop to operate on files.
 
+
<pre>
Examples are given for 7z and video conversion.
+
for i in *.7z
 +
do name=`echo $i | cut -d'.' -f1`;
 +
echo $name;
 +
7z e -o"$name" ./"$i"
 +
done
 +
</pre>
 +
Here's the above with comments included.
 
<pre>
 
<pre>
 
#!/bin/bash -x
 
#!/bin/bash -x
Line 24: Line 32:
 
  while true; do echo "ok"; sleep 1; done
 
  while true; do echo "ok"; sleep 1; done
  
===Batch Edit Photos===
+
===Batch remove EXIF data and resize photos===
 +
 
 +
for i in *.{jpg,JPG,png,PNG}
 +
do
 +
  mogrify -strip $i
 +
  convert $i -resize 240x180\! edit_$i
 +
done
 +
verify the data is gone with
 +
identify -verbose filename | grep exif
 +
<small>#note the \! is required to force it to ignore aspect ratio... also note that magick == convert</small>
 +
====Above but add date====
 
<pre>
 
<pre>
 
#!/bin/bash
 
#!/bin/bash
 +
DATE=$(date "+%Y_%m_%d")
 
for i in *.JPG
 
for i in *.JPG
 
do
 
do
Line 32: Line 51:
 
mogrify -strip $i
 
mogrify -strip $i
 
#test convert size in gimp first to get ratio right
 
#test convert size in gimp first to get ratio right
convert -resize 1080x810 $i ~/Desktop/photofolder/$i
+
convert -resize 1080x810 $i ~/Desktop/photofolder/$DATE$i
 
done
 
done
 
</pre>
 
</pre>
 
+
====rotate====
Add date:
 
 
<pre>
 
<pre>
#!/bin/bash
+
for i in *.jpg
DATE=$(date "+%Y_%m_%d")
+
do convert $i -rotate 90 $i; #use -90 for ccw
for i in *.JPG
 
do
 
#delete exif data
 
mogrify -strip $i
 
#test convert size in gimp first to get ratio right
 
convert -resize 1080x810 $i ~/Desktop/photofolder/$DATE$i
 
 
done
 
done
 
</pre>
 
</pre>

Latest revision as of 09:51, 30 December 2023

Template Loop

This is a basic (bash) loop to operate on files.

for i in *.7z
 do name=`echo $i | cut -d'.' -f1`;
 echo $name;
 7z e -o"$name" ./"$i" 
done

Here's the above with comments included.

#!/bin/bash -x
#for i in *.webm;
        for i in *.7z
 do name=`echo $i | cut -d'.' -f1`;
 echo $name;

#for h264
# ffmpeg -i $i -s 1280x720 -c:a copy $name.mp4;

#for webm

#-map_metadata -1 is to remove metadata, at least try to remove some. (need to verify)
#ffmpeg -i $i -map_metadata -1 -c:v libvpx -crf 10 -b:v 1M -c:a libvorbis $name.webm
 7z e -o"$name" ./"$i" 
done

Basically, trim off extension of i, put into name. Use both for extractions/conversion.

One Liner Loop

while true; do echo "ok"; sleep 1; done

Batch remove EXIF data and resize photos

for i in *.{jpg,JPG,png,PNG}
do
  mogrify -strip $i
  convert $i -resize 240x180\! edit_$i 
done

verify the data is gone with

identify -verbose filename | grep exif

#note the \! is required to force it to ignore aspect ratio... also note that magick == convert

Above but add date

#!/bin/bash
DATE=$(date "+%Y_%m_%d")
for i in *.JPG
do
#delete exif data
mogrify -strip $i
#test convert size in gimp first to get ratio right
convert -resize 1080x810 $i ~/Desktop/photofolder/$DATE$i
done

rotate

for i in *.jpg
 do convert $i -rotate 90 $i; #use -90 for ccw
done

Interactive Range Loop

#!/bin/bash
for i in {1..254}; 
do 
some program that stalls goes here;
done

this will stop at the program, if it doesn't immediately complete so do this: ctrl - \

that will skip to the next range loop (i increments). note its not ctrl - c which will exit script. you can hold ctrl and depress \

What is CTRL - \? https://en.wikipedia.org/wiki/Signal_(IPC) One of the other options besides ctrl - c.


read file into command line by line

#!/bin/bash
input="text_file.txt"
while IFS= read -r line
do
  wget $line
done < "$input"

Obviously here, wget is the command being used. This example downloads from a text file with a list of URLs.