使用bash / regex重命名特定目录中的文件

时间:2017-07-11 18:31:34

标签: bash macos

我正在尝试使用LaunchControl创建一些hotfolders,并且在脚本的一部分中,如果符合特定条件,我希望重命名特定目录中的文件。我遇到的问题不在于重命名部分,而在于让脚本调用目录。我在网上找到的所有脚本或文章只能帮助重命名文件,而不是在重命名脚本中正确调用目录路径。似乎不会那么难,但我无法解决它。

这是我到目前为止所尝试的内容,它什么也没做。如果我虽然CD到目录,并省去了调用目录的部分,它将重命名文件。

find . -mindepth 3 -type f -iregex '.*/Volumes/COMMON-LIC-PHOTO/ASPERA/ASPERA_STAGING/.*' -print0 |
xargs -0 rename -v 's/([0-9]*)_LK/$1_standard/' \;

2 个答案:

答案 0 :(得分:1)

在脚本开头使用类似的内容:

#!/bin/bash

target_directory=/Volumes/COMMON-LIC-PHOTO/ASPERA/ASPERA_STAGING
cd "$target_directory" || {
    echo "Error cd'ing to $target_directory" >&2
    exit 1
}

...然后取消-iregex命令的find部分。关于此的一些注意事项:

  • find .在当前目录下搜索,如果您未在脚本中设置该内容,则无法知道它是什么?我会的。如果你从根目录(" /")运行它,它会搜索你有权使用的每个目录和文件(为那些你没有的人抛出错误),然后丢弃目标目录中不包含的内容;只搜索目标目录要好得多。您也可以使用find "$target_dirctory"完成此操作。

  • 在上面的代码片段中,我假设该目录已知且已修复,因此它可以直接包含在脚本中。如果情况并非如此,则需要更复杂的设置才能正确设置。

  • 我在cd命令中添加了错误检查 - 在脚本中使用cd时,您应始终执行此操作;否则,如果出现问题,脚本的其余部分将在错误的目录中执行,可能会产生奇怪/破坏性后果。实际上,我更倾向于避免在脚本中使用cd,而只使用显式路径 - 它通常更安全,更简单。

答案 1 :(得分:1)

如果您的find版本具有-execdir功能,那么您可以执行此类操作(我现在无法测试):

find . -mindepth 3 -type f -iregex '.*/Volumes/COMMON-LIC-PHOTO/ASPERA/ASPERA_STAGING/.*' -execdir rename -v 's/([0-9]*)_LK/$1_standard/' {} \;

注意结尾附近的{},它表示匹配的路径。 -execdir标志在匹配文件的目录中执行了该命令。