2014-11-09 2 views
0

Я пытаюсь сделать скрипт для отображения файлов в каталоге с параметром --unhide, но он не работает. Можете ли вы мне помочь? Вот моя часть кода.Linux Bash Скрипт, отображающий файлы в каталоге

for i in `ls -1` 
do 
    if [ -f $i ] || [ -d $i ] 
    then 
     if [ `echo $i | cut -c1` == "." ] 
     then 
      mv $i ${i#.} 
     fi 
    fi 
done 

Спасибо!

А как насчет unhide, то я пишу --unhide file1 file2?

elif [ $1 = --unhide ] && [ ! $2 = --all ] 
then 
for i in [email protected] 
do 
if [ -f $i ] || [ -d $i ] 
then 
if [ `echo $i | cut -c1` == "." ] 
then 
mv $i ${i#.} 
fi 
fi 
done  

Его легко у нас нет скрытых файлов, тогда имя параметра совпадает с именем файла. Но как проверить скрытые файлы? Я попытался написать --unhide .file1 .file2, но скрипт только отображает .file1 и .file2.

+3

Я полагаю, что конкретный вопрос, вы видите, потому что 'Ls -1' не включает скрытые файлы по умолчанию, но Маттиас имеет гораздо более надежный способ делать то же самое. –

+0

Если вы не верите, что использование 'ls' для этого задания является нарушенным, попробуйте выполнить тестирование с некоторыми именами файлов, которые включают пробелы ... или, что еще хуже, новые строки. –

ответ

4

Так что в основном то, что вы просите, это сценарий, который переименовывает файлы в каталог, где файлы начинаются с символа '.'?

Нечто подобное должно работать

GLOBIGNORE=".:.." 
for file in .*; do 
    mv -n "$file" "${file#.}" 
done 
+0

Я бы в тестовых целях выполнял 'echo $ file' перед запуском полного' mv -n' thingie, хотя ... чтобы не делать ничего глупого. – mattias

+1

Не нужно экспортировать 'GLOBIGNORE'. –

+0

@YannVernier: В OSX я получаю «..» и «.». подсчитывается без этой строки. Вот почему я включил его. Я надеюсь, что он не попытается переименовать их :) Но каким-то образом вы правы, он все равно будет работать без GLOBIGNORE. – mattias

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