它是一个面试问题。当面试官了解到我没有 shell 脚本编写经验时,他问了这个“基本”的 shell 脚本问题。这是问题。
将文件从一个大小大于 500 K 的目录复制到另一个目录。
我可以在 c lang 中立即执行此操作,但在 shell 脚本中似乎很困难,因为从未尝试过。我熟悉 unix 基本命令,所以我尝试过,但我只能使用以下命令提取这些文件名。
du -sk * | awk '{ if ($1>500) print $2 }'
另外,让我知道好的 shell 脚本示例书。
它可以通过多种方式完成。我会尝试使用 find:
find $FIRSTDIRECTORY -size +500k -exec cp "{\} $SECONDDIRECTORY \;
要限制到当前目录,请使用 -maxdepth 选项。
du递归到子目录,这可能是不希望的(如果该点不明确,您可能会要求澄清)。您更有可能被期望使用ls -l或ls -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 脚本通常就是这样。
find . -mindepth 1 -maxdepth 1 -type f -size +BYTESc -exec cp -t DESTDIR {}\+
尺寸上的c后缀是必不可少的;大小以字节为单位。否则,您在确定-size检查结果时可能会出现意外的舍入行为。如果复制是递归的,您还需要注意创建任何目标目录。