Как исправить ошибку несоответствия хэш-суммы Kali Linux 2020.1?

У вас есть файлы, в именах которых закодирован путь назначения.

Файл с именем A_20180423_0015следует переместить в A/20180423/0015(. Я предполагаю, что 0015— это новое имя файла в каталоге A/20180423), то есть путь, который совпадает с исходным именем файла, но с заменой подчеркивания косой чертой.

Это означает, что это упражнение посвящено замене символов в строках.

Нет необходимости создавать каталоги назначения для каждой отдельной возможной даты, потому что место назначения уже закодировано в именах файлов.

Я не совсем уверен, где находятся исходные файлы, и можно ли просто использовать [A-Z]_*_*в качестве шаблона для их сопоставления в текущем каталоге (Я предполагаю, что вы можете ).

for source_filename in [A-Z]_*_*; do
    target_pathname=${source_filename//_//}
    mkdir -p "${target_pathname%/*}"
    mv "$source_filename" "$target_pathname"
done

Если мы начнем с

.
|-- A_20180423_0015
|-- B_20180501_0045
`-- C_20180426_0045

0 directory, 3 files

... и запустите приведенный выше код, после чего мы получим

.
|-- A/
|   `-- 20180423/
|       `-- 0015
|-- B/
|   `-- 20180501/
|       `-- 0045
`-- C/
    `-- 20180426/
        `-- 0045

6 directories, 3 files

Аннотированный код:

# Loop over all names in the current directory that matches the given pattern.
for source_filename in [A-Z]_*_*; do
    # Replace all underscores in the found name with slashes.
    # We use bash's ${parameter//pattern/replacement} pattern substitution
    # to do this.
    # If you need to append a path to this, just do so with
    #    target_pathname="/some/path/${source_filename//_//}"
    target_pathname=${source_filename//_//}

    # Make sure that the target directory exists.
    # With ${target_pathname%/*} we remove the filename component of
    # the target pathname to get the directory of the destination file.
    # You may change this to the following if you wish:
    #     mkdir -p "$( dirname "$target_pathname" )"
    mkdir -p "${target_pathname%/*}"

    # Move the file into place.
    mv "$source_filename" "$target_pathname"
done

Если я неправильно понял вопрос и файлы должны сохранить свои первоначальные имена файлов, но быть перемещены в каталоги, соответствующие имени файла, т.е. A_20180423_0015следует переместить в A/20180423/0015/A_20180423_0015, тогда нам нужно изменить только несколько символов в код выше:

mkdir -p "${target_pathname%/*}"

меняется на

mkdir -p "$target_pathname"

Это изменение дало бы нам

.
|-- A/
|   `-- 20180423/
|       `-- 0015/
|           `-- A_20180423_0015
|-- B/
|   `-- 20180501/
|       `-- 0045/
|           `-- B_20180501_0045
`-- C/
    `-- 20180426/
        `-- 0045/
            `-- C_20180426_0045

9 directories, 3 files

Для случая, когда исходные файлы находятся в другом каталоге, чем текущий:

for source_pathname in /some/source/path/[A-Z]_*_*; do
    source_filename=${source_pathname##*/}
    target_pathname="some/target/path/${source_filename//_//}"
    mkdir -p "$target_pathname"
    mv "$source_pathname" "$target_pathname"
done
1
21.07.2020, 17:29
1 ответ
$ sudo bash
# mkdir /etc/gcrypt
# echo all > /etc/gcrypt/hwf.deny

Выполните эти команды, а затем снова выполните обновление.

1
28.04.2021, 23:16

Теги

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