首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用find将目录重命名为回收站目录

使用find将目录重命名为回收站目录
EN

Unix & Linux用户
提问于 2018-06-17 14:06:36
回答 1查看 40关注 0票数 0

下面是检查路径中任何超过1天并且与名称条件匹配的文件夹。如果找到该文件夹,则将该文件夹移动到“垃圾”文件夹。

代码语言:javascript
复制
find /Users/myname/Desktop/backups/websites/testwebsite.co.uk -maxdepth 1 -type d -mtime +1 -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' -exec mv {} /Users/myname/Desktop/backups/trash \;

我需要修改文件夹名,在末尾包含“_renamed”。

我想我可以使用mv中的大括号,但现在我意识到这也需要完整的文件夹路径。

代码语言:javascript
复制
find /Users/myname/Desktop/backups/websites/testwebsite.co.uk -maxdepth 1 -type d -mtime +1 -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' -exec mv {} /Users/myname/Desktop/backups/trash/{}_renamed \;

我是否也可以修改文件夹路径而不复制路径?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-06-17 14:16:16

是的,find使用路径名,而不是文件名。

有两种直接的解决办法:

  1. 您可以提取路径名的文件名部分,并在mv使用的目标路径名中使用它。查找/Users/myname/Desktop/backups/websites/testwebsite.co.uk \ -maxdepth 1 -type d -mtime +1 \ -name‘-’\ -exec sh -c 'mv "$1“"/Users/myname/Desktop/backups/trash/${1##*/}_renamed"‘sh {};’在这里,${1##*/}$( basename "$1" )相同,$1findsh -c脚本的路径名。
  2. 如果您的-execdir实现支持-exec,您可以使用find代替它。使用-execdir,给定的命令将在查找到的项的父文件夹中执行,{}将是项的basename (带有BSD find)或以./为前缀的basename (带有D17 find)。查找/Users/myname/Desktop/backups/websites/testwebsite.co.uk \ -maxdepth 1 -type d -mtime +1 \ -name‘-’\ -execdir mv {} /Users/myname/Desktop/backups/trash/{}_renamed ';‘

相关信息:

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/450292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档