2012-07-03 40 views
0

它是一個面試問題。當他明白我沒有shell腳本經驗時,訪問者詢問了這個「基本的」shell腳本問題。這是問題。將具有特定大小的文件複製到其他目錄

將文件從一個大小超過500K的目錄複製到另一個目錄。

我可以在c語言中立即執行它,但在shell腳本中看起來很難,因爲從來沒有嘗試過。我熟悉unix基本命令,所以我嘗試了它,但是我可以只使用下面的命令來提取這些文件名。

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

另外,讓我知道好的shell腳本示例書。

+0

除了使用'du *'而不是'du dir'外,這是一個合理的解決方案,但'find'更好。 –

回答

3

du遞歸到子目錄中,這可能是不需要的(可能要求澄清該點是否含糊)。更有可能你會用ls -lls -s來獲得尺寸。

但是你做了什麼工作來選擇一些文件並打印他們的名字,所以讓我們來構建它。您有一個輸出名稱列表的命令。您需要將該命令的輸出放入cp的命令行中。如果您杜| 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腳本通常的做法。

4

它可以用幾種方法完成。我想嘗試使用find:

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

要限制到當前目錄,請使用-maxdepth選項。

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

c的後綴的大小是至關重要的;大小以字節爲單位。否則,在確定-size檢查的結果時,您可能會收到意外的舍入行爲。如果複製的目的是遞歸的,您還需要注意創建任何目標目錄。

相關問題