Если вам нужно переименовать все файлы, имя которых содержит \
, вы можете сделать:
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"
:последний шаг, переместите файл в нужное место.
Попробуйте
7z -v100m
Архив будет разделен на файлы по 100 МБ.
7z -v опция поддерживает b k m g (байты, килобайты, мегабайты, гигабайты
источник Ссылка:https://superuser.com/questions/258872/split-files-on-windows-compatible-with-linux-cat