Извлечение составных файлов 7z в терминале CentOS

Если вам нужно переименовать все файлы, имя которых содержит \, вы можете сделать:

for file in *\\*; do 
    dir="$(dirname -- "${file//\\/\/}")"
    filename="${file##*\\}"
    mkdir -p -- "$dir"
    mv -- "$file" "$dir"/"$filename"
done

Пояснение

  • for file in *\\*:Глоб *\\*соответствует любому имени файла или каталога в текущем каталоге, имя которого содержит \. Поскольку \также является escape-символом, нам нужно экранировать его, чтобы он рассматривался как литерал. Вот почему мы не можем просто использовать *\*.

    Затем это будет перебирать все файлы и каталоги, имя которых содержит \, сохраняя каждый из них как $file.

  • dir="$(dirname "${file//\\/\/}")":${file//\\/\/}напечатает текущее имя файла, заменив все \на /. Экранирование \\и\/)необходимо, так как \и /являются специальными символами. dirnameпечатает каталог, в котором содержится файл. Например, dirname /path/to/fileвернет /path/to. Следовательно, $dirбудет целевым каталогом, в который мы хотим переместить этот файл.

  • filename=${file##*\\}:имя файла, при этом все до последнего \удалено. Это фактическое имя файла, и оно будет сохранено как $filename.

  • mkdir -p "$dir":создать целевой каталог и всех его родителей. -pзаставляет mkdirсоздавать родительские каталоги (без него mkdir foo/barне будет работать, если foo/уже не существует ), а также заставляет игнорировать ошибки об уже существующем каталоге.

  • mv "$file" "$dir"/"$filename":последний шаг, переместите файл в нужное место.

0
01.03.2018, 16:30
1 ответ

Попробуйте

7z -v100m

Архив будет разделен на файлы по 100 МБ.

7z -v опция поддерживает b k m g (байты, килобайты, мегабайты, гигабайты

источник Ссылка:https://superuser.com/questions/258872/split-files-on-windows-compatible-with-linux-cat

0
21.04.2020, 18:33

Теги

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