Command finds some, misses some


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Command finds some, misses some
# 1  
Command finds some, misses some

The contents of my home directory:


bin Desktop Documents Downloads folders Music Pictures Public Templates Videos

When I run the command
Code:
for file in /home/myself/*d*; do if [ -x "$file" ]; then echo $file; fi; done

it finds
Code:
 /home/myself/Downloads 
 /home/myself/Videos

but not "folders".




Ubuntu 18.04.2; Xfce 4.12.3; kernel 4.15.0-45-generic; bash 4.4.19(1); Dell Inspiron-518
# 2  
man test yields:
Code:
       -x FILE
              FILE exists and execute (or search) permission is granted

Is folders a directory?
What are its permissions?

Last edited by vgersh99; 04-03-2019 at 01:49 PM..
This User Gave Thanks to vgersh99 For This Post:
# 3  
permissions fixed it! thanks!


edit: it is not a folder; I was just experimenting

Last edited by Xubuntu56; 04-03-2019 at 01:47 PM.. Reason: answered question
# 4  
Be very careful with using this because if there are filesname with spaces, tabs or other non-printing characters, it might break again.

You might be better to use find instead:-
Code:
find . -name "*d*" -print

I'm sure that this isn't all you want to do, but spaces in filenames (or other things) can cause problems. What is the overall requirement?




Kind regards,
Robin
This User Gave Thanks to rbatte1 For This Post:
# 5  
Folders would be seen as files with execute perms, so the question is more are those "folder" true folders or files, because files dont necessarily need execution perms, but it gets more tricky when talking of subdirectories: not giving them x means you cannot traverse them...
This User Gave Thanks to vbe For This Post:
# 6  
EDIT: fixed it. Putting -maxdepth before -name works!

@rbattel

When I run
Code:
find . -name "*d*" -print

several hundred files are found, as it delved into subdirectories (not my intent)

but when I try
Code:
find . -name -maxdepth 1 "*d*" -print

I get
Code:
find: paths must precede expression: `1'


Last edited by Xubuntu56; 04-04-2019 at 10:06 AM.. Reason: fixed problem
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #161
Difficulty: Easy
Application programmers are typically concerned only with interfaces in the application layer and often also in the transport layer, while the layers below are services provided by the TCP/IP stack in the operating system.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Finds all duplicate files

Hi, How would you write bash script that given a directory as an argument and finds all duplicate files (with same contents - by using bytewise comparison) there and prints their names? (6 Replies)
Discussion started by: elior
6 Replies

2. Shell Programming and Scripting

I want my script to NOT to send an e-mail if it finds the same keyword more than twice.

My script triggers and e-mail if keywords supplied to it were found. Problem is if it find the same keyword continously (due to continous server errors), it triggers mails and fillup my mail box with same message (which is not required) I want my script to NOT to send an e-mail if it finds the... (13 Replies)
Discussion started by: Rajeshneemkar
13 Replies

3. Shell Programming and Scripting

sed finds nothing but it changes file's timestamp

I must go through some files to change a certain string within text files to another string. I use openSUSE and folders are mounted by cifs. Text to be replaced (only in .m extension) is U:\FOLDER and new string is N: That works fine with spaces in directory names etc., but this process ... (5 Replies)
Discussion started by: Pappa41
5 Replies

4. UNIX for Dummies Questions & Answers

find -size -7M finds files, but won't cp them all

If I run: find /somefolder -type f -size -7M | wc -l I get 73594 files But when I run find /somefolder -type f -size -7M -exec /bin/cp -v {} /someotherfolder/ \; it only copies 38891 of the files to the folder, why? There's a mix of all types of files in /somefolder. Is there some other... (12 Replies)
Discussion started by: unclecameron
12 Replies

5. Shell Programming and Scripting

combine multiple finds into 1-liner

How to combine 3 find statements into 1-liner? find statements: cd ${dir1} ; find . ! -name . -prune -type f | xargs file | grep -i ascii | cut -f1 -d: | xargs grep -l "${searchtxt}" cd ${dir2} ; find . ! -name . -prune -type f | xargs file | grep -i ascii | cut -f1 -d: | xargs grep -l... (4 Replies)
Discussion started by: ux4me
4 Replies

6. Shell Programming and Scripting

Sometimes my until loop misses it's target

Hello all, I wrote a quick function (alarm) in my bash_profile (in cygwin) for practice. It uses until loops to wait for a specified time, and once that time passes triggers a play on a mp3. Most of the time it works, however sometimes it seems like it's looping through too slowly and will miss... (1 Reply)
Discussion started by: DeCoTwc
1 Replies

7. UNIX for Dummies Questions & Answers

very urgent..need of a script which finds a file without the use of find command..hlp

im a beginner in shell scripting and i need a script which will find a file in a given path without the use of find or grep command.......i need some kind of code.....plzzz plzzzz help me......ive tried n searched every where but i couldn't find the solution for my particular problem..... (4 Replies)
Discussion started by: mishi
4 Replies

8. Shell Programming and Scripting

Read from text file misses first line

Hi! I need to read in the first line from a text file (which will only ever have one line in it), so I tried this.... while read line do echo $line done < $file But this wasn't returning anything. So I tired a different file, which had multiple lines of text in it, and it returned... (2 Replies)
Discussion started by: davewg
2 Replies

9. News, Links, Events and Announcements

SETI Finds Stolen Laptop

The SETI@home project invites volunteers to install special software of their home computers. This software, called BOINC, runs computational jobs when the computer would otherwise be idle. And the software needs to contact the main server periodically to deliver results and obtain new problems.... (2 Replies)
Discussion started by: Perderabo
2 Replies

10. UNIX for Dummies Questions & Answers

PS finds a ghost?

Hello, I have problems executing a script in ksh with this script named process.sh: ps -ef | grep process.sh | grep -v grep | wc -l | read a if then echo "The script is running" exit 0 fiThe problem is that when I execute the script, sometimes it shows the message "The script is... (10 Replies)
Discussion started by: jguirao
10 Replies

Featured Tech Videos