Usuń wszystkie pliki zaczynające się od znaku zapytania

23

Mam folder, w którym mam około 4k plików. Niektóre z tych plików zaczynają się od aa ?lub !znaku. Muszę je usunąć, ale nie mogę znaleźć wyrażenia, które by to zrobiło:

rm -f ./?*

po prostu usuwa wszystko. Mogę ewentualnie używać grepna ls i xargsprzesyłać przez niego i przenosić pliki do innego folderu, ale miałem nadzieję, że jest to odpowiedni sposób. Potrzebujesz pomocy na temat plików ?i !.

recluze
źródło

Odpowiedzi:

26

Nie potrzeba żadnych wymyślnych rzeczy. Po prostu ucieknij ?, aby nie było uważane za część globu:

rm -f ./\?*

Działa to !również dla :

rm -f ./\!*

Lub za jednym zamachem:

rm -f ./{\?,\!}*

Aktualizacja

Właśnie zauważyłem, że sugerujesz grepwyjście ls. Chciałem zwrócić twoją uwagę na fakt, że nie powinieneś analizować wyjścia ls

Joseph R.
źródło
4
@recluze Nie głupi; nie jest oczywiste, jak to zrobić, jeśli nie wiesz o ucieczce z symboli wieloznacznych.
CVn
@recluze Nadal czujesz się głupio po 5 głosach na twoje pytanie? :) Nawiasem mówiąc, zobacz zaktualizowaną odpowiedź.
Joseph R.
Dzięki i dziękuję :) ... Miałem świadomość problemów z wyjściem ls, ale moje pliki miały szczególny wzorzec, na który mogłem liczyć. Niemniej jednak dobrze wiedzieć :)
recluze
13

W moim przypadku postacie nie były tak naprawdę znakami zapytania, ale znakami Unicode, które najwyraźniej nie mogły być wyświetlane w mojej konsoli.

Korzystanie rm -i *działało dla mnie. Jeśli nie chcesz tego robić, możesz również usunąć za pomocą i-węzła, jak opisano na stronie http://www.cyberciti.biz/tips/delete-remove-files-with-inode-number.html .

Aby znaleźć i-węzeł, użyj:

ls -il

Następnie wykonaj:

find . -inum [inode-number] -exec rm -i {} \;
Jonathan
źródło