Wie berühre ich rekursiv Dateien, die einem Muster entsprechen?

8

In meinem Verzeichnis ~ / docs möchte ich alle Dateien "berühren", die mit .txt enden

Wie kann ich das machen?

Steve McLeod
quelle

Antworten:

20

Mit find:

find ~/docs -name "*.txt" -exec touch {} \;
  • Sie suchen in ~/docs
  • Die nameOption stimmt mit allen txtDateien überein -  execführt den Befehl touchfür den Dateinamen aus, der in ersetzt wird{}
  • \;beendet den Befehl und touchwird für jede gefundene Datei einmal aufgerufen

Hinweis:

  • Eine geringfügige Abweichung erstellt \+am Ende einen einzigen Befehl, der touchfür alle diese Dateien gleichzeitig ausgeführt wird. Dies ist nicht mit allen Befehlen möglich, funktioniert jedoch touchund spart Ihnen einige Anrufe, wenn Sie viele betroffene Dateien haben.
slhck
quelle
4
{} \+wäre hier besser ... touchkann viele Dateinamen in seiner Kommandozeile verarbeiten, so werden beispielsweise mit 10.000 Dateien und {} \; 10.000 Aufrufen an touch... Using {} \+wird touchnur einmal aufgerufen (abhängig vom verfügbaren Speicher) ... hier ist ein Auszug aus der Manpage von find : -exec command {} + ... The command line is built in much the same way that xargs builds its command lines. Weitere Einzelheiten finden Sie in der man findDokumentation.
Peter.O
@ Peter.O Stimmt, nur eine Gewohnheit von mir, die andere Syntax zu verwenden.
Slhck
@slhck: Und viel langsamer mit höherem Overhead.
Hallo71