`rm -f !(/var/www/wp)`がファイルを/var/wwwに残すのはなぜですか?

`rm -f !(/var/www/wp)`がファイルを/var/wwwに残すのはなぜですか?

rm -f !(/var/www/wp)コマンドがうまくいかないのはなぜですか?残す必要がある/var/wwwディレクトリを除くすべてのファイルを削除したいと思います。/var/www/wp

root@born:~# ls  /var/www
authorize.php  index.html          INSTALL.txt      README.txt  UPGRADE.txt
CHANGELOG.txt  index.php           LICENSE.txt      robots.txt  web.config
COPYRIGHT.txt  INSTALL.mysql.txt   MAINTAINERS.txt  scripts wp
cron.php       INSTALL.pgsql.txt   misc             sites       xmlrpc.php
drupal         install.php         modules          themes
includes       INSTALL.sqlite.txt  profiles         update.php
root@born:~# rm  -f  !(/var/www/wp)
root@born:~# ls  /var/www
authorize.php  index.html          INSTALL.txt      README.txt  UPGRADE.txt
CHANGELOG.txt  index.php           LICENSE.txt      robots.txt  web.config
COPYRIGHT.txt  INSTALL.mysql.txt   MAINTAINERS.txt  scripts wp
cron.php       INSTALL.pgsql.txt   misc             sites       xmlrpc.php
drupal         install.php         modules          themes
includes       INSTALL.sqlite.txt  profiles         update.php

ベストアンサー1

bash ≥4.3を実行していて、バックアップがある場合は、今このバックアップを見つけるのに良い時です。

私はあなたがBashを使用していると仮定します。これ!(...)ファイル名拡張パターンパターンと一致しないすべての既存のパスに拡張使用中。それは:

echo rm  -f  !(/var/www/wp)

"/var/www/wp"を除く現在のディレクトリのすべてのファイル名に展開されます。これは現在のディレクトリ内のすべてのファイルです。基本的rm -f *~rm上記のコマンドを実行しないでください

目的の効果を得るには、を使用するのと同じように、一致させたり一致させたりしないパス部分にのみパターンを使用するか、別のパターンを使用します*{a,b,c}注文する:

echo rm -f /var/www/!(wp)

実行したいコマンドを印刷します。

正直なところ、私はこの方法をお勧めしません。ここや他の場所で遭遇する問題が発生しやすいです。付属のものがfind追いつくのが簡単です。少なくとも、echoコマンドを実行する前に何が起こっているかを確認できます。

おすすめ記事