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 *?


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 {} +

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.