Я не думаю, что имена ваших папок будут проблемой. Но я бы предложил использовать подстановку оболочки вместо find
, просто чтобы упростить синтаксис. Что-то вроде этого:
shopt -s globstar nullglob
destination=/path/to/thumbnails
cd /path/to/originalphotos
for i in **/*{jpg,JPG}; do
dirName=${i%/*}
file=$(basename "$i")
fileName="${file%.*}"
echo convert "$i" -auto-orient -resize 1920x1080\> \
--write "$destination/${fileName}_thumb.JPG"
done
Это относится как к файлам jpg
, так и к файлам JPG
, но обратите внимание, что все превью будут иметь вид .JPG
, независимо от того, были ли они изначально .jpg
или .JPG
. Если это проблема, вы можете сделать что-то вроде этого:
for i in **/*{jpg,JPG}; do
dirName=${i%/*}
file=$(basename "$i")
fileName="${file%.*}"
ext="${file##*.}"
echo convert "$i" -auto-orient -resize 1920x1080\> \
--write "$destination/${fileName}_thumb.$ext"
done
Вы можете использоватьfind
:
find /tmp/main -type d -exec touch {}/test.txt \;
И если вы хотите исключить папку /tmp/main
из результатов find
, используйте:
find /tmp/main ! -path /tmp/main -type d -exec touch {}/test.txt \;
или
find /tmp/main -mindepth 1 -type d -exec touch {}/test.txt \;
Подойдет простой цикл:
for dir in /tmp/main/*/; do
touch "$dir"/test.txt
done
/
в конце шаблона /tmp/main/*/
гарантирует, что если шаблон соответствует чему-либо, он будет соответствовать каталогу.
В bash
вы можете установить параметр оболочки nullglob
с помощью shopt -s nullglob
перед циклом, чтобы убедиться, что цикл вообще не запускается, если шаблон ничему не соответствует. Без установки nullglob
цикл все равно будет выполняться один раз с нерасширенным шаблоном в $dir
. Еще один способ исправить это — убедиться, что $dir
на самом деле является каталогом, прежде чем вызыватьtouch
:
for dir in /tmp/main/*/; do
if [ -d "$dir" ]; then
touch "$dir"/test.txt
fi
done
или, что то же самое,
for dir in /tmp/main/*/; do
[ -d "$dir" ] && touch "$dir"/test.txt
done