Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

Is there a way to search and delete all executables files within folder if there is no extension?

e.g Let's suppose I have 4 files with .ubu extension and the following bash does the job I'm asking for:

rm *.ubu 

e.g_2 Now let's suppose I have 4 but there is no extension at all, something like:

test test_2 test_3 (chmod +x on them)

How do I delete those files?

share|improve this question

3 Answers 3

up vote 4 down vote accepted

If we're talking about files with executable bit set, then find command has -executable test, and a -delete action.

find /DIR/EC/TORY -type f -executable -delete

or

find /DIR/EC/TORY -type f -executable -exec rm -f {} \;

should do the trick.

To specifically delete all executable files in your home directory (not in sub-directories) and ask you whether you want to delete each file you can do something like

find ~ -type f -executable -maxdepth 0 -exec rm -i {} \;

from man find:

   -exec command ;
          Execute  command;  true  if 0 status is returned.  All following
          arguments to find are taken to be arguments to the command until
          an  argument  consisting of `;' is encountered.  The string `{}'
          is replaced by the current file name being processed  everywhere
          it occurs in the arguments to the command, not just in arguments
          where it is alone, as in some versions of find.  Both  of  these
          constructions might need to be escaped (with a `\') or quoted to
          protect them from expansion by the shell.  See the EXAMPLES sec‐
          tion for examples of the use of the -exec option.  The specified
          command is run once for each matched file.  The command is  exe‐
          cuted  in  the starting directory.   There are unavoidable secu‐
          rity problems surrounding use of the -exec  action;  you  should
          use the -execdir option instead.

   -exec command {} +
          This  variant  of the -exec action runs the specified command on
          the selected files, but the command line is built  by  appending
          each  selected file name at the end; the total number of invoca‐
          tions of the command will  be  much  less  than  the  number  of
          matched  files.   The command line is built in much the same way
          that xargs builds its command lines.  Only one instance of  `{}'
          is  allowed  within the command.  The command is executed in the
          starting directory.
share|improve this answer
    
I have 2 files / executables in my home directory, call them what you want but don't append an extension, how can I delete these files using a simple bash command ? –  neuraload Dec 10 '12 at 21:20
    
Thank you Sergey, can you explain a little the second command ? rm -rf {} \; what does this mean ? –  neuraload Dec 10 '12 at 21:26
    
If you only have 2 files and you know their names, why don't you just do rm test test_2 test_3? Or delete them in Nautilus? I thought the question was "how do I generally delete any executable files in a directory" –  Sergey Dec 10 '12 at 21:26
    
@pyn: the second command is "find anything of type file with executable bit set in directory /DIR/EC/TORY and below and for each file found execute rm -f command passing it the full path to the file." –  Sergey Dec 10 '12 at 21:28
    
2 files was just an example, you are right with the question. If I understood well {} means the full path to that directory ? Thank you for your patience and understanding (I know, my english is awfull ). –  neuraload Dec 10 '12 at 21:30

A binary file will have the executable bit marked.

So you can write a simple bash script which checks if the executable bit is set, and if so delete the file.

share|improve this answer

To find files (or directories!) without a dot, use the extended file matching pattern

!(*.*)

You need shopt -s extglob -- I think that option is on by default in interactive shells.

To delete executable files in bash

shopt -s extglob nullglob
for file in !(*.*); do
    [[ -f $file && -x $file ]] && echo rm "$file"
    # -f -> true if it's a file
    # -x -> true if it's executable
done
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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