список файлов в терминале с пробелами - PullRequest
2 голосов
/ 24 июня 2011
ls -1 | grep -v images | xargs rm -r

Это не удаляет файлы с пробелами в них. Как я могу их включить? Есть ли способ, когда я говорю ls, что он отображается с пробелами?

Ответы [ 3 ]

4 голосов
/ 24 июня 2011

ls имеет опцию -Q , чтобы заключить их в кавычки. Тогда вы просто можете сделать это:

ls -Q | grep -v images | xargs rm -r
2 голосов
/ 24 июня 2011

Хотя вы можете сделать эту работу с ls(1), я думаю, что лучше использовать find(1) вместо:

find . \! -name '*images*' -exec rm -r {} \;

или

find . \! -name '*images*' -print0 | xargs -0 rm -r

Я предпочитаю -print0 | xargs -0 подходит, когда это работает, потому что xargs(1) будет порождать только столько rm(1) команд, сколько необходимо.Когда у вас есть только 200 файлов, 200 выполнений или одно выполнение не будет иметь большого значения, но если бы у вас было 10000 файлов для удаления, вы бы действительно предпочли выполнить rm(1) только 200 или 500 раз, а не все 10000 раз.

1 голос
/ 24 июня 2011

Это должно сработать:

ls -1 | grep -v images | xargs -I {} rm -r "{}"
...