2016-06-22 2 views
2

У меня есть куча названий каталогов с использованием соглашения prefix.suffix. префикс является числовым и суффикс является буквенно-цифровой любой длины.
mkdir 123.abcdef
bash создать файл в каталоге, известна только часть имени каталога

префикс всегда уникален, но я не всегда знаю, что суффикс находится в bash выполнения сценария. В моем сценарии, как я могу написать bash, напишите в данный каталог, зная только префикс ?
Следующая не работает, но я пытался:
echo "itworks" > 123*/results.text

ответ

3

Glob часть каталогов в цикле на комках:

shopt -s nullglob 

for dir in 123*/; do 
    echo "itworks" > "${dir}results.text" 
done 

Вы можете также обеспечения соблюдения проверки того, что есть уникальный соответствующий каталог:

shopt -s nullglob 

dirs=(123*/) 
if ((${#dirs[@]} == 0)); then 
    echo >&2 "No dirs found!" 
    exit 1 
elif ((${#dirs[@]} > 1)); then 
    echo >&2 "More than one dir found!" 
    exit 1 
fi 

# Here you're good 
echo "itworks" > "${dirs[0]}results.txt" 
0

Вы можете принудительно оценить имя каталога с помощью подстановочных знаков, используя 'ls -d'

echo "itworks" > $(ls -d 123*)/results.txt 
+0

'ls' действительно бесполезно для этой задачи. 'echo 'itworks"> "$ (printf'% s '123 * /) results.txt" 'будет немного лучше. –

0
prefix='yourprefix' && find . -maxdepth 1 -type d -name "$prefix*" \ 
-exec echo "Hello" {}/results.txt \; 

должен это сделать.

Смежные вопросы