this post was submitted on 20 Dec 2025
25 points (100.0% liked)

Linux

10710 readers
323 users here now

A community for everything relating to the GNU/Linux operating system (except the memes!)

Also, check out:

Original icon base courtesy of lewing@isc.tamu.edu and The GIMP

founded 2 years ago
MODERATORS
 

I was trying to find all symbolic links in /usr/lib and use file on the first entry in the list, which I delimited with head -n 1.

Why does find /usr/lib -maxdepth 1 -type l | file $(head -n 1) work but find /usr/lib -maxdepth 1 -type l | head -n 1 | file does not?

It complains that I am not using file correctly. Probably because it lacks an argument, but - programmatically/syntactically - why can't file grab it's argument from the pipe?

you are viewing a single comment's thread
view the rest of the comments
[–] sisko@franken.social 6 points 1 day ago (1 children)

@emotional_soup_88
You could use "-" as argument for file:

find /usr/lib -maxdepth 1 -type l | head -n 1 | file -

which means, 'file' will read its input from the pipe. But that is probably not what you want, because 'file' parses the input and does not accept it as an argument.

You use a pipe to pass the output of a program to another program, in order to do something with that input. Like:

cat unsorted_list.txt | sort -

[–] emotional_soup_88@programming.dev 1 points 1 day ago (1 children)

Thanks! I actually did try that, at which point it said "/dev/stdin ASCII text" or the likes, so it's like the file command literally read the stdin device. Which was extremely intriguing, but not what I wanted. God, I love Linux :D

[–] frongt@lemmy.zip 4 points 1 day ago

It's not like it, it's exactly it. The output from find is text, - means read stdin, so file told you the text in stdin was text. You'll have to see if it takes a list of files as an option, otherwise just use a for loop.