如何在 Linux 中使用“ls -al”结果移动文件?

Him*_*lay 4 linux bash awk

如何编写脚本以根据上次修改日期将文件从一个目录复制到另一个目录?

ls -al

-rw-R - R-- 1个用户的用户100 2011-05- 26 12点33 ABC1234 _frontcover_10344000_2011-05.doc

我到底想要做的是,使用 ls -al 结果的上述粗体部分ABC1234_frontcover_10344000_2011-05.doc应该将文件复制到/home/abcd/ABC1234/2011-05/26/.

应该有一些方法可以使用date -r $file +%mand 的值来做到这一点basename *.doc | awk -F_ '{print $1}'。帮帮我,怎么样?

Sky*_*eam 7

我刚刚花了一些时间来尝试这个并想出了以下脚本:

#!/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
Run Code Online (Sandbox Code Playgroud)

它还涵盖了一些特殊情况和概率检查。