Bash
插入文件而不更改文件夾的修改時間戳?
我有數百個帶有修改時間戳的文件夾,我想保留。現在我需要將一個文件複製到其中。
除了這條路…
timestamp=$(stat -c %y /foldername) cp /tmp/file.jpg /foldername/file.jpg touch -d "$timestamp" /foldername
…有沒有更好的方法來抑製文件夾修改時間戳?
另一種方法是使用
touch -r
. 在zsh
:() { touch -r $2:h -- $3 && cp -T -- $2 $3 && touch -r $3 -- $2:h } /tmp/file.jpg /foldername/file.jpg =(:)
Where
=(:)
創建一個空的臨時文件,一旦匿名函式終止,該文件就會被刪除。-T
(強制cp
成為copy-to而不是copy-into)是 GNU 擴展。或者 make 是一個函式,這裡允許將額外的選項傳遞給
cp
:copy_while_preserving_mtime_of_target_directory() { # Usage: ... [cp options] source dest () { touch -r "$@[-1]:h" -- "$1" && cp -T "$@[2,-1]" && touch -r "$1" -- "$@[-1]:h" } =(:) "$@" }
另一種方法可能是一些函式,它將任意 shell 程式碼作為參數並將其執行包裝在保存和恢復目錄 mtime 的東西中:
run_while_preserving_mtime_of() { # Usage: ... directory shell-code () { touch -r "$2" -- "$1" || return { eval -- "$@[3,-1]" } always { touch -r "$1" -- "$2" } } =(:) "$@" }
用作:
run_while_preserving_mtime_of /foldername ' cp /tmp/file.jpg /foldername/file.jpg '
例如。