Gibt es eine einfachere form zu finden. - name "* Teilzeichenfolge des Dateinamens* " unter Mac OS X und Linux?

Gibt es unter Mac OS X oder Linux eine einfachere Form des Befehls

find . -name "*substring_of_filename*"

Das heißt, alle Dateien mit Namen zu finden, die substring_of_filename innerhalb des aktuellen Verzeichnisses (oder eines anderen angegebenen Verzeichnisses) enthalten. Gibt es eine Möglichkeit, den Befehl kürzer und einfacher einzugeben, möglicherweise mithilfe eines Alias oder einer Funktion in Bash? Oder gibt es einen anderen einfach zu tippenden Befehl, der verwendet werden kann?

Wie:

findfile . substring_of_filename

(Hinweis: Die Frage, wie ursprünglich geschrieben verwendet app_config als Beispiel für substring_of_filename.)

Author: Arne Stenström, 2011-05-02

10 answers

Unter Mac OS X können Sie auch einen Alias mit mdfind einfügen .bashrc:

# mdfind uses Spotlight 
alias findf='mdfind -onlyin . -name'

findf app_config
 5
Author: chad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-05-07 18:01:35

Hier ist Ihre Bash-Funktion, setzen Sie es in .bashrc:

function findfiles { find "$1" -iname "*$2*"; }

(Beachten Sie, dass -iname die Suche groß-und Kleinschreibung macht. Wenn Sie das nicht wollen, verwenden Sie stattdessen -name.)

 3
Author: Janus Troelsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-12-05 11:33:57

Au contraire! Es gibt eine noch kompliziertere, aber eine, die funktioniert:

find . -name "*app_config*"

Der Punkt ist für gnu-find nicht notwendig:

find -name "*app_config*"

Aber Sie müssen die Asterixe maskieren, sonst werden sie von der Shell interpretiert, und Sie werden nur Dateinamen finden, die mit denen im aktuellen Verzeichnis übereinstimmen, die mit "app_config"übereinstimmen.

 2
Author: user unknown,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-05-02 14:53:22

Setzen Sie dies entweder in Ihre ~/.profile oder ~/.bashrc, nicht sicher, welche Mac verwendet:

findname () 
{ 
    find . -name "*$1*"
}

Dann rufen Sie die Funktion von findname name_of_file

Wenn Sie mehrere Wörter verwenden möchten, müssen Sie komplizierter werden..der einfachste Weg, den ich mir aus der Hand vorstellen kann, ist dies:

findname() 
{ 
    find .|grep $1|grep $2|grep $3|grep $4 
}

Das findet jede Datei in Ihrem aktuellen Verzeichnis, sucht nach String 1, sucht dann nach String 2 usw., bis es zu 4 kommt.

 1
Author: Matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-05-04 15:18:38

Anstatt dies in einer Bash, zsh, tcsh, sh usw. zu tun... skript Ich habe eine TextExpander Verknüpfung erstellt. I Typ sh≤Space≥ und TE Typen

Zu Finden . -iname "**"

Und setzt den cursor zwischen die Sterne.

 0
Author: Mark Thalman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-05-04 15:43:33

Warum nicht einfach locate unter OS X verwenden? Zugegeben, die locatedb wird standardmäßig nicht sehr oft aktualisiert, aber Sie können dies leicht ändern (ändern Sie die periodische Auftragsplanung unter OS X). locate ist ein BSDism, weiß nicht, ob es unter Linux ist oder nicht.

 0
Author: tamouse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-05-07 01:00:31

Auf den meisten Linux-Distributionen können Sie locate verwenden. Beispiel:

$ locate find | grep bin
/sbin/findfs
/usr/bin/find
/usr/bin/find2perl
/usr/bin/findsmb
/usr/bin/gst-typefind-0.10
/usr/bin/memdiskfind
/usr/bin/oldfind
/usr/bin/sane-find-scanner
/usr/include/c++/4.5/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp
/usr/include/c++/4.5/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp
/usr/include/c++/4.5/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp
 0
Author: Xenoactive,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-05-07 01:08:10

Wenn Sie bash 4 (mit shopt -s globstar) oder zsh:

prinftf %s\\n **/*substring_of_filename*
 0
Author: Lri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-03-28 17:16:58

Die Antwort lautet "Nein". Es gibt keine Abkürzung für ", finden Sie den Dateinamen mit substring im aktuellen Verzeichnis oder unter" in der GNU - find. Die Aliase, mit denen ich diese Einschränkung umgehen kann, lauten wie folgt (für zsh):

# find file in cwd by [S]ubstring, case [I]nsensitive, change to first sub[D]irectory
finds()   { find .  -name "*$**"; }
findsi()  { find . -iname "*$**"; }
findsid() { cd `find . -iname "*$**" | head -n1 | xargs dirname`; }

Der letzte ist mein Favorit. Diese können wie folgt verwendet werden:

> ls -R
.:
file1  File2  HOLEFILE  test

./test:
hello

(das ist das Testverzeichnis)

> findsi file
./HOLEFILE
./File2
./file1

> finds file
./file1

> finds le
./File2
./file1

> findsid ell
> ls
hello
 0
Author: Alex Hirzel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-04-24 09:42:25

Ich denke, nur grep kann es gut machen, keine Notwendigkeit für finden. Relevante Optionen von der Manpage:

 -l, --files-with-matches
          Suppress  normal  output;  instead  print the name of each input
          file from which output would normally have  been  printed.   The
          scanning  will  stop  on  the  first match.  (-l is specified by
          POSIX.)

 -H, --with-filename
          Print  the  file  name for each match.  This is the default when
          there is more than one file to search.

 -R, -r, --recursive
          Read all  files  under  each  directory,  recursively;  this  is
          equivalent to the -d recurse option.

Beachten Sie, dass selbst wenn-H der Standardwert ist, wenn mehr als eine Datei gesucht werden muss, ich Ihnen dennoch vorschlage, sie explizit zu verwenden. Dieser Schalter löst ein bestimmtes Problem von Ihnen, es ist besser, sich an dieses direkt verwandte Wissen zu erinnern als an den Edge-Fall (Durchsuchen mehrerer Dateien), wenn diese Option die Standardeinstellung ist.

So wird die grep-Version Ihres ursprünglichen find-Befehls aussehen wie diese:

grep -lHR app_config .
 -1
Author: vtest,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-05-07 19:48:02