2012-09-25 40 views
1

aafm是一個小型的Python GUI實用程序,它使用adb作爲底層在計算機和Android設備之間使用MTP複製文件。但就目前而言,這些文件會獲取它們被複制的時間戳,而不是它們原來的時間戳。如何使用adb shell手動設置文件或目錄時間戳?在adb shell中是否存在類似unix的touch?

如果我們可以在設備中設置最後修改日期以匹配計算機上次修改時間,那將是非常好的。

我一直在查看http://developer.android.com/tools/help/adb.html中的adb shell命令列表,但到目前爲止,我無法找到類似於經典unix touch命令的任何遠程命令。

在這個shell中是否存在類似的東西?

+0

我發現'touch'確實存在,當我將sshDroid放入我的軟糖設備中時,但是我一直在'操作不允許'。 –

回答

2

您可以在android上使用busybox用於此目的。這是一個作爲小型linux標準程序的替代品(主要是有限選項)的二進制代碼,例如, touchRead thisthis

現在,我發現這是Android的工具箱二進制的一部分,但如果你不能找到它在手機上,你可以用自己的內置觸摸二進制和使用它,source file is here。你只需要在手機上進行上傳,chmod並在使用後刪除。

+0

我不能/想要在設備中安裝*任何*,我正在尋找一些適用於股票Android adb外殼的東西,因爲aafm的使用方式遠遠超過我和我的設備;-) – sole

+0

其實,您可以在不安裝的情況下使用它 - 只需在設備上覆制,chmod,運行,然後刪除。如果您只需要觸摸 - 您可以重命名busybox二進制文件(因爲busybox根據命令名稱選擇操作),或者稍後您可以根據自己需要的內部構建自己的自定義busybox。當然,這可能不是優雅的解決方案,但可以作爲解決方法。 – pmod

+0

感謝您的評論,pmod,但我仍然不認爲這是aafm的明智解決方案。我正在尋找一種原生的股票方式。 – sole

1

如果您正在討論使用ADB從主機複製到Android,它應該使用原始的修改時間戳。 adbd中的當前代碼執行utime()。在某些設備上,utime()失敗(請參見下文)。通過ADB從Android複製到主機甚至不嘗試設置任何時間戳。我不知道這個遺漏的原因。在我的兩個設備上(2.1 & 4.0)修改時間戳設置爲寫入Android,但不寫入主機。在4.2設備上,FUSE文件系統存在問題,並且不允許utime();

在沒有真正SD卡的設備上(即使用FUSE),除非您是root用戶,否則在文件上執行utime()會出現問題。這會進入異常情況,您可以創建文件但不更改時間戳。唯一真正的解決方案是確保ro.secure=0或您正在運行adbd的不安全版本。

+0

你需要root來更改'ro.secure'嗎?我的網頁搜索如何改變它似乎表明'你不能'。 –

+1

'ro.secure'在啓動時設置,之後不可寫入。它通常包裝在'default.prop'中。你需要根植來改變這一點。 – Renate

相關問題