Iterate over a list of files with spaces

前端 未结 11 1700
-上瘾入骨i
-上瘾入骨i 2020-11-22 05:16

I want to iterate over a list of files. This list is the result of a find command, so I came up with:

getlist() {
  for f in $(find . -iname \"f         


        
11条回答
  •  野的像风
    2020-11-22 06:05

    I really like for loops and array iteration, so I figure I will add this answer to the mix...

    I also liked marchelbling's stupid file example. :)

    $ mkdir test
    $ cd test
    $ touch "stupid file1"
    $ touch "stupid file2"
    $ touch "stupid   file 3"
    

    Inside the test directory:

    readarray -t arr <<< "`ls -A1`"
    

    This adds each file listing line into a bash array named arr with any trailing newline removed.

    Let's say we want to give these files better names...

    for i in ${!arr[@]}
    do 
        newname=`echo "${arr[$i]}" | sed 's/stupid/smarter/; s/  */_/g'`; 
        mv "${arr[$i]}" "$newname"
    done
    

    ${!arr[@]} expands to 0 1 2 so "${arr[$i]}" is the ith element of the array. The quotes around the variables are important to preserve the spaces.

    The result is three renamed files:

    $ ls -1
    smarter_file1
    smarter_file2
    smarter_file_3
    

提交回复
热议问题