Редактировать Я пропустил точку ls -t
.
Могу ли я предложить сделать это намного проще, например,
find /home/backups \
-type f -iregex '.*\.t?gz$' \
-mtime +60 -exec rm {} \;
, который удалит любой соответствующий файл старше определенного возраста (в примере 60 дней)
Вы использовали tail
, но не указали его для поиска нулевых разделителей.
В любом случае, вот утилита, которую вы можете использовать для возврата последнего элемента, разделенного 0:
#include <string>
#include <iostream>
#include <cstdio>
int main(int argc, const char *argv[])
{
std::cin.unsetf(std::ios::skipws);
if (! (freopen(NULL, "wb", stdout) && freopen(NULL, "rb", stdin) ))
{
perror("Cannot open stdout/in in binary mode");
return 255;
}
std::string previous, element;
while (std::getline(std::cin, element, '\0'))
{
previous = element;
// if you have c++0x support, use this _instead_ for performance:
previous = std::move(element);
}
std::cout << previous << '\0' << std::flush;
}
Используйте его как
find /home/backups -type f \( -name \*.tgz -o -name \*.gz \) -print0 | ./mytail | xargs -0 rm