BASH - for cyklus pro ls -1 -a – Příkazový řádek – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

BASH - for cyklus pro ls -1 -a – Příkazový řádek – Fórum – Programujte.comBASH - for cyklus pro ls -1 -a – Příkazový řádek – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Doomista+1
Stálý člen
10. 3. 2016   #1
-
0
-

Ahoj,

do školního projektu potřebuju nějak naimplementovat skript, který by mi v aktuální složce projel všechny soubory i složky (i skrytý). Vyplodil jsem for loop s hlavičkou:
for X in $(ls -A -1)
respektive
for X in $(echo $(ls -A -1) | tr "\\n" "\n") 

kde pro každé $X musím ověřit, zda to je adresář nebo soubor a podle toho něco dělat. Mám ovšem drobný problém s tím, že takto zapsaný for si neumí poradit s názvy, které v sobě mají mezery (a raději se nezmiňuji o souborech, které mají ve svém názvu hvězdičku).

Netuší někdo, jak to nějak lidsky vyřešit? Zadání zakazuje dočasné soubory (přes ně bych to uměl vyřešit) a skript musí být čistě shellový (ani bashismy nesmíme použít, natožpak třeba python skript).

Díky předem za rady

Nahlásit jako SPAM
IP: 2a00:1028:83a0:33ea:70f1:...–
Na vše stačí iostream...
KIIV
~ Moderátor
+43
God of flame
10. 3. 2016   #2
-
0
-

 Akorat uz netusim, co vsechno jsou bashizmy... Skryty jsou horsi:  */ .*/

for I in */ .*/; do
  echo \"$I\"
done;

#nebo neco takoveho?

for I in * .*; do
  if [ -d "$I" ]
  then
    echo \"$I\"
  fi
done;

jen se jeste musis zbavit  . a ..

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Řešení
KIIV
~ Moderátor
+43
God of flame
10. 3. 2016   #3
-
0
-
Vyřešeno Nejlepší odpověď

nebo i neco jako:

ls -A -b |
while read dir; do
  if [ -d "$dir" ]
  then
    echo \"$dir\";
  fi
done;
Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Doomista+1
Stálý člen
12. 3. 2016   #4
-
0
-

#3 KIIV
jo, tohle je ono, díky moc!

Nahlásit jako SPAM
IP: 2a00:1028:83a0:33ea:1d2d:...–
Na vše stačí iostream...
Doomista+1
Stálý člen
12. 3. 2016   #5
-
0
-

#3 KIIV
No, úplně to problémy neřeší. Sice to perfektně vyhodnocuje názvy s mezerama, ale z nějakého důvodu to startuje subshell, či co, takže pokud uvnitř toho while cyklu změním hodnotu globální proměnné, tak se mi ta proměnná nezmění (je změněná  pouze po dobu průběhu cyklu)

Nahlásit jako SPAM
IP: 2a00:1028:83a0:33ea:1d2d:...–
Na vše stačí iostream...
q
~ Anonymní uživatel
219 příspěvků
13. 3. 2016   #6
-
0
-

Můžeš zkusit "process substitution" (viz man).

while read dir; do ...; done < <(ls ...)
Nahlásit jako SPAM
IP: 213.211.51.–
q
~ Anonymní uživatel
219 příspěvků
13. 3. 2016   #7
-
0
-

Aha, bez bashismu. Tak to z hlavy nevím.

Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

Podobná vlákna

Bash — založil Alex

Bash - sort — založil nashe

BASH připojený stderr? — založil Jozin

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý