我正在尝试在 linux 机器上查找和移动一大堆文件夹。
所有文件夹的名称都相同,所以我使用echo $RANDOM提供一个随机数来用作文件夹名称。
echo $RANDOM
每次运行时确实会输出一个随机数。然而,
find . -type d -name .AppleDouble -exec mv \'{}\' \'/raid/data/Storage/AppleDouble/`echo $RANDOM` \;
对每个文件夹使用相同的“随机”数,因此,只移动一个文件夹。
我认为问题是$RANDOM在find开始运行时会立即进行评估。我如何转义它,以便在选项开始运行$RANDOM之前不评估的值-exec(或者有什么更好的方法来做到这一点)?
注意:我在busybox上,所以我不能真正安装任何东西。
你是对的; 你没有引用它,所以它在构建find命令行时由 shell 评估。 但是,通常-exec不使用bash,因此如果您单引号或转义$它则它根本不会被扩展。
解决方案是调用bashinside -exec:
find . -type d -name .AppleDouble -exec bash -c 'echo $RANDOM' \;
Run Code Online (Sandbox Code Playgroud)
我不太确定问题到底是什么。
我最终放弃了,并编写了一个外部脚本来传递给find's -exec,这似乎有效。
我不知道为什么我不能将整个命令放在一行中。我的 busybox 和 bash 版本似乎有一些奇怪的错误(这是两者的旧版本。它是 2006 年的 busybox 1.1.0,以及年龄相似的 bash 3.00.16(我不能查找 bash 发布历史记录))。
| 归档时间: |
|
| 查看次数: |
915 次 |
| 最近记录: |