command line - Iterate over specific files in a directory using Bash find -


shellcheck doesn't like for on find loop in bash.

for f in $(find $src -maxdepth 1 -name '*.md'); wc -w < "$f" >> $path/tmp.txt; done

it suggests instead:

1  while ifs= read -r -d '' file 2  3      let count++ 4      echo "playing file no. $count" 5      play "$file" 6  done <   <(find mydir -mtime -7 -name '*.mp3' -print0) 7  echo "played $count files" 

i understand of it, things still unclear.

in line one: '' file?

in line six: empty space in < < (find). < redirects, usual? if are, mean redirect do block?

can parse out? right way iterate on files of kind in directory?

in line one: '' file?

according help read, '' argument -d parameter:

-d delim    continue until first character of              delim read, rather newline 

in line six: empty space in < < (find).

there 2 separate operators there. there <, standard i/o redirection operator, followed <(...) construct, bash-specific construct performs process substitution:

process substitution      process  substitution   supported on systems     support named pipes (fifos) or /dev/fd method of naming     open files.  takes form of <(list) or >(list).      process list run  input  or output  connected      fifo or file in /dev/fd... 

so is sending output of find command do loop.

are < redirects, usual? if are, mean redirect block?

redirect loop means command inside loop reads stdin read redirected input source. side effect, inside loop runs in subshell, has implications respect variable scope: variables set inside loop won't visible outside loop.

can parse out? right way iterate on files of kind in directory?

for record, typically piping find xargs, although solution best depends extend on you're trying do. 2 examples in question different things, , it's not clear you're trying accomplish.

but example:

find $src -maxdepth 1 -name '*.md' -print0 |   xargs -0 -idoc wc -w doc 

this run wc on *.md files. -print0 find (and -0 xargs) permit command correctly handle filenames embedded whitespace (e.g., this file.md). if know don't have of those, do:

find $src -maxdepth 1 -name '*.md' |   xargs -idoc wc -w doc 

Comments

Popular posts from this blog

powershell Start-Process exit code -1073741502 when used with Credential from a windows service environment -

twig - Using Twigbridge in a Laravel 5.1 Package -

c# - LINQ join Entities from HashSet's, Join vs Dictionary vs HashSet performance -