como mover arquivos usando o resultado “ls -al” no Linux?

4

Como posso escrever um script para copiar arquivos de um diretório para outro diretório de acordo com a data da última modificação?

ls -al

-rw-r--r-- 1 user user 100 2011-05-26 12:33 ABC1234_frontcover_10344000_2011-05.doc

O que exatamente eu quero fazer é: Usando a parte em negrito acima do resultado ls -al, o arquivo ABC1234_frontcover_10344000_2011-05.doc deve ser copiado para /home/abcd/ABC1234/2011-05/26/ .

Deve haver alguma maneira de fazer isso usando o valor de date -r $file +%m e basename *.doc | awk -F_ '{print $1}' . Me ajude aqui, como?

    
por Himalay 26.05.2011 / 23:40

1 resposta

7

Acabei de investir algum tempo para tentar isso e criei o seguinte script:

#!/bin/bash
# set folder where files are located
SOURCE_FOLDER=/path/to/source

# define folder to which the files have to be copied
TARGET_FOLDER=/home/abcd

# ####
cd "${SOURCE_FOLDER}"
for FILE in *; do
    # everything which is not a normal file
    if [ ! -f "${FILE}" ]; then
        echo "Skipping non-file: '${FILE}'"
        continue
    fi

    # extract data from file structure
    FILE_DATE=$(date -r "$FILE" '+%Y-%m')
    FILE_DAY=$(date -r "$FILE" '+%d')
    FILE_PREFIX=${FILE%%_*}

    # skip files which do not match the naming convention
    if [ "${FILE_PREFIX}" = "" -o "${FILE_PREFIX}" = "${FILE}" ]; then
        echo "Skipping file with wrong naming: '${FILE}'"
        continue
    fi

    # create target folder
    TARGET="${TARGET_FOLDER}/${FILE_PREFIX}/${FILE_DATE}/${FILE_DAY}"
    echo "Copy '$FILE' to ${TARGET}"
    mkdir -p "${TARGET}"
    cp "$FILE" "$TARGET"
done

Ele também cobre alguns casos especiais e verificações de probabilidade.

    
por 27.05.2011 / 00:06

Tags