Я спробував бігти
locate *.orig | xargs rm
але воно сказало No such file or directory
Я бачив способи це зробити, find
але locate повертає повний шлях до об'єкта, так що це має бути можливим
Я спробував бігти
locate *.orig | xargs rm
але воно сказало No such file or directory
Я бачив способи це зробити, find
але locate повертає повний шлях до об'єкта, так що це має бути можливим
Відповіді:
Якщо назви файлів містять пробіли, які слід використовувати
locate -0 $something | xargs -0 rm
-0
,--null
Відокремте записи на виході, використовуючи символ ASCII NUL, замість того, щоб записувати кожен запис в окремий рядок. Ця опція розроблена для сумісності з опцією --null GNU xargs (1).
або
locate $something | while read f; do rm "$f"; done
Крім того, вам слід захистити *.orig
котирування, щоб уникнути розширення оболонки та передати її, щоб знайти її недоторканою.
| while read
оскільки мій домашній каталог заповнений файлами з пробілами.
*.orig
, оболонка розширить шаблон до, скажімо file1.orig file2.orig ...
, так, що locate
не буде бачити точний рядок *.orig
як слід.
tr '\n' '\0'
.
Це xargs
не такxarg
Команда locate *.orig | xargs rm
насправді працює, але те, що відбувалося, було те, що locate
було знайти *.orig
файли у смітнику та rm
виправити помилку No such file or directory
при спробі видалити файли у смітнику.
locate не робить глобус, але оболонка робить. Оболонка розширює * .orig до того, що знаходиться в поточному каталозі, що відповідає * .orig.
Просто використовуйте
locate .orig
і якщо ви отримаєте те, що вам потрібно
locate .orig | xargs rm
або, як зазначено ензотиб
locate -0 .orig | xargs -0 rm
якщо у файлах файлів є пробіли.
Підступ: збережіть усі шляхи у файлі tmp. потім, петля на ньому:
#!/bin/bash
locate .orig /tmp/tmp.txt
while read line
do
pth=$line
rm "$pth"
done < /tmp/tmp.txt
rm -rf /tmp/tmp.txt