it-swarm-eu.dev

Jak odstraním soubor, jehož jméno začíná znakem „-“ (pomlčka nebo mínus pomlčka nebo mínus)?

Jak odstraníte soubor, jehož název souboru začíná pomlčkou (spojovník nebo mínus) -? Jsem ssh'd na vzdálený OSX server a mám tento soubor v mém adresáři:

tohru:~ $ ls -l
total 8
-rw-r--r--    1 me  staff  1352 Aug 18 14:33 --help
...

Jak na světě mohu smazat --help z CLI? Tento problém je něco, s čím se občas setkávám v různých formách, tyto soubory lze snadno vytvořit, ale těžko se jich zbavit.

Zkusil jsem použít zpětné lomítko

rm \-\-help

Zkoušel jsem citace

rm "--help"

Jak mohu zabránit tomu, aby byl znak mínus (pomlčka nebo spojovník) interpretován jako možnost?

377
Bryan Rehbein

Použijte "-" k nastavení rm stop analýzy příkazového řádku, jako je tato:

rm -- --help
559
Vegar Nilsen

Nebo můžete

rm ./--help
236
edfuh

K tomu použijte find:

find . -name '--help' -delete

A to je dobrá metoda, protože pokud máte více než několik podobných souborů, které můžete smazat, můžete získat seznam náhledů souborů jednoduše spuštěním hledání bez -delete nejprve, a pak, pokud seznam souborů vypadá dobře, spusťte jej znovu pomocí -delete.

Ve skutečnosti se vyhýbáte rm ve prospěch find (zejména u prvního náhledu) je dobrý zvyk, který vám pomůže vyhnout se chybám s rm * to vás nevyhnutelně někdy kousne.

Tento nález se však bude opakovat ve všech vašich podadresářích, takže jej můžete spustit s omezením hloubky podadresáře, jako je toto:

find . -maxdepth 1 -name '--help' -delete

což omezuje hledání na aktuální adresář.

41
aculich

Odpovědi Vegara Nilsena a edfuha jsou velmi dobré a správné řešení takového problému.

Chci přidat obecnou odpověď na tuto otázku, která vám umožní odstranit jakýkoli soubor s obtížným názvem. První číslo jeho inode je získáno pomocí ls -i nebo nějaká forma stat a pak je soubor odstraněn hledáním souborů v aktuálním adresáři podle čísla inodu a provedením příkazu rm v souboru s odpovídajícím číslem inode

find . -inode <inode> -exec rm {}\;

Protože čísla inodů jsou v každém systému souborů jedinečná, můžete pomocí něj odstranit libovolný soubor; unicode nebo pomocí únikových znaků. To je, jak velmi nepříjemné psát, takže bych doporučil přidat řádek

TAB: menu-complete             # Tab: Cycles through the command
"\e[Z": menu-complete-backward # Shift-Tab: Cycles backwards

do tvého .inputrc soubor, pokud používáte bash. To vám umožní procházet seznamem možných dokončení ( pro další informace ).

21
Baldur

Brutální řešení:

Perl -e "unlink '--help' or die 'Could not unlink.';"

Perl -e "rmdir '-d' or die 'Could not rmdir.';"
11

Linux Návod k vytvoření souboru s pomlčkami a mezerami a jeho odstranění.

BUĎ OPATRNÝ! Nepoužívejte náhodně rm -rf / nebo podobný příkaz kaskádového mazání.

Pokud soubor, který se pokoušíte odstranit, obsahuje hvězdičky nebo lomítka, nechtěně nevyčerpejte . nebo /* nebo * nebo jiné zástupné znaky, které by mohly odstranit váš operační systém.

Vytvořte soubor s názvem "- yo yo"

[email protected] ~ $ touch -- "--yo yo"
[email protected] ~ $ ls
bin  --yo yo

Nejprve to najděte pomocí find:

[email protected] ~ $ find . -name "*--yo yo*"
./--yo yo

Ujistěte se, že příkaz find POUZE najde soubor ONE, který chcete odstranit:

Potom předejte volbu -delete, abyste je našli, vymazali:

[email protected] ~ $ find . -name "*--yo yo*" -delete
[email protected] ~ $ ls
bin  

Aaaannd je pryč.

8
Eric Leschinski

Midnight Commander (mc) je nejjednodušší, stačí na něj ukázat a stisknout F8;)

2
Marcin

zde je řešení, které jsem použil před nalezením tohoto vlákna.
použijte vim k 'editaci' adresáře:

vim .

potom (v vim) vyberte svůj soubor, stiskněte klávesu del a potvrďte odstranění.
Když skončíte, ukončete vim s :q

1
atti

Pokusili jste se přidat název adresáře jako předponu:

$ rm ./-filename.txt dirname/-filename2.txt
$ mv ./-filename.txt filename.txt
$ cp teste ./-teste

Použití adresáře jako předpony souboru obecně pomáhá vyhnout se nesprávné interpretaci znaku „mínus“ jako možnosti příkazu pomocí funkce analyzátoru.