Filenames With Spaces
To be able to evenly split the backup streams into roughly equal amount of size, my script uses find /some/dir -mount -type f -ls
to generate the file list. The output will then be piped to a while loop to sum up the file size. However, shell will auto-collapse white space into a single space if you do not quote the variable. Although quoting variable is able to preserve white spaces, it will not be able to tackle filename ends with space
By applying padding (I used "==" in my below test case) to the end of the filename, I am able to preserve the original filename. Simply truncate the padding before writing to file list will resolve all these white space issue.
BTW, my environment is running Solaris.
$ touch 'a' 'b' 'c' ' start1space' ' start2space' ' start3space' \ 'mid 1space' 'mid 2space' 'mid 3space' \ 'end1space ' 'end2space ' 'end3space ' $ find . -type f -ls | while read x x x x x x x x x x filename do echo --$filename-- done --./a-- --./b-- --./c-- --./ start1space-- --./ start2space-- --./ start3space-- --./mid 1space-- --./mid 2space-- --./mid 3space-- --./end1space-- --./end2space-- --./end3space-- $ find . -type f -ls | while read x x x x x x x x x x filename do echo "--$filename--" done --./a-- --./b-- --./c-- --./ start1space-- --./ start2space-- --./ start3space-- --./mid 1space-- --./mid 2space-- --./mid 3space-- --./end1space-- --./end2space-- --./end3space-- $ find . -type f -ls | sed 's/$/==/' | while read x x x x x x x x x x filename do echo "--${filename%==}--" done --./a-- --./b-- --./c-- --./ start1space-- --./ start2space-- --./ start3space-- --./mid 1space-- --./mid 2space-- --./mid 3space-- --./end1space -- --./end2space -- --./end3space --
Labels: shell script, Solaris
0 Comments:
Post a Comment
<< Home