linux basename目录,linux – 在find -exec中使用basename和full path

要查看执行查找时发生的情况,只需键入set -xv即可

-x:在执行时打印命令及其参数.

-v:在读取时打印shell输入行.

这是我有的:

find . -name "*.xml" -exec echo {} \;

给出输出:

./log.xml

./svnLog.xml

当我尝试:

set -xv

find . -name "*.xml" -exec echo {} \;

我明白了:

find . -name "*.xml" -exec echo {} \;

+ find . -name '*.xml' -exec echo '{}' ';'

./log.xml

./svnLog.xml

然后找到执行回显传递找到的文件名而不是litteral:'{}’

但是当您向{}添加内容时,如下所示:

find . -name "*.xml" -exec echo something{} \;

+ find . -name '*.xml' -exec echo 'something{}' ';'

something{}

something{}

这里对我所拥有的2个xml文件执行两次echo,并且因为没有更多'{}’是exec的参数列表,所以它不会被替换.所以我们找到了每个文件的echo’something {}’.

为了解决这个问题,您可以考虑执行echo传递给它的文件名作为参数,例如:

sh -xvc 'echo sothing/$0' filename

我们已经知道什么是-x和-v. -c是从它后面的字符串中获取命令(man sh)

结果是:

sh -xvc 'echo somthing/$0' filename

+ sh -xvc 'echo somthing/$0' filename

echo somthing/$0

+ echo somthing/filename

sothing/filename

我在”之间使用’echo somthing / $0′,以便$0不会被当前的shell扩展.尝试用“”,你会看到$0的扩展;)

因此,要回到“问题”,查找应格式如下:

find . -name "*.xml" -exec sh -xvc 'echo sothing/$0' {} \;

我们会得到:

find . -name "*.xml" -exec sh -xvc 'echo sothing/$0' {} \;

+ find . -name '*.xml' -exec sh -xvc 'echo sothing/$0' '{}' ';'

echo sothing/$0

+ echo sothing/./log.xml

sothing/./log.xml

echo sothing/$0

+ echo sothing/./svnLog.xml

sothing/./svnLog.xml

我们可以看到,find会执行shell cammand echo sothing / $0传递给它'{}'(由find找到的文件名替换)所以我们得到了所需的echo sothing /./ log.xml

设置xv以删除详细模式

我们可以得到:

find . -name "*.xml" -exec sh -c 'echo "cp $0 someWhereElse/$0"' {} \;

cp ./log.xml someWhereElse/./log.xml

cp ./svnLog.xml someWhereElse/./svnLog.xml

所以在你的情况下,你只需要在子shell中执行副本(添加sh或bash或者在exec之后你喜欢shell)并让find将文件名作为parapeter传递给它;)

find /home/mine -iname "*.png" -exec sh -c 'cp $0 /home/mine/pngcoppies/copy/$0' {} \;

希望这可以帮助我,并为我的英语执行.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值