Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何在Linux中将所有.yml.sample文件复制并重命名为.yml?_Bash - Fatal编程技术网

Bash 如何在Linux中将所有.yml.sample文件复制并重命名为.yml?

Bash 如何在Linux中将所有.yml.sample文件复制并重命名为.yml?,bash,Bash,在bash中,我想复制Git存储库中的所有.yml.sample文件(递归),并将它们重命名为只有.yml扩展名 例如,test.yml.sample将被复制到test.yml 这是我所知道的最接近的,但我不清楚在复制时如何去掉文件名末尾的.sample find . -depth -name "*.yml.sample" -exec sh -c 'cp "$1" "${1%/.sample/}"' _ {} \; 这应该起作用: find . -depth -name "*.yml.samp

bash
中,我想复制Git存储库中的所有
.yml.sample
文件(递归),并将它们重命名为只有
.yml扩展名

例如,
test.yml.sample
将被复制到
test.yml

这是我所知道的最接近的,但我不清楚在复制时如何去掉文件名末尾的
.sample

find . -depth -name "*.yml.sample" -exec sh -c 'cp "$1" "${1%/.sample/}"' _ {} \;
这应该起作用:

find . -depth -name "*.yml.sample" -exec sh -c 'cp -p "$1" "${1%.yml.sample}.yml"' _ {} \;
第一个
*.yml.sample
通过
find
查找文件。然后在
-exec
部分之后,通过
cp
通过
$1
获取该
的结果,然后通过
${1%.yml.sample}.yml
设置复制文件的文件扩展名,其中
.yml.sample
是源扩展名,而
.yml
是新的目的地扩展

注意:我还添加了
-p
属性,以将源文件中的属性保留到复制的文件中。你可能不需要它,但我认为它在做这样的复制时会很有帮助

由于这个shell逻辑在
{}方面可能会令人困惑,其分解如下:

  • {}
    :如中所述,“其工作方式是bash将
    -c
    之后的参数作为参数,
    {}
    是必需的,以便将
    {}
    的内容分配给
    $1
    而不是
    l
  • \:当您使用
    -exec
    参数运行
    find
    时,之后发生的所有事情都将通过新的shell解析。这意味着主
    find
    命令在一个父shell中运行,而
    -exec
    之后的内容在另一个子shell命令中运行。如果您以
    {}的形式运行它,子shell命令将终止。因此,您可以将其转义为
    \{}
    这意味着只有母公司sell
    find
    会解释该
    作为“终止”,因此paren
    find
    命令可以通过
    -exec
    成功运行迭代命令,而无需停止该子shell命令。仔细阅读
这应该可以:

find . -depth -name "*.yml.sample" -exec sh -c 'cp -p "$1" "${1%.yml.sample}.yml"' _ {} \;
第一个
*.yml.sample
通过
find
查找文件。然后在
-exec
部分之后,通过
cp
通过
$1
获取该
的结果,然后通过
${1%.yml.sample}.yml
设置复制文件的文件扩展名,其中
.yml.sample
是源扩展名,而
.yml
是新的目的地扩展

注意:我还添加了
-p
属性,以将源文件中的属性保留到复制的文件中。你可能不需要它,但我认为它在做这样的复制时会很有帮助

由于这个shell逻辑在
{}方面可能会令人困惑,其分解如下:

  • {}
    :如中所述,“其工作方式是bash将
    -c
    之后的参数作为参数,
    {}
    是必需的,以便将
    {}
    的内容分配给
    $1
    而不是
    l
  • \:当您使用
    -exec
    参数运行
    find
    时,之后发生的所有事情都将通过新的shell解析。这意味着主
    find
    命令在一个父shell中运行,而
    -exec
    之后的内容在另一个子shell命令中运行。如果您以
    {}的形式运行它,子shell命令将终止。因此,您可以将其转义为
    \{}
    这意味着只有母公司sell
    find
    会解释该
    作为“终止”,因此paren
    find
    命令可以通过
    -exec
    成功运行迭代命令,而无需停止该子shell命令。仔细阅读
这应该可以:

find . -depth -name "*.yml.sample" -exec sh -c 'cp -p "$1" "${1%.yml.sample}.yml"' _ {} \;
第一个
*.yml.sample
通过
find
查找文件。然后在
-exec
部分之后,通过
cp
通过
$1
获取该
的结果,然后通过
${1%.yml.sample}.yml
设置复制文件的文件扩展名,其中
.yml.sample
是源扩展名,而
.yml
是新的目的地扩展

注意:我还添加了
-p
属性,以将源文件中的属性保留到复制的文件中。你可能不需要它,但我认为它在做这样的复制时会很有帮助

由于这个shell逻辑在
{}方面可能会令人困惑,其分解如下:

  • {}
    :如中所述,“其工作方式是bash将
    -c
    之后的参数作为参数,
    {}
    是必需的,以便将
    {}
    的内容分配给
    $1
    而不是
    l
  • \:当您使用
    -exec
    参数运行
    find
    时,之后发生的所有事情都将通过新的shell解析。这意味着主
    find
    命令在一个父shell中运行,而
    -exec
    之后的内容在另一个子shell命令中运行。如果您以
    {}的形式运行它,子shell命令将终止。因此,您可以将其转义为
    \{}
    这意味着只有母公司sell
    find
    会解释该
    作为“终止”,因此paren
    find
    命令可以通过
    -exec
    成功运行迭代命令,而无需停止该子shell命令。仔细阅读
这应该可以:

find . -depth -name "*.yml.sample" -exec sh -c 'cp -p "$1" "${1%.yml.sample}.yml"' _ {} \;
第一个
*.yml.sample
通过
find
查找文件。然后在
-exec
部分之后,通过
cp
获取
find
vi的结果,神奇的事情发生了