2016-08-20 47 views
0

任何線索只有在目標文件較小時才能移動文件並覆蓋目標目錄中的文件?移動覆蓋較小的文件

我正在尋找一些bash解決方案,但無法找到任何支持標準通配符。

僞代碼看起來像:

WHEN mv -i is triggering prompt AND input_file_size > target_file_size: 
    mv input_file target_file 
+1

不知道您是否可以通過文件大小輕鬆檢查,但mv具有用於更新的'-u'開關,用於比較文件日期。這對你有用嗎? – Robert

+0

我知道'-u'開關,但我需要在這種情況下比較大小。例如。對於靜態目錄和沒有通配符的情況,很容易「觸摸」更大的文件,然後使用「-u」,但這也會使事情變得複雜。 – null

+0

較小的目標文件中是否存在與較大輸入文件的開頭相同的數據? – Armali

回答

0

猛砸不允許你在進程獲取文件的大小。 你可以做這樣的事情

sz0=$(stat -c%s input_file) 
sz1=$(stat -c%s target_file) 
if ((sz1 < sz0)); then mv input_file target_file; fi 

,但如果你想在一個循環中運行這個不要指望hyperspeed。

+0

這會讓我看得很慢。我用bash腳本還不是很好,但是用'-i'提示符的想法不容易編寫腳本? – null

+0

我不知道你的意思是「抓住'-i'」 – PSkocik

+0

假設我在INPUT目錄中有3個文件,並且1個重複(按名稱),但在TARGET目錄中有更小的文件。你的方式是檢查所有文件的大小,這是毫無意義的。在覆蓋之前捕獲'mv -i' - 提示只會在兩個目錄中有相同的文件時纔會發生,因此對於INPUT中的一個文件和TARGET dir中的一個文件(具有相同名稱)。 – null