2015-04-18 2 views
1

Попытка создать цикл while для удаления 8 файлов из указанной тестовой папки. Я получаю ошибку no such file or directory, хотя я уверен, что я в нужной папке, потому что я могу использовать команду ls для просмотра файлов ... В любом случае вот что у меня естьBash create while loop для удаления всех файлов в каталоге

#!/bin/bash 

var=(`ls ~/Random/Unit1/Test`) 
x=${#var[@]} 
i=0 

while [ $i -lt $x ] ; do 
    rm $var     # this line is incorrect and needs changing 
    ((i++)) 
done 
+0

Добавить в кавычки '$ var':' гт «$ вар» ' – higuaro

+0

все еще не работает правильно ... Я получаю сообщение об ошибке' гт: не может удалить 'file1' : Нет такого файла или directory' –

+3

Как насчет 'rm -f ~/Random/Unit1/Test /*.*'? –

ответ

0

Есть несколько проблем, с вашим сценарий, первый из них заключается в том, что вы должны cd в папку с которой вы хотите удалить файлы, вы можете использовать для этого pushd и popd. Во-вторых, вы должны приложить переменную var с двойными кавычками. Кроме того, как указано в @redball's answer, вы получаете доступ к массиву, вы должны использовать обозначение массива.

#!/bin/bash 

DIRECTORY=~/Random/Unit1/Test 
var=(`ls $DIRECTORY`) 
x=${#var[@]} 
i=0 

# Saves current directory and change it to the one pointed by "$DIRECTORY" 
push "$DIRECTORY" 

while [ $i -lt $x ] ; do 
    rm "${var[$i]}" 
    ((i++)) 
done 

# Restores the previously saved directory 
popd 
1

вар является переменным массивом, прямо сейчас вы обращаетесь к нему как к скаляру, который в bash возвращает первое значение, поэтому вы удаляете первый файл, а затем пытаетесь удалить его снова один раз для каждого файла в каталоге. Если вы хотите, чтобы удалить все файлы, вам необходимо получить значение массива в каждом индексе, поэтому в цикле вы получите п-е значения в массиве, т.е.

rm ${var[$i]} 
+0

Теперь я получаю ошибку 'rm: не могу удалить файл1: нет такого файла или каталога', но он идет от file1 до file8 ... Это близко –

Смежные вопросы