bash - find piped to xargs with complex command -


i trying process dvd files in many different locations on disk. thing have in common (each set of input files) in directory named video_ts. output in each case single file named parent of directory.

i know can qualified path each directory with:

find /volumes/volumename -type d -name "video_ts" -print0 

and can parent directory piping xargs:

find /volumes/volumename -type d -name "video_ts" -print0 | xargs -0 -i{} dirname {} 

and know can parent directory name on own appending:

| xargs -o i{} basename {} 

what can't figure out how pass these parameters to, e.g. handbrakecli:

./handbrakecli -i /path/to/filename/video_ts -o /path/to/convertedfiles/filename.m4v 

i have read here expansion capability of shell , suspect that's going here (not using dirname or basename start), more read more confused getting!

you don't need xargs @ all: can read nul-delimited stream shell loop, , run commands want directly there.

#!/bin/bash  source_dir=/volumes/volumename dest_dir=/volumes/othername  while ifs= read -r -d '' dir;   name=${dir%/video_ts} # trim /video_ts off end of dir, assign name   name=${name##*/}      # remove before last remaining / name   ./handbrakecli -i "$dir" -o "$dest_dir/$name.m4v" done < <(find "$source_dir" -type d -name "video_ts" -print0) 

see the article using find on greg's wiki, or bashfaq #001 general information on processing input streams in bash, or bashfaq #24 understand value of using process substitution (the <(...) construct here) rather piping find loop.


also, find contains -exec action can used follows:

source_dir=/volumes/volumename dest_dir=/volumes/othername  export dest_dir # export allows use subprocesses!  find "$source_dir" -type d -name "video_ts" -exec bash -c '   dir;     name=${dir%/video_ts}     name=${name##*/}     ./handbrakecli -i "$dir" -o "$dest_dir/$name.m4v"   done ' _ {} + 

this passes found directory names directly on argument list shell invoked bash -c. since default object for loop iterate on "$@", argument list, implicitly iterates on directories found find.


Comments

Popular posts from this blog

php - Wordpress website dashboard page or post editor content is not showing but front end data is showing properly -

How to get the ip address of VM and use it to configure SSH connection dynamically in Ansible -

javascript - Get parameter of GET request -