Załóżmy, że mam taką strukturę katalogów:
$ [~ / ćwiczenie] ls a / b / c / d /
Teraz chcę utworzyć katalog tmp1
we wszystkich podkatalogach practice
i robię to:
$ [~ / praktyka] mkdir * / tmp1 mkdir: nie można utworzyć katalogu `* / tmp1 ': Brak takiego pliku lub katalogu
Następnie próbuję -p
przełączyć i kończę na katalogu o nazwie *
z podkatalogiemtmp1
$ [~ / praktyka] mkdir -p * / tmp1 $ [~ / ćwiczenie] ls * / a / b / c / d /
Wiem, że użycie -p
przełącznika polega na tworzeniu wielu nieistniejących katalogów. Pomyślałem, że to może pomóc.
Jak utworzyć tmp1
we wszystkich podkatalogach jednocześnie?
Jeśli można to zrobić, w jaki sposób przedłużyć go do tworzenia \tmp1
, \tmp2
, \tmp3
w \a
, \b
i \c
naraz?
Edit: Brakowało mi wspomnieć, że katalogi nie muszą być proste i celem, jak a
, b
, c
itd., A katalog ma zostać utworzony niekoniecznie jest jak tmp1
, tmp2
.
$ [~ / ćwiczenie] ls pies / kot / szczur /
W nich chciałbym mieć coś takiego
$ [~ / ćwiczenie] ls * pies: czerwony niebieski/ kot: czerwony niebieski/ szczur: czerwony niebieski/
Odpowiedzi:
Z globami :
UWAGA
*/
globuJeśli chcesz utworzyć wiele podkatalogów jednocześnie:
for dir in */; do mkdir -- "$dir"/{tmp1,foo,bar,qux}; done
źródło
for i in */; do mkdir "$i/itemone" "$i/itemtwo"; done
wiele nazw katalogów, które nie są uporządkowane?źródło
Z GNU lub BSD * znajdź:
lub używając rozszerzenia parametrów:
* Obejmuje OS X
źródło
find . -name . -o -prune -type d -exec sh -c 'exec mkdir "$1/newdir"' sh {} \;
Nie na temat, ponieważ wspominasz
bash
, ale dla przypomnienia , z zsh zrobiłbyś:$^var
włącza nawiasy klamrowe dla rozszerzenia tablicy. To przypominarc
„s^
operatora irc
(lub jego pochodnaes
), można napisać:Należy jednak pamiętać (i to samo dotyczy podanych tutaj rozwiązań bash), że w rozwiązaniu rc
dirs
zawierałyby również dowiązania symboliczne do katalogów. W rozwiązaniu zsh zmień*(/)
na,*(-/)
jeśli chcesz dołączyć dowiązania symboliczne do katalogów.źródło
-p
flagi.Przenośnie, zapętlaj katalogi nadrzędne:
Dodaj
--
po,mkdir
jeśli możesz mieć katalogi, których nazwa zaczyna się od-
.W Zsh możesz to zrobić jednym poleceniem za pomocą
e
kwalifikatora glob :ale szybciej jest wpisać to jako dwa polecenia:
źródło
mkdir -- whatever
i pomiń,--
jeśli zamierzasz rozszerzyć wszystko, co może być wzięte za opcjemkdir
polecenia”. Nie ma sensu--
tutaj pomijać . W przypadku PO może nie być to problemem, ale w ogólnym przypadku jest to jeden problem. Myślę, że mamy obowiązek uczyć tutaj poprawnej i bezpiecznej składni.--
i cytaty oraz duże ostrzeżenia, gdy znaki nowej linii nie są obsługiwane. W kontekście wiersza poleceń wolę pokazywać szybką wersję, która najpierw działa w praktyce, a wersję kuloodporną jako uzupełnienie.Możesz to zrobić w ten sposób:
źródło
Odmiana odpowiedzi sputnick, która pozwala uniknąć plików spoza katalogu:
źródło
if [ -d "$x" ];…
?Jest to dobry ze starych Unix Masters (testowany na FreeBSD 10.1), jeśli chcesz kontrolować wersję (z zablokowanym RCS: ci -l z krótkim komentarzem jako ir: do pierwszej wersji) plików konfiguracyjnych / etc / * na ~ / .his / etc
źródło
Powinno być \! nazwa „RCS” i działa najlepiej przy pierwszym zameldowaniu.
sudo znajdź ~ / .his / etc \! -nazwa „RCS” -ls
sudo znajdź -d ~ / .his / etc \! -nazwa „RCS” | xargs sudo ci -l -mir -t-ir
Ten ostatni działa również bardzo dobrze w przypadku częściowego filtrowania całej zawartości RCS w nazwie pliku:
sudo znajdź -d ~ / .his / etc -type f | grep -v RCS | xargs sudo ci -l -mir -t-ir
źródło
to dla mnie wielka pomoc. musiałem utworzyć zestaw podkatalogów w wielu folderach i coś takiego:
działał świetnie, z wyjątkiem przypadku napotkania białej przestrzeni. czy istnieje sposób na zignorowanie spacji w
*/*/
części argumentów?źródło