Jak rekurencyjnie dotykać plików pasujących do wzorca

8

W moim katalogu ~ / docs chcę „dotknąć” wszystkich plików z rozszerzeniem .txt

W jaki sposób mogę to zrobić?

Steve McLeod
źródło

Odpowiedzi:

20

Z find:

find ~/docs -name "*.txt" -exec touch {} \;
  • Szukacie w ~/docs
  • nameOpcja pasuje do wszystkich txtplików -  execwykona polecenie toucho nazwie pliku, który jest podstawiony w{}
  • \;kończy polecenie i touchzostanie wywołany raz dla każdego znalezionego pliku

Uwaga:

  • Niewielka odmiana, \+na końcu konstruuje jedno polecenie do uruchomienia touchna wszystkich tych plikach jednocześnie. Nie jest to możliwe w przypadku wszystkich poleceń, ale działa touchi oszczędza kilka połączeń, jeśli masz wiele plików, których to dotyczy.
slhck
źródło
4
{} \+byłoby lepiej tutaj ... touchmoże obsłużyć wiele nazw plików w wierszu poleceń, więc na przykład z 10 tysiącami plików i {} \; 10 tysiącami wywoła się touch... Używanie {} \+będzie wywoływać touchtylko raz (w zależności od dostępnej pamięci) ... Tutaj jest fragmentem znaleźć za roboczogodzinę stronie: -exec command {} + ... The command line is built in much the same way that xargs builds its command lines. man findDokumentacja zawiera więcej szczegółów .
Peter.O
@ Peter.O To prawda, po prostu mój zwyczaj używania innej składni.
slhck
@slhck: I znacznie wolniej przy większym obciążeniu.
Hello71,