Sponsored Content
Top Forums UNIX for Dummies Questions & Answers Using "find" and "-exec rm" ... Just no luck :( Post 302348785 by reborg on Saturday 29th of August 2009 05:18:01 PM
Old 08-29-2009
MySQL

Quote:
Originally Posted by methyl
Good explanation Reborg.

Slightly off topic but the behaviour of quotes in this context is interesting. In most cases we use quotes to ensure that "find" receives parameters without interference from the shell.
Spot the anomaly in HP-UX 11.11 (which does not have the unquoted {} problem).

Code:
touch 'a b'
find . -type f -name 'a b' -exec echo {} {} \;
./a b ./a b

find . -name 'a b' -exec echo '{}' \;
./a b

find . -name 'a b' -exec echo '{} {}' \;
{} {}

find . -name 'a b' -exec echo '{}' '{}' \;
./a b ./a b

Afterthought with respect to the original post:
Using "rm -f" rather than just "rm" could well hide an error message saying "non-existent" or a "Usage" error.
I don't find this unusual at all, it is exactly what I would expect. {} is being passed as an argument in most cases and find behaves correctly by using it as a substitution. In effect the quotes do nothing at all in this case because they are stripped by the shell and {} a valid argument for find. In the case where '{} {}' is used when the quotes are stripped the argument is {} {} ( one argument ) and find does not interpret this because "{} {}" has no special meaning to find, this gets passed directly to echo.

Consider this code fragment which illustrates what happens:

Code:
#!/bin/ksh
#
#  find.sh
#

i=1
while [[ $# -gt 0 ]] ; do

    case $1 in
        {} )
            echo "arg $i : Found special string {}"
            shift
            ;;
        * )
            echo "arg $i is : $1"
            shift
            ;;
    esac
    (( i = i + 1 ))
done


Code:
./find.sh {} {} "{}" '{}' '{} {}' "{} {}"
arg 1 : Found special string {}
arg 2 : Found special string {}
arg 3 : Found special string {}
arg 4 : Found special string {}
arg 5 is : {} {}
arg 6 is : {} {}

The point is that unless {} actually has a meaning in the shell, then the quotes are never needed. If the quotes are needed it is not to preserve spaces in the filename, it is to prevent shell interpretation.
 

9 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

No utpmx entry: you must exec "login" from lowest level "shell"

Hi I have installed solaris 10 on an intel machine. Logged in as root. In CDE, i open terminal session, type login alex (normal user account) and password and i get this message No utpmx entry: you must exec "login" from lowest level "shell" :confused: What i want is: open various... (0 Replies)
Discussion started by: peterpan
0 Replies

2. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies

3. Shell Programming and Scripting

cat $como_file | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g'

hi All, cat file_name | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g' Can this be done by using sed or awk alone (4 Replies)
Discussion started by: harshakusam
4 Replies

4. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

5. Shell Programming and Scripting

Find lines with "A" then change "E" to "X" same line

I have a bunch of random character lines like ABCEDFG. I want to find all lines with "A" and then change any "E" to "X" in the same line. ALL lines with "A" will have an "X" somewhere in it. I have tried sed awk and vi editor. I get close, not quite there. I know someone has already solved this... (10 Replies)
Discussion started by: nightwatchrenba
10 Replies

6. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

7. Shell Programming and Scripting

find . -path "*_nobackup*" -prune -iname "*.PDF" \( ! -name "*_nobackup.*" \)

These three finds worked as expected: $ find . -iname "*.PDF" $ find . -iname "*.PDF" \( ! -name "*_nobackup.*" \) $ find . -path "*_nobackup*" -prune -iname "*.PDF" They all returned the match: ./folder/file.pdf :b: This find returned no matches: $ find . -path "*_nobackup*" -prune... (3 Replies)
Discussion started by: wolfv
3 Replies

8. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

9. AIX

Apache 2.4 directory cannot display "Last modified" "Size" "Description"

Hi 2 all, i have had AIX 7.2 :/# /usr/IBMAHS/bin/apachectl -v Server version: Apache/2.4.12 (Unix) Server built: May 25 2015 04:58:27 :/#:/# /usr/IBMAHS/bin/apachectl -M Loaded Modules: core_module (static) so_module (static) http_module (static) mpm_worker_module (static) ... (3 Replies)
Discussion started by: penchev
3 Replies
ESCAPESHELLARG(3)							 1							 ESCAPESHELLARG(3)

escapeshellarg - Escape a string to be used as a shell argument

SYNOPSIS
string escapeshellarg (string $arg) DESCRIPTION
escapeshellarg(3) adds single quotes around a string and quotes/escapes any existing single quotes allowing you to pass a string directly to a shell function and having it be treated as a single safe argument. This function should be used to escape individual arguments to shell functions coming from user input. The shell functions include exec(3), system(3) and the backtick operator. On Windows, escapeshellarg(3) instead removes percent signs, replaces double quotes with spaces and adds double quotes around the string. PARAMETERS
o $arg - The argument that will be escaped. RETURN VALUES
The escaped string. EXAMPLES
Example #1 escapeshellarg(3) example <?php system('ls '.escapeshellarg($dir)); ?> SEE ALSO
escapeshellcmd(3), exec(3), popen(3), system(3), backtick operator. PHP Documentation Group ESCAPESHELLARG(3)
All times are GMT -4. The time now is 04:50 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy