Как насчет простого сценария оболочки, использующего sha1sum ?
#!/bin/bash
VALUE=$1
FILE=$2
SUM1=$(sha1sum $FILE)
echo "value=$VALUE" > $FILE
SUM2=$(sha1sum $FILE)
if [[ ! $SUM1 == $SUM2 ]]; then
echo "Different" #put your command here
fi
При выполнении:
nxr ~ touch filetest
nxr ~ bash sumtest.sh 1 filetest
-> Different
nxr ~ bash sumtest.sh 1 filetest
->
nxr ~ bash sumtest.sh 2 filetest
-> Different
Ваш код излишне сложен. Я считаю, что проблема в том, что вы не можете вызвать mv
, если каталог назначения еще не существует. Вы также, кажется, пытаетесь переместить что-то в каталог в корневом каталоге.
Рассмотрим
#!/bin/sh
for suffix do
mkdir -p -- "$suffix" || exit 1
mv -- *."$suffix" "$suffix"
done
или,
#!/bin/bash
suffixes=( "$@" )
for suffix in "${suffixes[@]}"; do
mkdir -p -- "$suffix" || exit 1
mv -- *."$suffix" "$suffix"
done
(Измените exit 1
на continue
, если вы хотите перейти к следующему указанному суффиксу, когда каталог не может быть создан, вместо того, чтобы завершить скрипт ).
Это зациклило бы на всех суффиксах имен файлов (не совсем типы файлов поскольку тип файла в Unix — это такие вещи, как «обычный файл», «каталог», «символическая ссылка» и т. д. ), создаст в текущем каталоге подкаталог с именем этого суффикса, а затем переместит все файлы с именами, оканчивающимися на ."$suffix"
, в этот каталог.
Команда mkdir -p dirname
не завершится ошибкой, если каталог dirname
уже существует.
Пример запуска:
$ tree
.
|-- file1.mp3
|-- file1.png
|-- file1.txt
|-- file2.mp3
|-- file2.png
|-- file2.txt
|-- file3.mp3
|-- file3.png
|-- file3.txt
|-- file4.mp3
|-- file4.png
|-- file4.txt
|-- file5.mp3
|-- file5.png
|-- file5.txt
`-- script.sh
0 directory, 16 files
$./script.sh txt mp3
$ tree
.
|-- file1.png
|-- file2.png
|-- file3.png
|-- file4.png
|-- file5.png
|-- mp3
| |-- file1.mp3
| |-- file2.mp3
| |-- file3.mp3
| |-- file4.mp3
| `-- file5.mp3
|-- script.sh
`-- txt
|-- file1.txt
|-- file2.txt
|-- file3.txt
|-- file4.txt
`-- file5.txt
2 directories, 16 files
Когда вы используете команду mv и на самом деле пытаетесь переместить ее в папку из корневого каталога. Ваша команда должна быть из текущего каталога.
mv *.${myarray[$index]}./${myarray[$index]}/
Обратите внимание на .
перед каталогом, он говорит вам искать папку в текущем каталоге, в противном случае вы можете просто написать:
mv *.${myarray[$index]} ${myarray[$index]}/
Приведенная выше команда также будет искать папку в текущем каталоге.