删除多个服务器上的文件+链接文件以外的所有内容(NET :: SSH :: MULTI)

时间:2014-06-23 03:55:10

标签: linux unix ssh net-ssh

我有几千张图片保存为需要删除的日志。

为了避免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及其链接文件的记录文件。

感谢您的帮助:)

2 个答案:

答案 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以删除文件