hamecoded
11/21/2014 - 9:03 PM

Dealing with files in the command line

Dealing with files in the command line

#Image format conversion
brew install imagemagick
#bmp to jpg
mogrify -format jpg *.bmp
#http://www.imagemagick.org/script/mogrify.php

#file rename tool
brew install rename
#http://plasmasturm.org/code/rename/

# Copy large number of files - a more robust way
# operation will commense upon error;
# operation will specify defected files
# great for use when you have disk issues
➜  ~  rsync -av --log-file=copy.txt --progress /Volumes/source/DATA/* /Volumes/destination/DATA/
➜  ~  rsync -av --exclude='/home/my_name/directory_with_corrupt_files/*'
➜  ~  tail -f copy.txt

#comparing 2 directories
diff <(cd /Volumes/TB/Pictures/by\ years/2010 && find . | sort) <(cd /Volumes/Iomega\ HDD/MyData/_private/media/pictures/events/2010 && find . | sort) > 2007.txt

# comparing 2 directories for file structure not file-content
# http://askubuntu.com/questions/421712/comparing-the-contents-of-two-directories-using-bash
➜   diff <(cd ~/DATA/ && find . | sort) <(cd /Volumes/Seagate/DATA/ && find . | sort)
# output #
58130d58129
< ./some/directory/.DS_Store
58284d58282
> ./some/other/directory/image.bmp
 
# comparing 2 directories recursively with file-content compare
# http://unix.stackexchange.com/questions/49496/recursively-compare-two-directories-with-diff-r-without-output-on-broken-links
➜   for f in `find ~/DATA/ ! -type l`;do diff -rq $f /Volumes/Seagate/DATA/;done
# output #
Files /Users/.../DATA/.DS_Store and /Volumes/Seagate/DATA/.DS_Store differ
Files /Users/ ...
...


# search for files with 'jdk' in their filename and 'Intelli' in their path
➜   find /Users -name "*jdk*" | grep Intelli
# output #
 /Users/odeds/Library/Caches/IntelliJIdea12/jars/bcprov-jdk14-138.jar.4178c67f
 /Users/odeds/Library/Caches/IntelliJIdea12/jars/json-lib-2.2.2-jdk15.jar.675dc09e
 
# search for files with "hosts" in their path
➜   locate hosts
 
# auto rename files
## first replace all space in file name
➜   for f in *\ *; do mv "$f" "${f// /_}"; done
## dry run replace on current dir only
➜   for i in `ls -1 05-4-*`;do echo mv \"$i\" \"${i//05-4-/05-5-}\";done
## dry run replace- specifying a dir recursively 
➜   for i in `find . -name "05-4-*"`;do echo mv \"$i\" \"${i//05-4-/05-5-}\";done
## execute the file renaming
➜   for i in `find . -name "05-4-*"`;do echo mv \"$i\" \"${i//05-4-/05-5-}\";done | /bin/zsh
 
#view mounted dirs in cli
➜   cd /Volumes

# remove Picasa "Originals" folder nested within a root Album dir
➜  find . -iname "Originals" -exec rm -rf "{}" +
➜  find . -iname ".picasaoriginals" -exec rm -rf "{}" +
# another option using xargs which gave me a too long error
➜  find . -name "Originals" | xargs -0 rm -rf

# using jhead to modify jpeg exif data. rewite file create date + modify date+ camera date
# basically we create an exif header. Then we set the file date to the exif date then we specify the date
➜ find . -iname "*.jp*g" -exec jhead -mkexif -ft -ds1960:01:01 {} +