2014-01-17 4 views
1

В настоящее время я пытаюсь удалить несколько файлов из корневого каталога. Есть около 110 файлов с почти одинаковым именем файла.Корректный подстановочный знак для систем UNIX?

Имя файла отображается как wp-cron.php?doing_wp_cron=1.93, где 93 - любое целое число от 1-110.

Однако, когда я пытаюсь запустить код: sudo rm /root/wp-cron.php?doing_wp_cron=1.*, он на самом деле пытается найти файл со звездочкой * в имени файла, оставив меня с файлом, который не найден.

Какая правильная нотация для удаления серии файлов с использованием подстановочных знаков?

ПРИМЕЧАНИЕ. Я уже пробовал разграничить путь к файлу как с одним ', так и с двойными кавычками ". Это не помогло.

Любые мысли по этому вопросу?

+0

Использование шаблона, который вы указали _without_ и цитирования символов, должно _not_ интерпретировать '*' как литерал, а как шаблон для всех типичных оболочек. Поведение, которое вы описываете, звучит «странно». Может быть, существует 'alias', определенная для команды' rm' в этой системе? – arkascha

+0

На самом деле я просто понимаю, что вы не сказали, что вы запускаете код внутри нормальной среды оболочки. Итак, вопрос в том, в какой среде _do_ вы запускаете приведенную выше команду? – arkascha

+0

Я запускаю команду, используя подключение Secure Shell к моему серверу. –

ответ

3

Посмотрите на разрешение в каталоге/root с ls -ld /root, обычно у пользователя, не являющегося пользователем root, не будет rx-разрешений, что не позволит им прочитать список каталогов.

В вашей команде sudo rm /root/wp-cron.php?doing_wp_cron=1.* попытка расширения имени файла происходит в оболочке, запущенной под пользователем без полномочий root. Это не распространяется на отдельные имена файлов, так как у вас нет прав на чтение/root.

Затем оболочка выполняет sudo\0rm\0/root/wp-cron.php?doing_wp_cron=1.*\0. (Три отдельных, явных аргумента).

sudo, после удовлетворения его условий, руководители rm\0/root/wp-cron.php?doing_wp_cron=1.*\0.

rm запускает и пытается отсоединить литальный путь /root/wp-cron.php?doing_wp_cron=1.*, не получив, как вы видели.

Решение проблемы с удалением зависит от ваших разрешений sudo. Если разрешено, вы можете запустить Баш суб-процесс, чтобы сделать расширение имени файла в корневом каталоге:

sudo bash -c "rm /root/a*" 

Если не разрешено, делать SUDO ет с явными именами файлов.

+0

Это на 100% верно. Я временно изменил права на корневой каталог на 705 (drwx --- rx), затем запустил 'sudo rm /root/wp-cron.php? Done_wp_cron = 1. *, это не возвращало ошибку и удаляло все существующие файлы . Спасибо за объяснение! –

0

Brandon,

Я согласен с @arkascha. Этот шар должен соответствовать, так что здесь что-то не так. Получаете ли вы соответствующий список файлов, если используете другой бинарный файл, скажем, 'ls'? Попробуйте следующее:

ls /root/wp-cron.php?doing_wp_cron=1.* 

Если это возвращает полный список файлов, то вы знаете, что есть что-то смешное в вашей среде относительно rm. Это может быть псевдоним, как было предложено.

Если вы не можете определить, что разные или неправильно с вашей среде вы можете запустить список файлов через цикл и удалить каждый как обходным:

for file in `ls /root/wp-cron.php?doing_wp_cron=1.*` 
do 
rm $file 
done 
+0

Я попытался выполнить sudo ls /root/wp-cron.php? Doing_wp_cron = 1. * 'возвратил то же "ls: невозможно получить доступ ...: Нет такого файла или каталога. Однако поиск полного имени файла' sudo ls /root/wp-cron.php? doing_wp_cron = 1.83' работал должным образом. –