Рекурсивно создать файл со случайным контентом с помощью GNU find - PullRequest
0 голосов
/ 28 мая 2018

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

.
|-- dir1
|   |-- 01
|   |   `-- file_00
|   |       
|   |-- 02
|   |   `-- file_00
|   |       
|   |-- 03
|   |   `-- file_00
|   |       
|   |-- 04
|       `-- file_00
|           
`-- dir2
    |-- 01
    |   `-- file_00
    |       
    |-- 02
    |   `-- file_00
    |       
    |-- 03
    |   `-- file_00
    |      
    `-- 04
        `-- file_00

Что я достиг:

mkdir {dir1,dir2}
mkdir ./{dir1,dir2}/{01,02,03,04}
touch ./{dir1,dir2}/{01,02,03,04}/file_00

Но когда я хотел добавить случайное число, $RANDOM достаточно случайно, с каждым file_00 я сталкивался с проблемами.Я попытался:

find . -type f -name 'file_00' -exec echo $RANDOM > {} \;

Но это создало файл с именем {} в рабочем каталоге, с таким же случайным числом, которое повторялось столько раз, сколько совпадений было find (или я так полагаю).

Как я могу написать случайное число для каждого file_00?


/dev/random доступно на WSL

1 Ответ

0 голосов
/ 28 мая 2018

небольшое улучшение, используйте mkdir -p и вам нужна только одна команда mkdir.

вызовите оболочку в директиве -exec:

find . -type f \
       -name file_00 \
       -exec bash -c 'for file; do echo $RANDOM > "$file"; done' bash '{}' +

или просто переберитеfind результаты

find . -type f -name file_00 -print0 | while IFS= read -d '' -r filename; do 
    echo $RANDOM > "$filename"
done
...