У меня есть Ноутбук Пумы OSX, подключенный с и система Ubuntu 11.10 и попробованный для копирования той .csv
файл с машины OSX на машину Ubuntu. Я остановил передачу файлов, поскольку я понял, что она создала несколько пустых файлов в целевой папке.
У меня теперь есть несколько сотен файлов, находящихся там, который я не могу удалить использование:
sudo find . -name "*.csv" | xargs /bin/rm
Это говорит, что файл не существует.
Не использовать xargs
без -0
.
(Да, существуют другие безопасные способы использовать xargs
, но если Вы заботитесь о них, считайте их в другом месте. Если Вы не хотите запомнить много опций и сценариев, просто не используйте xargs
, так или иначе обычно существует лучший путь.)
Проблема с xargs
тот его вход, должен быть заключен в кавычки специфическим способом, которым не производит никакой другой инструмент. В частности, это не может справиться с пробелами в именах файлов. Вы не говорите, что ошибка (для дальнейшего использования, сообщения об ошибках вставки копии), но возможности состоят в том, что одни из имен файлов соответствия содержат пространство и xargs, дросселируемый на ней.
xargs -0
справляется с любым странным символом, который Вы можете иметь в имени файла. Передача -print0
кому: find
заставить его распечатать имена в правильном формате:
find . -name "*.csv" -print 0 | xargs -0 rm
Отметьте это sudo find …
только выполнения find
управляйте как корень, не rm
команда. Если Вы хотите работать rm
как корень, использовать
find . -name "*.csv" -print0 | sudo xargs -0 rm
В соответствии с Ubuntu (и также под OSX), можно использовать find
встроенный -delete
опция удалить соответствие файлам.
find . -name "*.csv" -delete
Если Вы знаете, что файлы, которые Вы хотите удалить, пусты, лучше сделайте find
команда только ищет пустые файлы, так, чтобы Вы случайно не удаляли другие файлы.
find . -name "*.csv" -type f -empty -delete