In the manual page of command find, I found options of -depth, -delete, -exec and etc their leading symbol are single - instead of a double as --    Conversely, there's git log --oneline , git log --graph, and --python, which are facile to distinguish the full names and abbreviated commands  Why does command find not follow such a practice.
123843
Why is a parameter in the POSIX find command added with a single hyphen for multi-character parameter names, while most other programs use single hyphen to indicate multiple single-character flags, and double-hyphens to indicate single parameter names with multiple characters?  This seems inconsistent, and I'm curious as to  A. why it's really not inconsistent, or  B. the history of that decision.
113339
I'm new to Mac usage.  It seems that most commands trip over options given after the file names. In linux, which I've used for years, it doesn't matter.  On Apple, it does.  Is there some setting somewhere or some hack to make commands like ls behave "normal"?  dwilson 0====&gt; ls -l p* -rw-r--r--@ 1 dwilson  owner  184 Jul 29 13:57 poo.c -rw-r--r--@ 1 dwilson  owner  133 Jul 29 13:57 poo.h  dwilson 0====&gt; ls p* -l ls: -l: No such file or directory poo.c        poo.h  dwilson 1====&gt;
55413
The question is pretty straight forward. I can get the exit code of the previous command by using $?. But what exactly is it?  I don't think it is a variable, because you can't have any special characters in the name of variable other than _.  foo?foo=10   will result in the error: foo?foo=10: command not found  So if it is not a variable, what is it? Are there others like it?
47654
Recently I found command: command which has no manual entry but help displays as follows:  $ help command command: command [-pVv] command [arg ...]     Execute a simple command or display information about commands.      Runs COMMAND with ARGS suppressing  shell function lookup, or display     information about the specified COMMANDs.  Can be used to invoke commands     on disk when a function with the same name exists.      Options:       -p    use a default value for PATH that is guaranteed to find all of         the standard utilities       -v    print a description of COMMAND similar to the `type' builtin       -V    print a more verbose description of each COMMAND      Exit Status:     Returns exit status of COMMAND, or failure if COMMAND is not found.   Is command -v is alternative of which?  What arguments are accepted by this command and how/when to use command?
121013
Exec allows us to either pass all arguments at once with {} + or to pass them one by one with {} \;  Now let's say I want to rename all jpeg, no problem doing this:  find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec mv '{}' '{}'.new \;   But if I need to redirect output, '{}' isn't accessible after redirection.  find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec cjpeg -quality 80 '{}' &gt; optimized_'{}' \;   This wouldn't work. I'd have to use a for loop, storing find's output into a variable before using it. Let's admit it, it's cumbersome.  for f in `find . \( -name '*.jpg' -o -name '*.jpeg' \)`; do cjpeg -quality 80 $f &gt; optimized_$f; done;   So is there a better way?
44735
I have got the directory called Test and a few directories inside it. Both Test and the directories inside it have executable files. I'd like to print them with ls. I'd use this command.  ls -l `find Test/ -perm /u=x,g=x,o=x -type f`   Is this a good/right/quick command or not?  My solution is:  find Test/ -executable -type f -exec ls -l {} \;   and got the same result as warl0ck and pradeepchhetri offered.
64001
The find command seems to differ from other Unix commands.  Why is there the empty curly brackets and a backward flash at the end of the following command?  find * -perm 777 -exec chmod 770 {} \;   I found one reason for the curly brackets but not for the backward flash.   The curly brackets are apparently for the path     Same as -exec, except that ``{}'' is   replaced with as many pathnames as   possible for each invocation of   utility
33328
I notice a lot of bash utilities like ls, cp, mv, grep use regular expressions and pattern matching. For instance symbols like * [] {} etc.   However, I find this to be different in some regard to other regular expression tutorials I find on the Internet. Is there a specific standard that these utilities follow or a comprehensive list of shortcuts somewhere?   Thank you
41439
What order does the find command use to print out a list of files? Is this order different across different Linux distributions or versions?
31808
I often have to do a recursive search in files. Tired of typing the whole "find/grep" combination all the time, I just created a script with the following line:  find . -name $1 -exec grep $2 {} + 2&gt;/dev/null   The idea is that I should be able to run it as, for example:  myfind '*' hello   The problem is, when '*' gets passed into the script, the script is expanding it to each file in the directory.  I tried putting a quote around $1:   find . -name '$1' -exec grep $2 {} + 2&gt;/dev/null   However, this turns $1 into a literal string.  Would appreciate your help in finding the right syntax. Must be something simple that I am missing.
4911
I started learning linux on vmware using centos 7. I created an image directory and several layers of files and sub-directories in that folder. most of the names containing spaces. I want to use a single command to rename all the files and directories at once.   command i am using right now is  find . -type f -exec rename "find" "replace" {} \; &amp; find . -type d -exec rename "find" "replace" {} \; Where as find is a space and replace is "-"(hiphen). I even tried below command looking at one of the answer in stack exchange.  find . -iname "find" -exec rename "find" "replace" {} \;
109570
I have a find command:  find Directory/{Alpha,Bravo,Charlie} arg1 arg2   I want to replace Alpha,Bravo,Charlie with $find_dir  find Directory/{$find_dir} arg1 arg2   however the latter expands to   find Directory/{Alpha,Bravo,Charlie} arg1 arg2   rather then   find Directory/Alpha Directory/Bravo Directory/Charlie arg1 arg2   Why? It's part of a fairly complex bash script that may have more or less directories, not all which are relevant (so globbing Upload/* would not work). So if I setup three now and add another, I'll have to manually add it in later. Plus I need it run from the root of directories to keep finds outputs perspective (./Upload/Dir/file as opposed to ./Dir/file).   But using a variable would permit me to change that as needed and keep it relevant to other parts of the script.
18131
Test environment:  $ mkdir testdir $ cd testdir $ echo | tee "file  name"   Now, ls will print file?name (under Ubuntu GNU bash, at least), while ls | cat will print file and name in separate lines.  What I'd like to achieve is, print file?name with the  piped version, so something like  $ something ls | cat` or `ls | something | cat` or `ls | something cat   In other words, how to fool a command like ls here into thinking, it has a TTY, when it does not, in the shell?  Note: ls is just an example program here, I'm looking for generic solution, not program specific like ls -q | cat would be.
65627
It looks like 'find', 'bash' and 'sed' in some cases does not work as one expects.  The following example should first create file 'sample.txt', then find the file and finally process it by '-exec' command. The executed command prints found filename, test specimens, and modified filename. The 'sed' command itself is used to replace 'txt' to 'TXT'.  touch sample.txt find ./ -maxdepth 1 -name "*.txt" -exec echo {} $(echo Specimen_before.txt {} Specimen_after.txt |sed -e "s/txt/TXT/g") \;   The expected output is:     ./sample.txt Specimen_before.TXT ./sample.TXT Specimen_after.TXT   Instead it produces:     ./sample.txt Specimen_before.TXT ./sample.txt Specimen_after.TXT   (the example has been tested also with old-school command substitution through backquotes '`' with the same result)  What am I doing wrong?
20132
I was just trying to list all directories and files under current directory and also write if they are file or directory with the following command:  find -exec echo `echo {} : ;if [ -f {} ]; then echo file; else echo directory;fi` \;   I know it is a silly command, I can use other things like -type f or -type d, but I want to learn why that piece of code did not work as I expected. It just prints directory to all of them. For example while output of find is:  . ./dir ./dir/file   output of my code is :  . : directory ./dir : directory ./dir/file : directory   And output of   echo `echo dir/file : ;if [ -f dir/file ]; then echo file; else echo directory;fi`   is  dir/file : file   I am working on Ubuntu 14.10 and using find (GNU findutils) 4.4.2
35837
Many command-line tools (grep, flex, etc.) use the ^ symbol to denote "beginning of line" and the $ symbol to denote "end of line." When did this convention arise? It seems perfectly reasonable to reserve two characters for these purposes, but it's a bit odd that on modern keyboards the $ symbol is to the left of the ^ symbol.  Is this a completely arbitrary decision? Does this come from some older keyboard layout? Is this convention used because some older tool decided to do things this way?  Regardless of the answer, are there primary sources that document this?
26073
Why in Linux (Debian 8)  touch 1.cpp 1.h find . -name "*.cpp" -o -name "*.h" -exec echo {} \;   outputs only 1.h while  find . -name "*.cpp" -o -name "*.h"   outputs both? Is it a bug or feature?