Le mie soluzioni raccomandate:
find . -mindepth 1 -maxdepth 1 -type d '(' -exec mkdir -- '{}'/pictures \; -o -exec printf 'Could not create: [[%s/pictures]] ??\n' '{}' \; ')';
o
(for d in ./* ; do [ -d "$d" ] && { mkdir -- "$d"/pictures || printf 'Could not create [[%s/pictures]]... permissions problem, disk is full?\n' "$d";};done;);
o
(for d in * ; do [ -d "$d" ] && { mkdir -- "$d"/pictures || printf 'Could not create [[%s/pictures]]... permissions problem, disk is full?\n' "$d";};done;);
Quanto segue è un esempio:
(for d in ./* ; do [ -d "$d" ] && { mkdir "$d"/pictures || printf 'Could not create [[%s/pictures]]... permissions problem, disk is full?\n' "$d";};done;);
Quest'ultimo funzionerà, ma non lo consiglio, è qui per mostrare come si usa ./* invece di * può aiutare a ridurre i rischi in alcuni casi come espansione per ./* sarà lo stesso di * ma con prefisso ./ quindi sono anche percorsi validi e anche se qualcuno di questi valori viene usato con noncuranza come in mkdir "$d"/pictures, non causerà problemi (o meno problemi, a seconda del contesto).
Tutti funzioneranno con nomi che contengono (spazio), schede, CR, LF ... QUALSIASI CARATTERE nei nomi (eccetto /e questo perché non è consentito nei nomi, solo per separare un nome dall'altro nel percorso e come directory principale). Quindi, fondamentalmente, funzionerà con qualsiasi percorso.
A tutti quelli che hanno letto le risposte che usano le variabili per i nomi dei file system: non seguire quegli esempi, al momento di scrivere sono tutti sbagliati, e c'è un problema comune in tutti loro: le variabili non sono citate ma in tutti i casi qui dovrebbero (Se non c'è alcun carattere problematico nei nomi, farà lo stesso, ma anche in questo caso è buona norma citarli).
Ma questo non si applica solo alle variabili contenenti nomi di file system, ogni sostituzione di variabile singola dovrebbe essere quotata quando possibile.
Ci sono pochissime circostanze in cui non è necessario citare una variabile di shell; e in tutte le variabili il contenuto dovrebbe essere triplicato, in quelle situazioni non si può essere troppo prudenti. Queste circostanze sono molto rare e possono essere evitate quasi sempre.
C'è un'eccezione a questo: qui-documenti, le sostituzioni al loro interno si comportano come se fossero già citate, le sostituzioni all'interno delle sostituzioni qui dentro - i documenti si comportano normalmente.
(*) Ho già visto questo particolare cancro diffondersi a sufficienza, e troppe persone chiedono perché un comando si interrompe solo in alcuni casi / percorsi ... e viene "aiutato" riscrivendo metà dello script quando un paio di " avrebbe riparato la linea incriminata.
Penso che prenderò "Cito le vars e le sostituzioni come se non ci fosse un domani!" stampato su una maglietta.).
Al momento in cui scrivo, e IMHO non c'è una sola risposta accettabile (accettabile senza obiezioni) alla domanda, e questo è inaccettabile!
Nell'ultima riga della domanda, OP ha chiesto come mkdir */pictures e lo prendo come una petizione per una soluzione generica che non fa ipotesi sui nomi delle sottodirectory.
Il secondo blocco di codice dalla risposta di Nelson ( mkdir {1..777}/pictures; ) funziona e non contiene errori né cattive pratiche (se non contiamo la forzatura dell'uso di bash come xD), ma funzionerà solo nello scenario ESATTO descritto nella prima parte della domanda e solo in bash o altre implementazioni di shell {n..m} rinforzare l'espansione per la generazione basata su sequenza di più argomenti da uno. Il primo blocco di codice in quella risposta merita solo di essere ignorato, è terribilmente sbagliato.
Quello di mdpc, edito da Gareth è abbastanza accettabile, quasi perfetto:
find . -mindepth 1 -maxdepth 1 -type d -exec mkdir {}/pictures \;
nonostante il fatto che usarlo come-potrebbe finire in un massacro; ma può essere reso perfetto modificandolo in modo che assomigli:
find . -mindepth 1 -maxdepth 1 -type d -exec mkdir -- '{}'/pictures \;
(È il primo nella lista di soluzioni nella mia risposta).
Include -- tra le opzioni (flag) per mkdir (o mkdir stesso) e l'argomento:
È buona norma farlo sempre quando il carattere iniziale del primo argomento non è codificato nel comando per impedirgli di tentare di analizzare l'argomento come un'opzione potenziale (flag). Questo può essere fatto con quasi tutti i comandi (ci sono alcune eccezioni, trovare se stesso è ovvio).
Nota che ho citato {}, è più corretto da usare '{}', o \{\}, dal momento che in questo modo non avrà alcun significato speciale per nessun guscio di posix, nemmeno per quelli schifosi.
In breve: solo due soluzioni non contengono errori, ma si usa un "bashismo" quindi non funzionerà in molte shell, e l'altra potrebbe essere più corretta (non abbastanza per far sì che le persone imparino correttamente lo script-fu da ), abbastanza deludente. Avevo aspettative troppo alte credo ...
Non sto dicendo che nessuna risposta funzionerà per quello scenario ESATTO, la maggior parte lo faranno, ma sicuramente la maggior parte di esse non è un codice corretto (non mi riferisco alla sintassi, non solo almeno) e / o include cattive pratiche di qualche tipo (alcuni di essi sono anche vere atrocità).
Fonti: una sorta di ossessione per gli standard e la correttezza del codice e la documentazione di http://www.opengroup.org/ , dash uomo, uomo bash e anche le profondità di Internet! : ma le fonti attendibili, non le risposte di non-pari-know-how-to-quote-correttamente-ragazzi ... (ci sono almeno un paio di risposte che sembrano così in questa domanda, nessuna offesa intesa, nessuno è nato sapendo tutto).
bashlo scripting conta come programmazione?