On Thu, 2006-06-22 at 07:21, Robert wrote:
Can someone explain why this: find . -depth -print0 | cpio --null -pmd /tmp/test will copy all files in and below the current directory -and- this: find . -depth -print | grep -v .iso$ | wc -l will count all the non-iso files -and- this: find . -depth -print | grep .iso$ | wc -l will count *only* the iso files -but- this: find . -depth -print0 | grep -v .iso$ | cpio --null -pmd /tmp/test doesn't copy *anything*? Any suggestions for a work-around would also be most welcome.
This doesn't have much to do with bash except that you could easily see the answer if you left off the last element of that last pipeline so you could see the output from grep. You are feeding grep one long line with null terminated filenames when it wants things one separate lines. You can let find do the selection:
find . -depth ! -name '*.iso' -print0 | cpio ... but I'd probably: rsync -av --exclude '*.iso' . /tmp/test instead.