这是一个面试问题。当他了解我没有shell脚本编写经验时,采访者问这个“基本”shell脚本问题。这是问题。
将文件从一个大小超过500 K的目录复制到另一个目录。
我可以在c lang中立即执行,但在shell脚本中似乎很难,因为从未尝试过。我熟悉unix基本命令所以我尝试过,但我可以使用下面的命令提取这些文件名。
du -sk * | awk '{ if ($1>500) print $2 }'
另外,让我知道好的shell脚本示例书。
答案 0 :(得分:4)
可以通过多种方式完成。我试着用find:
find $FIRSTDIRECTORY -size +500k -exec cp "{\} $SECONDDIRECTORY \;
要限制当前目录,请使用-maxdepth选项。
答案 1 :(得分:3)
du
递归到子目录中,这可能是不可取的(如果这一点不明确,你可以要求澄清)。您更有可能使用ls -l
或ls -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
检查的结果时,您可能会遇到意外的舍入行为。如果复制是递归的,则还需要注意创建任何目标目录。