3 bash scripts files directory mv
我目前正在编写一个脚本,该脚本允许我将任何超过 5 天的文件移动到具有相同路径的存档文件夹中,但根文件夹发生了变化。所以像:
root/subdir1/subdir2/file到rootarchive/subdir1/subdir2/file。它应该递归地工作。
我已经尝试为“根”文件夹的所有文件创建一个 foreach:
#!/bin/bash
find . -type f -name '*.*' -print0 | while IFS= read -r -d '' file; do
mv $file ../rootarchive/"$file"
done
Run Code Online (Sandbox Code Playgroud)
但这不能正常工作,因为我 mv 命令找不到指定的目的地../rootarchive/"$file"。你们中有人知道我如何解决这个问题吗?
您需要从中创建目录树subdir1/subdir2/-mv不会为您这样做。你可以这样做,例如:
find . -type f -mtime +5 -print0 | while IFS= read -r -d '' file; do
dir="${file%/*}"
mkdir -p ../rootarchive/"$dir"
mv "$file" ../rootarchive/"$file"
done
Run Code Online (Sandbox Code Playgroud)
你可以rsync。它可以重新创建目录结构并删除复制的文件:
find . -type f -mtime +5 -print0 |
rsync -0avP --remove-source-files --files-from=- ./ ../rootarchive
Run Code Online (Sandbox Code Playgroud)
对于rsync:
-0表示文件列表是空分隔的。这会影响:--files-from=读取要复制的文件列表(来自 stdin: -)。-a 启用存档模式,保留文件权限、所有权等。--remove-source-files删除已成功从源复制的文件。-vP 启用详细模式和进度信息。| 归档时间: |
|
| 查看次数: |
7308 次 |
| 最近记录: |