Ошибка при передаче нескольких файлов из разных каталогов в цикл for

#for-loop #unix

#цикл for #unix

Вопрос:

Не могли бы вы, ребята, проверить приведенное ниже сообщение и предоставить мне какое-либо решение или подсказку для решения проблемы с переменной цикла for.

Файлы, которые у меня есть в формате ниже:

 /directory/file1.gz -> gunzip file1, it will be in ascll format
/directory/file2.gz -> gunzip file2, but the file2 still in gzip format
  

Для устранения этой проблемы я написал ниже небольшой скрипт:

 for f in ./ETF_Directories_*/*;
do
if file -z "$f" | grep -i ascii
then
echo "file is in ascii format"
else
gunzip "$f"
//**If the file is not in ascii format I mean the second case I want to 
move this gunziped file to .gz. So that it will in single .gz format, but 
I need command to write, or hint on how to use "mv" command to achieve 
what I needed**//
fi
done
  

Комментарии:

1. Что за ошибку вы получаете? Ваше требование неясно.

2.если формат файла не ascii, как в инструкции else: я хочу заархивировать файл и использовать команду mv, чтобы создать идеальный zip-файл ascii. Вот так:- gunzip "$f" mv "$f" "$f.gz" Но выдает ошибку, что mv не может найти файл или каталог.

Ответ №1:

gunzip x.gz удалит .gz , поэтому, когда $f это something.gz происходит, расширение теряется и $f не может быть найдено.

Комментарии:

1. Да, вот где я застрял… Мне нужно выполнить другие команды для этого загруженного файла…. как я могу это сделать ….. могу ли я переместить его в другую переменную???

2. Вы хотите удалить .gz при наличии. Используйте "${f%.gz}" , проверьте с помощью f="no_dot_gz" , f="one.gz" и f="two.gz.gz" .