Как переместить файл с помощью сценария

Как насчет простого сценария оболочки, использующего 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

0
15.09.2019, 20:27
2 ответа

Ваш код излишне сложен. Я считаю, что проблема в том, что вы не можете вызвать 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
1
28.01.2020, 02:39

Когда вы используете команду mv и на самом деле пытаетесь переместить ее в папку из корневого каталога. Ваша команда должна быть из текущего каталога.

mv *.${myarray[$index]}./${myarray[$index]}/

Обратите внимание на .перед каталогом, он говорит вам искать папку в текущем каталоге, в противном случае вы можете просто написать:

mv *.${myarray[$index]} ${myarray[$index]}/

Приведенная выше команда также будет искать папку в текущем каталоге.

0
28.01.2020, 02:39

Теги

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