当我们在本地开发时,我们将“.dev”或“.prod”附加到应该仅分别对开发/生产服务器可用的文件中。
我想做的是;在将站点部署到服务器之后,以递归方式查找具有“.dev”后缀的所有文件(例如)并将其删除(重命名文件)。我将如何进行此操作,最好完全在shell中(没有脚本),以便将其添加到我们的部署脚本中?
我们的服务器运行Ubuntu 10.04。
答案 0 :(得分:3)
尝试此操作(不完全仅限shell,需要find
和mv
实用程序):
find . '(' -name '*.dev' -o -name '*.prod' ')' -type f -execdir sh -c 'mv -- "$0" "${0%.*}"' '{}' ';'
如果您拥有rename
和xargs
实用程序,则可以加快速度:
find . '(' -name '*.dev' -o -name '*.prod' ')' -type f -print0 | xargs -0 rename 's/\.(dev|prod)$//'
两个版本都应该使用任何文件名,包括包含换行符的文件名。
答案 1 :(得分:1)
for file in `ls *.dev`; do echo "Old Name $file"; new_name=`echo $file | sed -e 's/dev//'` ; echo "New Name $new_name"; mv $file $new_name; done
在我最近使用的一个示例中,此代码查找以new.xml结尾的任何文件更改文件名中的日期(文件名的格式为xmlEventLog_2010-03-23T11:16:16_PFM_1_1.xml),删除从名称中重新_new并将文件名重命名为新名称:
for file in `ls *new.xml`; do echo "Old Name $file"; new_name=`echo $file | sed -e 's/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}/2010-03-23/g' | sed 's/_new//g'` ; echo "New Name $new_name"; mv $file $new_name; done
这是你想要的东西吗?
答案 2 :(得分:0)
它完全未经测试,但这应该适用于您选择的POSIX类外壳:
remove-suffix () {
local filename
while read filename; do
mv "$filename" "$(printf %s "$filename" | sed "s/\\.$1\$//")"
done
}
find -name '*.dev' | remove-suffix .dev
注意:在非常不寻常的情况下,您的一个或多个文件名包含换行符this won't work。
答案 3 :(得分:0)
find /fullpath -type f -name "*.dev"|sed 's|\(.*\)\(\.pdf\)|mv & \1.sometag|' | sh