Linux 前置符号链接文件名

Linux 前置符号链接文件名,linux,bash,function,for-loop,symlink,Linux,Bash,Function,For Loop,Symlink,我需要一个函数来前缀任何以“nfcapd”开头的文件名 原始文件集: /root/netflow3/nfcapd.201402090310 -> /a/b/nfcapd.201402090310 /root/netflow3/nfcapd.201402050400 -> /a/b/nfcapd.201402050400 /root/netflow3/nfcapd.201402100730 -> /a/b/nfcapd.201402100730 /root/netflow3/1.

我需要一个函数来前缀任何以“nfcapd”开头的文件名

原始文件集:

/root/netflow3/nfcapd.201402090310 -> /a/b/nfcapd.201402090310
/root/netflow3/nfcapd.201402050400 -> /a/b/nfcapd.201402050400
/root/netflow3/nfcapd.201402100730 -> /a/b/nfcapd.201402100730
/root/netflow3/1.nfcapd.201402100730  -> /a/e/nfcapd.201402100730
/root/netflow3/2.nfcapd.201402100730  -> /a/f/nfcapd.201402100730
前缀为“foo_u2;”:

我提出了一个可以为任何符号链接添加前缀的函数:

readonly PATH_CURRENT_SCRIPT="$(dirname $0)"

sym_rename () {
        local PATH_SOURCE_FILES=$1
        local prefix=$2

        [[ ! -d $PATH_SOURCE_FILES ]] && echo "path $dir not found!  Exiting...." && exit 1

        cd $PATH_SOURCE_FILES
        for f in * ; do mv "$f" "${prefix}_$f" ; done
        cd $PATH_CURRENT_SCRIPT
}
唯一的问题是,它在所有内容前加前缀:

前缀为“foo_u2;”:


如何将函数修改为仅前缀以“nfcapd”开头的符号链接文件名?

只需更改glob以匹配所需内容:

    cd $PATH_SOURCE_FILES
    shopt -s nullglob
    for f in nfcapd* ; do mv "$f" "${prefix}_$f" ; done
    shopt -u nullglob
    cd $PATH_CURRENT_SCRIPT

请注意,您的代码将为任何文件添加前缀,而不仅仅是符号链接。在重新命名之前,您可能需要考虑使用<代码> -h <代码>对每个文件进行测试。code>[[-h$f]]和&mv“$f”“${prefix}{u$f”。或者更具体地说,该文件是一个带有
-h
@chepner-Woops的符号链接,没有一路阅读问题。正如前面提到的
chepner
,如果您想避免出现问题,您应该明确地测试
[[-h$f]]和&mv…
,并可能引用您的变量。@Markku这不起作用。我收到一个错误,“mv:cannot stat`nfcapd*”:没有这样的文件或目录“@brakertech听起来好像在
$PATH\u SOURCE\u files
中没有匹配的文件,因此该模式被视为文本,而不是扩展为文件名列表。测试
$f
是否存在(如果合适,还有一个符号链接)可以避免这个问题。我已经更新了这种情况的答案——如果没有匹配的文件,设置
nullglob
选项将避免for循环。
/root/netflow3/foo_nfcapd.201402090310 -> /a/b/nfcapd.201402090310
/root/netflow3/foo_nfcapd.201402050400 -> /a/b/nfcapd.201402050400
/root/netflow3/foo_nfcapd.201402100730  -> /a/b/nfcapd.201402100730
/root/netflow3/foo_1.nfcapd.201402100730  -> /a/e/nfcapd.201402100730
/root/netflow3/foo_2.nfcapd.201402100730  -> /a/f/nfcapd.201402100730
    cd $PATH_SOURCE_FILES
    shopt -s nullglob
    for f in nfcapd* ; do mv "$f" "${prefix}_$f" ; done
    shopt -u nullglob
    cd $PATH_CURRENT_SCRIPT