Procurando por arquivos executáveis

6

Existe uma maneira de pesquisar e excluir todos os arquivos executáveis dentro da pasta, se não houver nenhuma extensão?

Por exemplo, suponhamos que eu tenha 4 arquivos com extensão .ubu e o seguinte bash faz o trabalho que estou pedindo:

rm *.ubu 

Por exemplo, suponhamos que eu tenha 4, mas não há nenhuma extensão, algo como:

test test_2 test_3 ( chmod +x neles)

Como eu excluo esses arquivos?

    
por neuraload 10.12.2012 / 22:03

3 respostas

5

Se estamos falando de arquivos com bit executável definido, o comando find tem -executable test e -delete action.

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

ou

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

deve fazer o truque.

Para excluir especificamente todos os arquivos executáveis em seu diretório pessoal (não em subdiretórios) e perguntar se você deseja excluir cada arquivo, faça algo como

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

de 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.
    
por Sergey 10.12.2012 / 22:16
0

Para localizar arquivos (ou diretórios!) sem um ponto, use o padrão de correspondência de arquivo estendido

!(*.*)

Você precisa de shopt -s extglob - acho que essa opção está ativada por padrão em shells interativos.

Para excluir arquivos executáveis no 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
    
por glenn jackman 10.12.2012 / 22:58
-2

Um arquivo binário terá o bit executável marcado.

Assim, você pode escrever um script bash simples que verifica se o bit executável está definido e, em caso afirmativo, exclua o arquivo.

    
por Hashken 10.12.2012 / 22:12

Tags