Вопрос или проблема
Я пытаюсь создать файл, а затем архивировать его с помощью следующей команды, но это не получается. Пожалуйста, помогите.
touch sample_touch_FILENAME.CSV
echo "sample_touch_FILENAME.CSV">FILELIST_PROJECT.txt
while read i
do
tar -cf "$i".tar "$i"
done<$DirPath/FILELIST_PROJECT.txt
Сообщение об ошибке:
tar: sample_touch_FILENAME.CSV: Не удается получить информацию: Нет такого файла или каталога
tar: Завершение с ошибкой из-за предыдущих ошибок
Пожалуйста, помогите.
Ответ или решение
Проблема, с которой вы столкнулись, связана с тем, что команда tar
не может найти файл sample_touch_FILENAME.CSV
, который вы пытаетесь архивировать. Давайте разберемся с вашими командами и исправим ошибки.
Анализ вашего кода:
-
Вы создали файл с помощью команды
touch
:touch sample_touch_FILENAME.CSV
Эта команда создает пустой файл с указанным именем.
-
Далее вы записываете название этого файла в файл
FILELIST_PROJECT.txt
:echo "sample_touch_FILENAME.CSV" > FILELIST_PROJECT.txt
Здесь все верно, и это создает файл со списком файлов, который вы хотите заархивировать.
-
В цикле
while
вы читаете строки из файлаFILELIST_PROJECT.txt
и пытаетесь создать архив для каждого файла в этом списке:while read i do tar -cf "$i".tar "$i" done < $DirPath/FILELIST_PROJECT.txt
Возможные причины ошибки "Cannot stat":
-
Путь к файлу: Убедитесь, что вы находитесь в том каталоге, где находится файл
sample_touch_FILENAME.CSV
. Если вы находитесь в другом каталоге, тоtar
не сможет найти файл. -
Переменная
DirPath
: Если вы используете путь из переменнойDirPath
, убедитесь, что переменная содержит правильный путь к файлуFILELIST_PROJECT.txt
. -
Ошибки в имени файла: Проверьте, нет ли опечаток в имени файла, чтобы убедиться, что строка, которая считывается из
FILELIST_PROJECT.txt
, совпадает с именем файла.
Решение проблемы:
Шаг 1: Убедитесь, что файл существует
Проверьте наличие файла sample_touch_FILENAME.CSV
:
ls -l sample_touch_FILENAME.CSV
Шаг 2: Исправьте путь к файлу в команде tar
Если файл не найден, вы можете указать путь к файлу при его создании или обеспечить, что вы находитесь в правильном каталоге.
Пример исправленного кода:
# Создаем файл
touch sample_touch_FILENAME.CSV
# Создаем файл со списком
echo "sample_touch_FILENAME.CSV" > FILELIST_PROJECT.txt
# Устанавливаем путь к файлу FILELIST_PROJECT.txt
DirPath="." # Или укажите полный путь
# Архивируем файлы из списка
while read i
do
if [ -f "$i" ]; then # Проверяем, существует ли файл
tar -cf "$i.tar" "$i"
else
echo "Файл $i не найден!"
fi
done < $DirPath/FILELIST_PROJECT.txt
Заключение
После внесения указанных изменений и проверок ваш скрипт должен работать корректно, и командир tar
не должна выдавать ошибку "Cannot stat: No such file or directory". Если проблема сохраняется, внимательно проверьте вывод команд и пути к файлам.