将具有特定大小的文件复制到其他目录

时间:2012-07-03 11:30:21

标签: shell unix

这是一个面试问题。当他了解我没有shell脚本编写经验时,采访者问这个“基本”shell脚本问题。这是问题。

将文件从一个大小超过500 K的目录复制到另一个目录。

我可以在c lang中立即执行,但在shell脚本中似乎很难,因为从未尝试过。我熟悉unix基本命令所以我尝试过,但我可以使用下面的命令提取这些文件名。

du -sk * | awk  '{ if ($1>500) print $2 }'

另外,让我知道好的shell脚本示例书。

3 个答案:

答案 0 :(得分:4)

可以通过多种方式完成。我试着用find:

find $FIRSTDIRECTORY -size +500k -exec cp "{\} $SECONDDIRECTORY \;

要限制当前目录,请使用-maxdepth选项。

答案 1 :(得分:3)

du递归到子目录中,这可能是不可取的(如果这一点不明确,你可以要求澄清)。您更有可能使用ls -lls -s来获取尺寸。

但你做了什么来选择一些文件并打印他们的名字,所以让我们建立它。您有一个输出名称列表的命令。您需要将该命令的输出放入cp的命令行。如果你的du | awk输出这个:

Makefile
foo.c
bar.h

你想要运行这个:

cp Makefile foo.c bar.h otherdirectory

所以你如何做到这一点的是 命令替换 ,它写成$(...),如下所示:

cd firstdirectory
cp $(du -sk * | awk '{ if ($1>500) print $2 }') otherdirectory

这是一个有效的脚本。 du | awk命令首先运行,其输出用于构建cp命令。有许多微妙的缺点会使它不适合一般使用,但这就是初学者级shell脚本通常的方式。

答案 2 :(得分:0)

find . -mindepth 1 -maxdepth 1 -type f -size +BYTESc -exec cp -t DESTDIR {}\+

大小的c后缀是必不可少的;大小以字节为单位。否则,在确定-size检查的结果时,您可能会遇到意外的舍入行为。如果复制是递归的,则还需要注意创建任何目标目录。