Jak rekurencyjnie „dotykać” plików?

40

Muszę zmienić znacznik czasu około 5000 plików.

Wpisanie touch file1.txt, touch file2.txtweźmie mnie na zawsze.

Czy istnieje sposób na zrobienie czegoś w stylu touch -R *?

Unamata Sanatarai
źródło
1
miałeś na myśli to touch file{1..3}.txt?
Avinash Raj
2
Nie określiłeś, której powłoki używasz, ale w przypadku zsh touch **/*jest to wygodne.
Marc Glisse
@Marc Glisse Pamiętaj, że lista argumentów łatwo staje się zbyt długa.
bac0n
W bash musisz ustawić globstar, zanim będziesz mógł używać touch **
bac0n

Odpowiedzi:

71

Możesz użyć findpolecenia, aby znaleźć wszystkie swoje pliki i wykonać touchna każdym znalezionym pliku za pomocą-exec

find . -type f -exec touch {} +

Jeśli chcesz filtrować wyniki tylko dla plików tekstowych, możesz użyć

find . -type f -name "*.txt" -exec touch {} +
g_p
źródło
17
Sugeruję użyciu -exec„s +terminator (zamiast \;). Spowoduje to łańcuch wielu argumentów do każdej touchinstancji (do limitu argumentów systemowych), a zatem rozwinie się znacznie mniej (i prawdopodobnie będzie szybszy).
Oli
2
I na sucho, po prostu pomiń tę -exec touch {} +część, a wydrukuje na twoim terminalu, co mogłoby to mieć wpływ.
Alex
5
Dzięki, chociaż myślę, że „znajdź” brakuje jego pierwszego parametru. find . -type f -exec touch {} +
giltsl
Co jeśli chcę tylko zmienić czas dostępu, a nie czas modyfikacji? Czy powinno to być „znajdź -type f -exec touch -a {} +”?
weeo