Как мне изменить ввод сценария, чтобы он был первым аргументом в CLI?

Скорее всего gzip не изменяет содержимое файла, если только что-то серьезно не нарушено. Вероятно, ваши программы для просмотра сжатых и несжатых файлов делают что-то разное.

Для сравнения содержимого можно использовать md5sum

$ md5sum  file
d41d8cd98f00b204e9800998ecf8427e  file
$ gzip  file
$ zcat file.gz | md5sum
d41d8cd98f00b204e9800998ecf8427e  -
2
12.01.2017, 20:31
2 ответа

Оболочка хранит все аргументы командной строки в так называемых позиционных параметрах , $ 1 , $ 2 , $ 3 и т. Д.

Простой сценарий, который переименовывает все файлы, соответствующие wid _ *. Jil в каталоге, заменяя строку orig на update в имени файла, может выглядеть следующим образом:

#!/bin/sh

dir="$1"

if [ -d "$dir" ]; then
  printf 'No such directory: %s\n' "$dir" >&2
  exit 1
fi

for filepath in "$dir"/wid_*.jil; do
  filename="$( basename "$filepath" | sed 's/orig/update/g' )"
  mv -i "$filepath" "$dir/$filename"
done

Или, без использования внешних утилит, с bash :

#!/bin/bash

dir="$1"

if [[ -d "$dir" ]]; then
  printf 'No such directory: %s\n' "$dir" >&2
  exit 1
fi

for filepath in "$dir"/wid_*.jil; do
  filename="${filepath##*/}"
  filename="${filename//orig/update}"

  mv -i "$filepath" "$dir/$filename"
done
1
27.01.2020, 21:59

$ 1 будет первым аргументом вашего сценария bash:

#!/bin/bash

directory="$1"

echo "$directory"

Вы также можете выполнить некоторые проверки, например

#!/bin/bash

directory="$1"

[ -z "$directory" ] && echo "Please provide a directory" && exit 1
[ ! -d "$directory" ] && echo "Directory not found" && exit 2

for file in "$directory"/wid_*.jil
do
    mv -i "${file}" "${file/orig/update}"
done
3
27.01.2020, 21:59

Теги

Похожие вопросы