使用GNU find递归创建具有随机内容的文件

M. *_*rra 0 bash find windows-subsystem-for-linux

我的目的是快速创建如下所示的目录树:

.
|-- 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
Run Code Online (Sandbox Code Playgroud)

我完成的是:

mkdir {dir1,dir2}
mkdir ./{dir1,dir2}/{01,02,03,04}
touch ./{dir1,dir2}/{01,02,03,04}/file_00
Run Code Online (Sandbox Code Playgroud)

但是当我想追加一个随机数时,$RANDOM随机就足够了,每次file_00我遇到问题.我试过了:

find . -type f -name 'file_00' -exec echo $RANDOM > {} \;
Run Code Online (Sandbox Code Playgroud)

但是{}在工作目录中创建了一个名为的文件,其重复次数与find匹配的次数相同(或者我假设).

我怎么能给每个人写一个随机数file_00


/dev/random 可以在WSL上找到

gle*_*man 5

小改进,使用mkdir -p,你只需要一个mkdir命令.

在-exec指令中调用shell:

find . -type f \
       -name file_00 \
       -exec bash -c 'for file; do echo $RANDOM > "$file"; done' bash '{}' +
Run Code Online (Sandbox Code Playgroud)

或者只是迭代find结果

find . -type f -name file_00 -print0 | while IFS= read -d '' -r filename; do 
    echo $RANDOM > "$filename"
done
Run Code Online (Sandbox Code Playgroud)

  • 我使用带有`+`形式的`-exec`子句,这意味着find会将*multiple*filenames放入`{}`(查看查找手册页).当你执行`bash -c'...'arg1 arg2 arg3 ...`时,bash将第一个参数作为`$ 0`,第二个参数作为`$ 1`,依此类推.我使用"bash"把东西放到我们不关心的`$ 0`中,然后`for file; 做...`迭代超过1美元,2美元,...... (4认同)