Busqué preguntas similares, pero en mi caso fue difícil obtener una respuesta clara.
Utilizo mi Synology DS1515+ y DSM 6.2.2.
En primer lugar, me crearon una carpeta diaria que contiene una fecha usando el script como se muestra a continuación;
mkdir /volume1/video/$(date +%Y-%m-%d\(%a\))
Este script se ejecuta todos los días a medianoche. Entonces, cada medianoche, se hacen estas carpetas.
(Significa que la carpeta de destino siempre existió antes de copiar).
Y se descargan algunos archivos de video. Esos nombres de archivos contienen fecha.
Por ejemplo, ABCDABCD.200328.avi o EFGHIJKH.200327.1080p.mp4
Los nombres de archivos no tienen ciertas reglas, pero la fecha como el tipo AAMMDD se incluye en todos los nombres de archivos.
Me gustaría copiar estos archivos a carpetas que incluyan la misma fecha.
(carpeta lo que se hace automáticamente como arriba explico)
[Ubicación del directorio]
Ruta de los archivos que quiero copiar: /volumen1/video/
Ejemplo de directorio de destino: /volume1/video/daily/2020-04-06(Mon)
¿Podrías ayudar o explicar cómo hacerlo?
Si me lo explica, incluya la ruta del directorio en mi caso como se indica arriba.
(porque no puedo aplicar el código que me recomiendas por falta de comprensión. Pido disculpas)
De nuevo, muchas gracias. Que tenga un buen día.
Respuesta1
Prueba esto,
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
- Retire el eco cuando esté funcionando.
- Quizás sería bueno agregar un cheque para ver si
$date
no está vacío. - Puede agregar
mkdir -p "$target"
antesmv
para evitar errores en directorios faltantes. - Nota: este código tiene un error millennial ;-)
Respuesta2
Acabo de crear un script que también probé:
#!/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