ගොනුවක් වෙනස් කළ / නිර්මාණය කළ දිනය වෙනස් කරන්නේ කෙසේද?


256

ගොනුවක් වෙනස් කරන ලද / නිර්මාණය කළ දිනය වෙනස් කිරීමට ක්‍රමයක් තිබේද (එය නාටිලස්හි හෝ ls -l විධානය සමඟ පෙන්වා ඇත)? ඉතා මැනවින් මම සොයන්නේ සම්පූර්ණ ලිපිගොනු පොකුරක දිනය / වේලාව මුද්දර කලින් හෝ පසුව යම් කාලයකට වෙනස් කළ හැකි විධානයකි (උදා: පැය +8 හෝ දින -4 යනාදිය).

Answers:


354

ඔබ ගොනුවේ හිමිකරු වන තාක් කල් (හෝ 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.


1
සියලුම ලිපිගොනු එකම ෆෝල්ඩරයේ ඇති විට වඩාත් සරල අවස්ථාව සඳහන් කිරීම සඳහා:, touch -d "2 hours ago" /path/*.txtඋදාහරණයක් ලෙස.
enzotib

1
වෙනස් කිරීම ctimeකිසිදු සම්මත ආකාරයකින් කළ නොහැකි බව මම ද කියමි .
සූදානම්

මේ සියල්ල POSIX ද?
user1011471

1
පිළිබඳ තොරතුරු ctimeඉතා පාරදත්ත වෙනස් කාලය POSIX සිට ඇත. මගේ පිළිතුරේ ඇති ෂෙල් කැබලි දැඩි පොසික්ස් ෂෙල් උපයෝගීතා සමඟ ක්‍රියා කරයිදැයි මම නොදනිමි. නමුත් ඔවුන් අනිවාර්යයෙන්ම උබුන්ටු මත වැඩ කරයි, එය මෙම වෙබ් අඩවියේ පිළිතුරු සඳහා සන්දර්භය වේ.
ජේම්ස් හෙන්ස්ට්‍රිජ්

2
OSX හි, ඔබට භාවිතා කිරීමට අවශ්‍ය විය gtouchහැකිය brew install coreutils.
නොබු

51

උදව්වට ස්තූතියි. මෙය මට ප්‍රයෝජනවත් විය:

පර්යන්තය තුළ දිනය සංස්කරණය සඳහා නාමාවලිය වෙත යන්න. ඉන්පසු ටයිප් කරන්න:

find -print | while read filename; do
    # do whatever you want with the file
    touch -t 201203101513 "$filename"
done

ඔබ එන්ටර් පහර දුන් පසු ">" දකිනු ඇත, අවසන් වරට ක්‍රියාත්මක කරන්න -> "කර ඇත".

සටහන: ඔබට "201203101513" වෙනස් කිරීමට අවශ්‍ය විය හැකිය

"201203101513" = මෙම නාමාවලියෙහි ඇති සියලුම ලිපිගොනු සඳහා ඔබට අවශ්‍ය දිනයයි.

මගේ වෙබ් පිටුව බලන්න


ගොනු
ඒන්ජල්

වෙබ් පිටුව තවදුරටත් නැත, එය වසර 6 කට පසුව වුවද. එසේ වුවද, මම සොයන පිළිතුර මෙයයි. ඔවුන්ගේ වේලාවට තත්පර ඇතුළත් කිරීමට අවශ්‍ය අය සඳහා .ss, ss යනු තත්පර ගණන කොතැනදැයි භාවිතා කරන්න . (සටහන: මෙම පාලන උප-දෙවන මට පමණක් බිංදු ලෙස දිස්වන, එවැනි නැනෝ තත්පර හෝ මිලි තත්පර ලෙස ලෙවල් වලට බවක් පෙනෙන්නට නැත, කෙසේ වෙතත්, මෙම වෙනස මගේ භාවිතය-නඩුව සඳහා අවසර විය.)
ස්පෙන්සර් ඩී

40

පහසුම ක්‍රමය - ප්‍රවේශ වීම සහ වෙනස් කිරීම සමාන වේ:

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

බලන්න: මිනිසා ස්පර්ශ කරන්න


1
සංඛ්‍යාලේඛන භාවිතයෙන් එය සත්‍යාපනය කිරීමට මම උත්සාහ කළෙමි, නමුත් touchකොඩි කිසිවක් නිවැරදි ප්‍රති .ලයකට යොමු නොකරයි . වෙනස් කිරීමේ දිනය සකසා ඇත, නමුත් වෙනස් කර ප්‍රවේශ වූ දිනය සැබවින්ම දැන් වෙනස් කර ඇත
Xerus

එය මට වැඩ කළේ නැත, එය වෙනස් කළේ "වෙනස් කිරීමේ" කාලය පමණි
පුනරාවර්තන

Ee පෙර, Xerus changedකාලය සහ කාලරාමු අතර වෙනස modifiedකුමක්ද?
ijoseph

11

ස්පර්ශයට ගොනුවේ දිනය තනිවම සඳහන් කළ හැකිය, 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' '{}'

2

මෙම කුඩා පිටපත අවම වශයෙන් මට වැඩ කරයි

#!/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

2
රූපයේ මෙටා තොරතුරු මත පදනම්ව රූපවල දිනය සකස් කිරීම බෙහෙවින් ප්‍රයෝජනවත් වනු ඇත. ImageMagick ගේ අනන්‍යතාවය භාවිතා කළ හැකිය. උදා: 'හදුනාගන්න -වර්බෝස් <image> | grep -i date', 'හදුනාගන්න-ආකෘතිය% [exif: DateTime] <image>' පෙන්විය හැකිය '2015: 01: 08 10:19:10' (සෑම රූපයකම exif දත්ත නොමැත ). මෙය ක්‍රියාත්මක වේ (ස්පර්ශය හැඩතල ගැන්වීමට දිනය පරිවර්තනය කිරීමට sed භාවිතා කළ හැකිය): 'touch -d $ (-format% හදුනාගන්න [exif: DateTime] $ f | sed -r' s /: / - /; s /: / - / ; ') $ f'
gaoithe

1

මම ඕනෑම ආකාරයක යුනික්ස් වැඩසටහනක් ලියා බොහෝ කාලයක් ගත වී ඇත, නමුත් මම අහම්බෙන් නත්තල් ඡායාරූප පොකුරක් මත වර්ෂය වැරදියට සකසා ඇති අතර, 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 ණ ලෙස දිනය වෙනස් කරයි.


1
ඉහත අදහස් දැක්වීමට සමානය. බොහෝ .jpg ලිපිගොනු වල කැමරාව විසින් ප්‍රචාරණය කරන ලද මෙටා දත්ත ඇතුළත් කර ඇත. මෙය ක්‍රියාත්මක වේ (ස්පර්ශය හැඩතල ගැන්වීමට දිනය පරිවර්තනය කිරීමට sed භාවිතා කළ හැකිය): 'touch -d $ (-format% හදුනා ගන්න [exif: DateTime] $ f | sed -r' s /: / - /; s /: / - / ; ') $ f'
gaoithe

-5

සැකසුම් තුළ දිනය සහ වේලාව වෙනස් කරන්න. ඔබගේ ගොනුව සුරකින්න, එය ස්වයංක්‍රීයව වෙනස් වේ


4
ස්නෙජ් විවිධ ගොනු වෙනස් කිරීමට භාවිතා කළ හැකි කණ්ඩායම් හෝ විධාන රේඛා විසඳුමක් සොයයි. පද්ධතියේ වේලාව සහ දිනය වෙනස් කිරීම සහ ගොනු වෙනස් කිරීම බොහෝ විට පරිපූර්ණ විසඳුමක් නොවේ.
පිරිසැකසුම්කරු 4

1
ඕනෑවට වඩා ට්‍රයිඅයිඅයිකි !!!
පිලිප් ගචූඩ්

වෙබ් සෙවුම හරහා මෙහි ගෙන එන වෙනත් මෙහෙයුම් පද්ධති ඇති අයට, මෙම පිළිතුර මැක් ඕඑස්එක්ස් හි ගොනුවක දිනය වෙනස් කිරීමේ සරලම ක්‍රමයයි ('ස්පර්ශ-ඩී' ප්‍රති results ල 'නීති විරෝධී විකල්පය').
ඇලන් කිරීම

1
@alanning: OSX සතුව BSD ස්පර්ශයක් ඇත, නමුත් GNU ස්පර්ශය නොවේ. -T භාවිතා කරන්න. developer.apple.com/library/mac/documentation/Darwin/Reference/...
Dominik ආර්

එය අනපේක්ෂිත ප්‍රතිවිපාක ඇති කළ හැකිය. නවීන මෙහෙයුම් පද්ධතියක, බොහෝ ලිපිගොනු තිරය පිටුපස සෑම විටම වෙනස් වෙමින් පවතී. ඔබගේ දිනය වෙනස් කර ඇති අතර, තවත් බොහෝ ලිපිගොනු වල වැරදි දින මුද්දර ලබා ගත හැකි අතර පද්ධතියේ වෙනත් දෙයක් ගොනුවක් බලාපොරොත්තු වූවාට වඩා පැරණි බව දුටු විට ඕනෑම දෙයක් සිදුවිය හැකිය.
ජෝ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.