Procurei perguntas semelhantes, mas foi difícil obter uma resposta clara no meu caso.
Eu uso minha sinologia DS1515+ e DSM 6.2.2.
Em primeiro lugar, criei uma pasta diária contendo uma data usando o script abaixo;
mkdir /volume1/video/$(date +%Y-%m-%d\(%a\))
Este script é executado diariamente à meia-noite. Então toda meia noite essas pastas são feitas.
(Isso significa que a pasta de destino sempre existiu antes da cópia.)
E alguns arquivos de vídeo são baixados. Esses nomes de arquivos contêm data.
Por exemplo, ABCDABCD.200328.avi ou EFGHIJKH.200327.1080p.mp4
Os nomes de arquivos não têm regras específicas, mas datas como o tipo AAAMMDD estão incluídas em todos os nomes de arquivos.
Gostaria de copiar esses arquivos para pastas que incluam a mesma data.
(pasta o que é feito automaticamente como explico acima)
[Localização do diretório]
Caminho dos arquivos que quero copiar: /volume1/video/
Exemplo de diretório de destino: /volume1/video/daily/2020-04-06(Mon)
Você poderia ajudar ou explicar como fazer isso?
Se você me explicar, inclua o caminho do diretório no meu caso, como acima.
(porque não consigo aplicar o código que você me recomenda por falta de compreensão. Peço desculpas)
Muito obrigado novamente. Tenha um bom dia.
Responder1
Tente isso,
for f in /volume1/video/*; do
# skip over directories
[ -f "$f" ] || continue
# grep the date in YYMMDD format
date=$(printf '%s' "$f" | grep -Eo '[0-9]{6}')
# set target path using date to convert YYMMDD to YYYY-MM-DD(%a)
target="/volume1/video/daily/$(date -d "$date" +%Y-%m-%d\(%a\))/"
# mv the file
echo mv "$f" "$target"
done
- Remova o eco quando estiver funcionando.
- Talvez fosse bom adicionar uma verificação para ver se
$date
não está vazio. - Você pode adicionar
mkdir -p "$target"
antes demv
para evitar erros em diretórios ausentes. - Nota: este código tem um bug do milênio ;-)
Responder2
Acabei de criar um script também que testei:
#!/bin/bash
SOURCE_FOLDER="video/"
TARGET_FOLDER="video/daily" # Not used as it is under the source folder.
doMove() {
# Year loop assuming AFTER 2000 up to 2022
cd "$SOURCE_FOLDER"
for i in 20{19..20} ; do
#echo -e "/nWorking on 20$1"
# Month Loop
for j in 0{1..9} {10..12} ; do
# Day Loop
for k in 0{1..9} {10..31} ; do
# Find files matching YYMMDD
file=$(find . -maxdepth 1 -type f -print | grep $i$j$k)
# For each found file:
for sf in $file ; do
# Find the folder with a different format
folder=$(find * -type d -print | grep $i-$j-$k)
echo -e "\nFile: $sf"
echo -e "Folder: $folder"
mv "$sf" "$folder/" # 2> /dev/null
echo -e "Moved $sf to $folder"
done
done
done
done
cd .. # Change to your needs.
}
doMove