# Filenames

## Backup files

```sh
find . -name '~*' | rsync -nd --files-from=- . Archiv/BackupFiles
```


## Characters

While nextcloud supports (nearly) any file name, some OS are very restrictive.

Problematic: `~ " # % & * : < > ? / \ { | } $`


E.g. to replace ?, + and $ (remove -n to actually do something):

```sh
find . -depth -print0 | xargs -0 rename -n -e 's:[?]:FRAGEZ:g; s:[+]:PLUS:g; s:[\$]:DOLLAR:g;' \;
```

```sh
find . -depth -print0 | xargs -0 rename -n -e 's:[#]:⌗:g; s:["]:“:g; s:[~]:∼:g; s/[:]/COLON/g; s:[%]:PROZENT:g; s:[\&]:UND:g; s:[\*]:∗:g; s/[:]/∶/g; s:[<]:≺:g; s:[>]:≻:g; s:[\?]:⍰:g; s:[\+]:∔:g;' \;
find . -depth -print0 | xargs -0 rename -n -e 's:[|]:BAR:g; s:[{]:(:g; s:[}]:):g; s:[\$]:DOLLAR:g; s:[#]:⌗:g; s:["]:“:g; s:[~]:∼:g; s/[:]/COLON/g; s:[%]:PROZENT:g; s:[\&]:UND:g; s:[\*]:∗:g; s/[:]/∶/g; s:[<]:≺:g; s:[>]:≻:g; s:[\?]:⍰:g; s:[\+]:∔:g;' \;
find . -depth -print0 | xargs -0 rename -n -e 's:[\\]:BACKSLASH:g; s:[|]:BAR:g; s:[{]:(:g; s:[}]:):g; s:[\$]:DOLLAR:g; s:[#]:⌗:g; s:["]:“:g; s:[~]:∼:g; s/[:]/COLON/g; s:[%]:PROZENT:g; s:[\&]:UND:g; s:[\*]:∗:g; s/[:]/∶/g; s:[<]:≺:g; s:[>]:≻:g; s:[\?]:⍰:g; s:[\+]:∔:g;' \;
```

> Notes:
> : is defined twice.
> instead of | (BAR) could be ¦

In any case allowed are:

'a'...'z'
'A'...'Z'
'0'...'9'
'.'
'-'
'_'

As check if they are present:

```sh
find . -depth -print0 | xargs -0 rename -n -e 's:[^a-zA-Z0-9.-_]::g' \;
find . -depth -print0 | xargs -0 rename -n -e 's:[^a-zA-Z0-9.\-_äöüÄÖÜß/ (),⌗“∼∗∶≺≻⍰∔]::g' \;
find . -depth -name '*[^a-zA-Z0-9.\-_äöüÄÖÜß (),⌗“∼∗∶≺≻⍰∔]'
```


## Depth

Maximum allowed depth: 32

```sh
find . -type d -printf '%d %f\n' | sort -rn | awk '$1 > 31 {print;}'
```

## Max Files

Max Files per Folder: 512

```sh
find . -xdev -type d -exec sh -c 'echo "$(find "$0" | grep "^$0/[^/]*$" | wc -l) $0"' {} \; | sort -rn > list_of_files.txt
```

Remove the ones which are not problematic and cut the first line

```zsh
for d in `cat list_of_files.txt`
cd $d
for i in `seq 1 3`
do
mkdir $i
mv -- *(^/[1,500]) $i # move 500 files (^/ to exclude directories)
done
done
```


# Max Links

Maximum of internal links per folder: 3

Here is unclear to me what this actually means, I checked for:

```sh
find . -type s -or -iname '*.URL' -or -iname '*.webloc'
```

## Max Path Length

Max path length (inclusive subfolder and file name): 4096 - 1024(BLOB) = 3072 chars (getconf PATH_MAX)

```sh
find . | egrep '^.{3071,}$'
```

## Max Name Length

Folder or file names: 223 chars (getconf NAME_MAX)

```sh
find -exec basename '{}' ';' | egrep '^.{222,}$'
```

## Max File Size

Max file size can be configured from 256MB to 14GB

```sh
find . -xdev -type f -size +255M -print | xargs ls -lh | sort -k5,5 -h -r
```
Fr Jul 30 13:54:24 CEST 2021
patent_button.gif valid-html401.png elektra.jpg fsfe-logo.png valid-css.png vim.gif anybrowser.gif