Ahoj, neporadil by mi někdo jak dostat do cyklu všechny názvy souborů z daného adresáře (bez cesty) pro níže uvedenou verzi bash? Díky
for id in $(find ~/cesta -printf '%f\n')
do
...
done
Dostanu chybu:
find: -printf: unknown primary or operator
bash --version
GNU bash, version 3.2.57(1)-release (arm64-apple-darwin21)
Copyright (C) 2007 Free Software Foundation, Inc.
Pod macOS je starý find, který nemá tolik možností jako GNU find. Řešením je použít volby -print nebo -print0 a adresáře z cesty odstranit v cyklu příkazem basename. Tenhle příkaz v macOS je.
Pokud vím, tak Bash napřed vyhodnotí ten příkaz $(find ), takže tahle technika je vhodná pro menší počet souborů. V opačném případě je lepší nechat find ten výstup posílat do roury, jak zde lidé navrhují.
Také je třeba vědět, jak se ten skript bude chovat, když jména budou obsahovat mezery nebo techniky "command injection".