I have a range of .html files all containing spaces in between.

What I need is to locate the file using find in conjunction with grep, and if a match is found, basically I just want xargs to open it in view mode using less. Nothing fancy.

This is what I tried

pietro@scum:~/Downloads$ find |grep 'Register\sfor\srehousing.html' |xargs -trE  less
echo ./Register for rehousing.html 
./Register for rehousing.html

pietro@scum:~/Downloads$ find |grep 'Register\sfor\srehousing.html' |xargs -0 less
./Register for rehousing.html
: No such file or directory

I have gone through the xargs man but I just can't figure out why xargs doesn't pickup the filename + PATH to file and execute the less command.

The file does exist and here is how it looks

pietro@scum:~/Downloads$ ls -l |grep 'Register\sfor\srehousing.html' 
-rw-rw-r-- 1 pietro pietro    764611 Mar 14 14:44 Register for rehousing.html
  • 1
    Why don't you use find -name instead of find | grep ? – pLumo Apr 8 '19 at 14:38
  • @RoVo Simply I do not know how to use find -name when file contains spaces in between. – mailman Apr 8 '19 at 14:40
  • 2
    and why don't you use less "Register for rehousing.html" if you know the file exists? – pLumo Apr 8 '19 at 14:41
  • In reality this will be one of the few functions I am adding to an interactive script I am creating. I just needed to figure out how it would work before embedding it to the script. – mailman Apr 9 '19 at 8:57

try with:

xargs -d '\n' less

the input to xargs, in your case are not null character terminated

  • Wow that worked. Thank you so much. – mailman Apr 8 '19 at 14:35

No need for a pipe, use find only with -name instead of grep and -exec instead of xargs:

find . -name 'Register for rehousing.html' -exec less {} \;

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.