0

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

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

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

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

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

4

3 回答 3

4

它可以通过多种方式完成。我会尝试使用 find:

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

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

于 2012-07-03T11:45:55.757 回答
3

du递归到子目录,这可能是不希望的(如果该点不明确,您可能会要求澄清)。您更有可能被期望使用ls -lls -s获得尺寸。

但是您所做的工作可以选择一些文件并打印它们的名称,所以让我们以此为基础。您有一个输出名称列表的命令。您需要将该命令的输出放入cp. 如果你的 du|awk 输出这个:

Makefile
foo.c
bar.h

你想运行这个:

cp Makefile foo.c bar.h otherdirectory

所以你是如何做到这一点的就是这样写的COMMAND SUBSTITUTION$(...)

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

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

于 2012-07-03T11:46:02.267 回答
0
find . -mindepth 1 -maxdepth 1 -type f -size +BYTESc -exec cp -t DESTDIR {}\+

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

于 2012-07-03T11:48:33.797 回答