
Ich habe einen FTP-Prozess, der ständig Dateien in ein Verzeichnis legt. Das Erstellungsdatum ist Teil des Dateinamens in einem Format wie diesem:
JJJJ-MM-TT-HH-MM-SS-xxxxxxxxxx.wav
Ich möchte die Dateien basierend auf dem Erstellungsdatum in ein anderes Verzeichnis verschieben. Ich kann entweder den Dateinamen oder den Datumsstempel verwenden, je nachdem, was einfacher ist. Nur Monat und Jahr müssen berücksichtigt werden. Ich habe Verzeichnisse im folgenden Format erstellt:
Jan_2016
Feb_2016
Ich habe Verzeichnisse erstellt und die Dateien manuell verschoben, aber ich möchte dies mit einem Bash-Skript automatisieren, das das Verzeichnis erstellt, wenn es nicht existiert.
Bisher habe ich die Verzeichnisse manuell erstellt und dann diesen Befehl ausgeführt:
mv ./2016-02*.wav Feb_2016/
Antwort1
### capitalization is important. Space separated.
### Null is a month 0 space filler and has to be there for ease of use later.
MONTHS=(Null Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
cd /your/ftp/dir ### pretty obvious I think
for file in *.wav ### we are going to loop for .wav files
do ### start of your loop
### your file format is YYYY-MM-DD-HH-MM-SS-xxxxxxxxxx.wav so
### get the year and month out of filename
year=$(echo ${file} | cut -d"-" -f1)
month=$(echo ${file} | cut -d"-" -f2)
### create the variable for store directory name
STOREDIR=${year}_${MONTHS[${month}]}
if [ -d ${STOREDIR} ] ### if the directory exists
then
mv ${file} ${STOREDIR} ### move the file
elif ### the directory doesn't exist
mkdir ${STOREDIR} ### create it
mv ${file} ${STOREDIR} ### then move the file
fi ### close if statement
done ### close the for loop.
Dies sollte ein guter Ausgangspunkt für eine unerfahrene Person sein. Versuchen Sie, Ihr Skript im Lichte dieser Anweisungen und Befehle zu schreiben. Sie können um Hilfe bitten, wenn Sie nicht weiterkommen
Antwort2
Dieses Skript kann hilfreich sein. (Bitte entfernen Sie das Echo für tatsächliche MV-Dateien):
#!/bin/bash
shopt -s nullglob
month=(Jan Feb Mar May Apr Jun Jul Aug Sep Oct Nov Dec)
for y in 2016; do
for m in {01..12}; do
fn="$y-$m"
dn="${month[10#$m-1]}_$y"
[[ ! -d $dn ]] && mkdir -p "$dn"
for file in ./"$fn"*.wav; do
echo mv "$file" "./$dn/${file#\./}"
done
done
done