Answers:
ඔබ ගොනුවේ හිමිකරු වන තාක් කල් (හෝ root), touch
විධානය භාවිතා කර ගොනුවක වෙනස් කිරීමේ කාලය වෙනස් කළ හැකිය :
touch filename
පෙරනිමියෙන් මෙය ගොනුවේ වෙනස් කිරීමේ වේලාව වත්මන් වේලාවට සකසනු ඇත, නමුත් -d
නිශ්චිත දිනයක් තෝරා ගැනීම සඳහා ධජය වැනි ධජ ගණනාවක් තිබේ. උදාහරණයක් ලෙස, වර්තමානයට පැය දෙකකට පෙර ගොනුවක් වෙනස් කරන ලෙස සැකසීමට, ඔබට පහත සඳහන් දෑ භාවිතා කළ හැකිය:
touch -d "2 hours ago" filename
ගොනුව එහි පවතින වෙනස් කිරීමේ වේලාවට සාපේක්ෂව වෙනස් කිරීමට ඔබට අවශ්ය නම්, පහත දැක්වෙන්නේ උපක්රමයයි:
touch -d "$(date -R -r filename) - 2 hours" filename
ඔබට ගොනු විශාල සංඛ්යාවක් වෙනස් කිරීමට අවශ්ය නම්, ඔබට පහත සඳහන් දෑ භාවිතා කළ හැකිය:
find DIRECTORY -print | while read filename; do
# do whatever you want with the file
touch -d "$(date -R -r "$filename") - 2 hours" "$filename"
done
ඔබ find
උනන්දුවක් දක්වන ලිපිගොනු පමණක් තෝරා ගැනීම සඳහා ඔබට තර්ක වෙනස් කළ හැකිය . වර්තමාන කාලයට සාපේක්ෂව ගොනු වෙනස් කිරීමේ වේලාවන් යාවත්කාලීන කිරීමට ඔබට අවශ්ය නම්, ඔබට මෙය සරල කළ හැකිය:
find DIRECTORY -exec touch -d "2 hours ago" {} +
මෙම පෝරමය ගොනු කාල සාපේක්ෂ අනුවාදය සමඟ කළ නොහැක්කේ එය තර්ක සැකසීමට කවචය භාවිතා කරන බැවිනි touch
.
නිර්මාණය කිරීමේ කාලය යන තාක් දුරට, බොහෝ ලිනක්ස් ගොනු පද්ධති මෙම අගය නිරීක්ෂණය නොකරයි. එහි ඇත ctime
ගොනු හා සම්බන්ධ, නමුත් ගොනුව පාරදත්ත අවසන් වරට වෙනස් කරන ලදී විට එය පීලි. ගොනුව කිසි විටෙකත් එහි අවසරයන් වෙනස් කර නොමැති නම්, එය නිර්මාණය කිරීමේ කාලය රඳවා තබා ගැනීමට සිදුවනු ඇත, නමුත් මෙය අහම්බයකි. ගොනු වෙනස් කිරීමේ වේලාව පාරදත්ත වෙනසක් ලෙස පැහැදිලිව වෙනස් කිරීම, යාවත්කාලීන කිරීමේ අතුරු ආබාධයක් ද ඇත ctime
.
ctime
කිසිදු සම්මත ආකාරයකින් කළ නොහැකි බව මම ද කියමි .
ctime
ඉතා පාරදත්ත වෙනස් කාලය POSIX සිට ඇත. මගේ පිළිතුරේ ඇති ෂෙල් කැබලි දැඩි පොසික්ස් ෂෙල් උපයෝගීතා සමඟ ක්රියා කරයිදැයි මම නොදනිමි. නමුත් ඔවුන් අනිවාර්යයෙන්ම උබුන්ටු මත වැඩ කරයි, එය මෙම වෙබ් අඩවියේ පිළිතුරු සඳහා සන්දර්භය වේ.
gtouch
හැකිය brew install coreutils
.
උදව්වට ස්තූතියි. මෙය මට ප්රයෝජනවත් විය:
පර්යන්තය තුළ දිනය සංස්කරණය සඳහා නාමාවලිය වෙත යන්න. ඉන්පසු ටයිප් කරන්න:
find -print | while read filename; do
# do whatever you want with the file
touch -t 201203101513 "$filename"
done
ඔබ එන්ටර් පහර දුන් පසු ">" දකිනු ඇත, අවසන් වරට ක්රියාත්මක කරන්න -> "කර ඇත".
සටහන: ඔබට "201203101513" වෙනස් කිරීමට අවශ්ය විය හැකිය
"201203101513" = මෙම නාමාවලියෙහි ඇති සියලුම ලිපිගොනු සඳහා ඔබට අවශ්ය දිනයයි.
.ss
, ss යනු තත්පර ගණන කොතැනදැයි භාවිතා කරන්න . (සටහන: මෙම පාලන උප-දෙවන මට පමණක් බිංදු ලෙස දිස්වන, එවැනි නැනෝ තත්පර හෝ මිලි තත්පර ලෙස ලෙවල් වලට බවක් පෙනෙන්නට නැත, කෙසේ වෙතත්, මෙම වෙනස මගේ භාවිතය-නඩුව සඳහා අවසර විය.)
පහසුම ක්රමය - ප්රවේශ වීම සහ වෙනස් කිරීම සමාන වේ:
touch -a -m -t 201512180130.09 fileName.ext
කොහෙද:
-a = accessed
-m = modified
-t = timestamp - use [[CC]YY]MMDDhhmm[.ss] time format
ඔබ භාවිතා කිරීමට කැමති නම් සහ කාලරාමුව NOW
අතහරින්න -t
.
සත්යාපනය සඳහා ඒවා සියල්ලම එක හා සමානයි:
stat fileName.ext
බලන්න: මිනිසා ස්පර්ශ කරන්න
touch
කොඩි කිසිවක් නිවැරදි ප්රති .ලයකට යොමු නොකරයි . වෙනස් කිරීමේ දිනය සකසා ඇත, නමුත් වෙනස් කර ප්රවේශ වූ දිනය සැබවින්ම දැන් වෙනස් කර ඇත
changed
කාලය සහ කාලරාමු අතර වෙනස modified
කුමක්ද?
ස්පර්ශයට ගොනුවේ දිනය තනිවම සඳහන් කළ හැකිය, date
විධාන ආදේශනය ඇමතීමට හෝ භාවිතා කිරීමට අවශ්ය නැත . ස්පර්ශයේ තොරතුරු පිටුවෙන් ටිකක් මෙන්න:
`-r FILE' `--reference=FILE'
Use the times of the reference FILE instead of the current time.
If this option is combined with the `--date=TIME' (`-d TIME')
option, the reference FILE's time is the origin for any relative
TIMEs given, but is otherwise ignored. For example, `-r foo -d
'-5 seconds'' specifies a time stamp equal to five seconds before
the corresponding time stamp for `foo'. If FILE is a symbolic
link, the reference timestamp is taken from the target of the
symlink, unless `-h' was also in effect.
උදාහරණයක් ලෙස, ගොනුවක දිනයට පැය 8 ක් එකතු කිරීම ( file
අවකාශයේ නම් සඳහන් කළ ගොනු නාමය ආදිය):
touch -r "file" -d '+8 hour' "file"
වත්මන් dir හි ඇති සියලුම ලිපිගොනු වලට වඩා ලූපයක් භාවිතා කිරීම:
for i in *; do touch -r "$i" -d '+8 hour' "$i"; done
මම භාවිතා බව අසා ඇත්තෙමි *
පත්කරලීම for
ම ය ද යන ගොනු නාමය තෝරාගන්න ආරක්ෂිත , නමුත් භාවිතා find -print0 | xargs -0 touch ...
පාලනය කළ යුත්තේ ඉතා හිස් පේලි ගැන, හිස් තැන්, මිල කැඳවීම්, එය ගොනු දී backslashes වැනි පිස්සු චරිත. (PS. ගොනු නාමවල පිස්සු අක්ෂර භාවිතා නොකිරීමට උත්සාහ කරන්න).
නිදසුනක් ලෙස, ගොනු thatdir
නාමයන් ආරම්භ වන සියලුම ලිපිගොනු සොයා ගැනීමට s
සහ එම ගොනුවේ වෙනස් කළ කාලරාමුව වෙත එක් දිනක් එක් කිරීමට, භාවිතා කරන්න:
find thatdir -name "s*" -print0 | xargs -0 -I '{}' touch -r '{}' -d '+1 day' '{}'
මෙම කුඩා පිටපත අවම වශයෙන් මට වැඩ කරයි
#!/bin/bash
# find specific files
files=$(find . -type f -name '*.JPG')
# use newline as file separator (handle spaces in filenames)
IFS=$'\n'
for f in ${files}
do
# read file modification date using stat as seconds
# adjust date backwards (1 month) using date and print in correct format
# change file time using touch
touch -t $(date -v -1m -r $(stat -f %m "${f}") +%Y%m%d%H%M.%S) "${f}"
done
මම ඕනෑම ආකාරයක යුනික්ස් වැඩසටහනක් ලියා බොහෝ කාලයක් ගත වී ඇත, නමුත් මම අහම්බෙන් නත්තල් ඡායාරූප පොකුරක් මත වර්ෂය වැරදියට සකසා ඇති අතර, 2015 සිට 2014 දක්වා දිනය වෙනස් නොකළේ නම් එය පසුව ගැටලුවක් වනු ඇති බව මම දැන සිටියෙමි. .
සමහර විට, මෙය පහසු කාර්යයක් විය හැකි නමුත් මට එය කිරීමට සරල ක්රමයක් සොයාගත නොහැකි විය.
මම මෙහි සොයාගත් ස්ක්රිප්ට් එකක් වෙනස් කළෙමි, එය මුලින් භාවිතා කළේ දිනය අවම වශයෙන් මාසයක් ලෙස වෙනස් කිරීමට ය.
මුල් පිටපත මෙන්න:
#!/bin/bash
# find specific files
files=$(find . -type f -name '*.JPG')
# use newline as file separator (handle spaces in filenames)
IFS=$'\n'
for f in ${files}
do
# read file modification date using stat as seconds
# adjust date backwards (1 month) using date and print in correct format
# change file time using touch
touch -t $(date -v -1m -r $(stat -f %m "${f}") +%Y%m%d%H%M.%S) "${f}"
done
"2014" වර්ෂය සඳහා දිනය බල කළ මගේ වෙනස් කළ පිටපත මෙන්න:
#!/bin/bash
# find specific files
#files=$(find . -type f -name '*.JPG')
# use newline as file separator (handle spaces in filenames)
IFS=$'\n'
for f in $*
do
# read file modification date using stat as seconds
# adjust date backwards (1 month) using date and print in correct format
# change file time using touch
touch -t $(date -v +1y -r $(stat -f %m "${f}") +2014%m%d%H%M.%S) "${f}"
done
මට දැන් වඩාත් සාමාන්ය අනුවාදයක් කළ හැකිව තිබූ බව මට වැටහී ඇත:
#!/bin/bash
# find specific files
#files=$(find . -type f -name '*.JPG')
# use newline as file separator (handle spaces in filenames)
IFS=$'\n'
for f in $*
do
# read file modification date using stat as seconds
# adjust date backwards (1 month) using date and print in correct format
# change file time using touch (+1y adds a year "-1y" subtracts a year)
# Below line subtracts a year
touch -t $(date -v -1y -r $(stat -f %m "${f}") +%Y%m%d%H%M.%S) "${f}"
# Below line adds a year
# touch -t $(date -v +1y -r $(stat -f %m "${f}") +%Y%m%d%H%M.%S) "${f}"
done
මෙම ගොනුව භාවිතා කිරීමට ඔබට එය ලිවිය යුතුය
chmod +x fn
ක්රියාත්මක කිරීමට:
./fn files-to-change
fn = ඔබේ ගොනුව-නම-එය-ඔබේ-විධානයයි
උදාහරණයක්
./fn *.JPG
ඔබ සිටින නාමාවලියෙහි වසරකට us ණ ලෙස දිනය වෙනස් කරයි.
සැකසුම් තුළ දිනය සහ වේලාව වෙනස් කරන්න. ඔබගේ ගොනුව සුරකින්න, එය ස්වයංක්රීයව වෙනස් වේ
touch -d "2 hours ago" /path/*.txt
උදාහරණයක් ලෙස.