我有几千张图片保存为需要删除的日志。
为了避免rm的限制并在多个服务器上执行此操作,我使用了以下代码
Net::SSH::Multi.start(:on_error => :ignore) do |session|
# define servers in groups for more granular access
session.group :app do
session.use 'example@example', :password=> 'example'
end
# execute commands on a subset of servers
session.with(:app).exec "find /tmp/motion -maxdepth 1 -not -name 'lastsnap.jpg' -print0 | sudo xargs -0 rm"
end
ls -l lastsnap.jpg显示lastsnap.jpg链接到另一个文件,就像这样
30 Jun 3 08:18 lastsnap.jpg - > 81-20140603081840-snap.jpg
由于我上面提到的日志记录方案,这个其他文件会不断更改。
重申这个问题,如何删除所有其他非lastsnap.jpg及其链接文件的记录文件。
感谢您的帮助:)
答案 0 :(得分:0)
cd /tmp/motion
ls -1 | grep -v -E '$(basename `find . -lname lastsnap.jpg`)|lastsnap.jpg' | while read n ; do rm -rvf $n ; done
根据评论编辑
cd /tmp/motion; rm -rvf $(ls -1 | grep -v -E "$(basename `find . -lname lastsnap.jpg`)|lastsnap.jpg")
注意:确保您的文件名中没有空格。另外,这种方法不起作用,需要修改才能容纳文件名中的空格。
答案 1 :(得分:0)
我使用find命令编写了一个逻辑。检查它对你有用。 我的目录包含以下文件
pyramid-stone.jpg
tallest_water_slide.jpg
SAOLA.JPG
testnap.jpg
silicon_valley_talent.jpg
The_Organic_Battery_From_Japan.jpg
其中testnap.jpg是一个链接
testnap.jpg - >棱锥stone.jpg
所以我写了一个小的awk脚本来获取链接名称和指向
的位置IG1=`ls -l | grep ^l | awk '{printf $(NF-2);}'`
IG2=`ls -l | grep ^l | awk '{printf $(NF);}'`
然后我使用find命令打印所有jpg而不是链接
find . -type f \( -iname "*.jpg" ! -iname $IG1 ! -iname $IG2 \)
OP
./SAOLA.JPG
./silicon_valley_talent.jpg
./tallest_water_slide.jpg
./The_Organic_Battery_From_Japan.jpg
注意:您已在find命令
之后添加rm以删除文件