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命令将终止。因此,您可以将其转义为\所以你得到了{}
这意味着只有母公司sellfind
会解释该
作为“终止”,因此parenfind
命令可以通过-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命令将终止。因此,您可以将其转义为\所以你得到了{}
这意味着只有母公司sellfind
会解释该
作为“终止”,因此parenfind
命令可以通过-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命令将终止。因此,您可以将其转义为\所以你得到了{}
这意味着只有母公司sellfind
会解释该
作为“终止”,因此parenfind
命令可以通过-exec
成功运行迭代命令,而无需停止该子shell命令。仔细阅读
这应该可以:
find . -depth -name "*.yml.sample" -exec sh -c 'cp -p "$1" "${1%.yml.sample}.yml"' _ {} \;
第一个*.yml.sample
通过find
查找文件。然后在-exec
部分之后,通过cp
获取find
vi的结果,神奇的事情发生了