Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 创建Unix shell脚本,将非空文件从源目录移动到目标目录,并向其添加时间戳_Linux_Unix_Cygwin - Fatal编程技术网

Linux 创建Unix shell脚本,将非空文件从源目录移动到目标目录,并向其添加时间戳

Linux 创建Unix shell脚本,将非空文件从源目录移动到目标目录,并向其添加时间戳,linux,unix,cygwin,Linux,Unix,Cygwin,我试图创建一个shell脚本,将非空文件从源目录移动到目标目录,并为它们添加时间戳。 我正在使用 find . -type f -size +0 -print0 | xargs -I {} -r0 mv {} $Tgt_dir/{}_`date +%m%d%Y` 但它不起作用。你能帮忙吗 谢谢您可以在find中使用-printf打印mv命令,其中包含源的完整路径和目标中的basename,并将其传输到shell: date=$(date +%m%d%Y) find . -type f -siz

我试图创建一个shell脚本,将非空文件从源目录移动到目标目录,并为它们添加时间戳。 我正在使用

find . -type f -size +0 -print0 | xargs -I {} -r0 mv {} $Tgt_dir/{}_`date +%m%d%Y`
但它不起作用。你能帮忙吗


谢谢

您可以在
find
中使用
-printf
打印
mv
命令,其中包含源的完整路径和目标中的basename,并将其传输到shell:

date=$(date +%m%d%Y)
find . -type f -size +0 -printf "mv '%p' '$Tgt_dir/%f_$date'" | bash
%p
是完整路径名,
%f
是基本名称

要移动至少有一行的文件,请编写一个计算行数的命令:

date=$(date +%m%d%Y)
find "$Src_dir" -type f -size +0 -printf "if [ $(wc -l '$p') -gt 1 ]; then mv '%p' '$Tgt_dir/%f_$date'; fi" | bash

用于编程问题,而不是有关使用或配置Unix及其实用程序的问题。或者更适合这样的问题。它做错了什么?
{}
将包含完整的路径名。因此,它将尝试将
dir1/dir2/filename
写入
$Tgt\u dir/dir1/dir2/filename
。如果目标中不存在子目录,
mv
不会自动创建它们。没错。它试图将非零大小移动到Tgt_dir/Src_dir/filename。我们如何将其移动到仅Tgt_dir。谢谢你应该编辑问题以清楚地解释问题。这很有效。我将“find.”替换为“find$Src_dir”。非常感谢。我将如何做同样的事情,但这次移动的文件中有超过一行。感谢找到$Src|u dir-type f|xargs wc-l|sed's/^*//g'| grep-v'^1'| egrep-v'total'| rev | cut-d'/'-f1 | rev | xargs-I{}mv$Src|dir{}$Tgt| dir}
date+%m%d%Y
这应该是个问题吗?