Wchodzenie do wielu katalogów w Uniksie i usuwanie konkretnego pliku

1

Mam listę katalogów, w których chcę wejść i usunąć określone pliki. Na przykład nazwy katalogów, które mam, są następujące:

091513
090213
082612
071611
020908
011009
...
062308

Każdy z tych katalogów zawiera 4 pliki, a ich nazwy to:

dealer_score_01.txt
dealer_score_02.txt
dealer_score_03.txt
dealer_score_04.txt

Chcę napisać skrypt, który przejdzie do każdego z tych katalogów i usunie:

dealer_score_01.txt
dealer_score_03.txt

Czy ktoś może mi w tym pomóc?

użytkownik255223
źródło
man find, Czytać execi nameczęści
Dawud

Odpowiedzi:

2

Nie musisz wchodzić do każdego katalogu osobno. Przekaż nazwy plików, które chcesz usunąć, findi usuń je za pomocą -deleteopcji.

find . -type f \
\( -name 'dealer_score_01.txt' -or -name 'dealer_score_03.txt' \) -delete

Pomiń, -deleteaby upewnić się, że usuwasz właściwe pliki.

slhck
źródło
Cześć Slhck, dziękuję za odpowiedź. Chcę usunąć te pliki tylko w niektórych katalogach. Jeśli użyję powyższego polecenia, usunę te pliki we wszystkich katalogach. Czy istnieje sposób usunięcia tylko w kilku katalogach poprzez określenie nazw katalogów, w których chcę usunąć te pliki?
user255223,
1
Można po prostu określić nazwy katalogów zamiast .na findrozkaz. Na przykładfind 091513 090213 -type f …
slhck 18.09.13
Ile katalogów mogę określić jednocześnie w poleceniu find? Mam ponad 200 katalogów, z którymi chcę to zrobić za pomocą ...
user255223 18.09.13
1
Możesz podać tyle, ile chcesz. Jak w ogóle uzyskać listę katalogów? W pliku tekstowym? Z polecenia? Może powinieneś wyjaśnić swoje pytanie i powiedzieć nam, co dokładnie musisz zrobić.
slhck 18.09.13
0

Jeśli masz już listę katalogów (jak sugerują twoje komentarze), możesz to zrobić za pomocą pętli. Jeśli lista katalogów jest, powiedzmy, w dir_list, i zakładając, że żaden z twoich katalogów nie zawiera nowych wierszy w ich nazwie:

while read -r dir; do
  rm -f "$dir"/dealer_score_0{1,3}.txt
done < dir_list
Eric Renouf
źródło