வழிகாட்டி

Linux-இல் find கட்டளை: பெயர், அளவு மற்றும் தேதியின்படி கோப்புகளைத் தேடுதல் — எடுத்துக்காட்டுகள்

புதுப்பிக்கப்பட்டது: · Skillaria.Top

find கட்டளை கோப்பக மரத்தில் நிபந்தனைகளின்படி கோப்புகளைத் தேடுகிறது: find /path -name '*.log' பெயரின்படி தேடும், -type f கோப்புகளை மட்டும், -size +100M 100 MB-ஐ விடப் பெரியவற்றை, -mtime -7 கடந்த வாரத்தில் மாற்றப்பட்டவற்றை. நிபந்தனைகளை இணைக்கலாம், கண்டறிந்தவற்றின் மீது -exec, -delete செயல்படுத்தலாம் அல்லது பட்டியலை xargs-க்கு அனுப்பலாம்.

find கட்டளை கோப்பக மரத்தில் பயணித்து பெயர், வகை, அளவு, மாற்றப்பட்ட தேதி, உரிமையாளர் மற்றும் அனுமதிகளின்படி கோப்புகளைக் கண்டறிகிறது. பொதுவான அமைப்பு — find [எங்கே தேடுவது] [நிபந்தனைகள்] [செயல்]. கீழே பொதுவான பணிகளுக்கான find linux examples உள்ளன: ஒரு config கோப்பைக் கண்டறிவது, பழைய logs-ஐ சுத்தம் செய்வது, வட்டு இடத்தை எது நிரப்புகிறது என்று பார்ப்பது.

find கட்டளையின் தொடரியல்

find /var/log -type f -name '*.log' -mtime +30 -print

பகுதி பகுதியாகப் பார்ப்போம்:

  • /var/log — தொடக்கப் புள்ளி. பல கோப்பகங்களை அடுத்தடுத்து அல்லது . (தற்போதையது) கொடுக்கலாம். பாதை இல்லாவிட்டால் GNU find தற்போதைய கோப்பகத்தில் தேடும்.
  • -type f -name '*.log' -mtime +30 — நிபந்தனைகள் (ஆவணங்களில் அவை சோதனைகள் — tests என அழைக்கப்படுகின்றன). அவற்றுக்கிடையே இயல்பாக தருக்க «மற்றும்» (AND) உள்ளது.
  • -print — செயல்: பாதையை வெளியிடு. வேறு செயல் இல்லையென்றால் அது தானாகவே பொருந்தும்.

find மீண்டும் மீண்டும் எல்லா உள் கோப்பகங்களுக்குள்ளும் செல்லும். சாதாரண பயனராக கணினி பாதைகளில் இயக்கினால் வெளியீட்டில் Permission denied வரிகள் நிரம்பும். பிழை ஓட்டத்தைத் திசைதிருப்பி அவற்றை நீக்குங்கள்:

find / -name 'nginx.conf' 2>/dev/null

பெயரின்படி தேடுதல்: -name மற்றும் -iname

-name நிபந்தனை கோப்பின் பெயரை மட்டும் (பாதை இல்லாமல்) வடிவத்துடன் ஒப்பிடும். வடிவம் * (எந்த எழுத்துகளும்), ? (ஒரு எழுத்து) மற்றும் [abc] (குறிப்பிட்டவற்றில் ஒன்று) ஆகியவற்றை ஆதரிக்கும்.

# சரியான பெயர்
find /etc -name 'hosts'

# அனைத்து .conf கோப்புகளும்
find /etc -name '*.conf'

# பெரிய/சிறிய எழுத்தைப் பொருட்படுத்தாமல்: README.md, readme.MD, Readme.md
find ~/projects -iname 'readme.md'

# report_1.csv ... report_9.csv
find . -name 'report_?.csv'

வடிவத்தை எப்போதும் மேற்கோளுக்குள் எழுதுங்கள். இல்லையெனில் shell தற்போதைய கோப்பகத்தின் கோப்புகளுக்கு *.conf-ஐ தானாக விரிவாக்கிவிடும், find-க்கு வடிவத்திற்குப் பதில் கோப்புப் பெயர்களின் பட்டியல் கிடைக்கும் — முடிவு எதிர்பாராததாக இருக்கும் அல்லது கட்டளை paths must precede expression பிழையுடன் நின்றுவிடும்.

பாதையின்படி தேடுதல்: -path மற்றும் -regex

கோப்பகம் முக்கியமெனில், பெயர் மட்டுமல்ல, -path பயன்படுத்துங்கள் — அது முழு பாதையையும் வடிவத்துடன் ஒப்பிடும்:

# src கோப்பகங்களுக்குள் மட்டும் .js கோப்புகள்
find . -path '*/src/*' -name '*.js'

சிக்கலான வடிவங்களுக்கு -regex உள்ளது (regular expression முழு பாதையிலும் பொருந்தும்), பெரிய/சிறிய எழுத்தைப் பொருட்படுத்தாத -iregex உடன்:

find . -regextype posix-extended -regex '.*\.(jpg|jpeg|png)$'

ஒரு கோப்பகத்தை விலக்குவது

உதாரணமாக node_modules அல்லது .git-க்குள் find நுழையாமல் இருக்க -prune பயன்படுத்தப்படுகிறது:

find . -path ./node_modules -prune -o -name '*.js' -print

இப்படி வாசிக்கலாம்: «பாதை ./node_modules ஆக இருந்தால், அதற்குள் இறங்காதே, இல்லையென்றால் (-o) *.js கோப்புகளை வெளியிடு». இறுதியில் வெளிப்படையான -print கட்டாயம், இல்லையெனில் விலக்கப்பட்ட கோப்பகமும் வெளியீட்டில் வந்துவிடும். இன்னும் எளிய ஆனால் மெதுவான வழி — -not -path '*/node_modules/*': find கோப்பகத்தை இன்னமும் சுற்றிப் பார்க்கும், முடிவை மட்டும் வடிகட்டும்.

வகையின்படி தேடுதல்: -type

மதிப்புஎதைத் தேடும்
-type fசாதாரண கோப்புகள்
-type dகோப்பகங்கள்
-type lகுறியீட்டு இணைப்புகள் (symbolic links)
-type ssockets
-type pபெயரிட்ட குழாய்கள் (FIFO)
# logs என்ற பெயருடைய கோப்பகங்கள் மட்டும்
find / -type d -name 'logs' 2>/dev/null

# காலி கோப்புகள் மற்றும் காலி கோப்பகங்கள்
find . -type f -empty
find . -type d -empty

# உடைந்த symbolic links
find . -xtype l

அளவின்படி தேடுதல்: -size

-size பின்னொட்டுடன் கூடிய எண்ணை ஏற்கிறது: c — பைட்டுகள், k — கிலோபைட்டுகள், M — மெகாபைட்டுகள், G — ஜிகாபைட்டுகள். + என்றால் «பெரியது», - என்றால் «சிறியது», குறி இல்லையெனில் «சரியாக».

# முழு அமைப்பிலும் 100 MB-ஐ விடப் பெரிய கோப்புகள்
find / -type f -size +100M 2>/dev/null

# 10 முதல் 50 MB வரை
find . -type f -size +10M -size -50M

# 1 KB-ஐ விடச் சிறியது
find . -type f -size -1k

ஒரு நுணுக்கம் உள்ளது: அளவு அலகுக்கு மேல் நோக்கி வட்டமிடப்படுகிறது. எனவே -size -1M காலி கோப்புகளை மட்டுமே கண்டறியும் — காலியல்லாத எந்தக் கோப்பும் வட்டமிட்ட பிறகு «குறைந்தது 1 மெகாபைட்» ஆகிவிடும். துல்லியமான எல்லைக்கு சிறிய அலகுகளைப் பயன்படுத்துங்கள்: -size -1024k.

வட்டு இடத்தை எது பிடித்திருக்கிறது

find-ஐ ls மற்றும் sort-உடன் இணைத்தால் மிகப் பெரிய கோப்புகள் தெரியும்:

find /var -type f -size +50M -exec ls -lh {} + 2>/dev/null | sort -k5 -rh | head
-rw-r----- 1 syslog adm  1.2G Oct 14 09:12 /var/log/syslog.1
-rw-r--r-- 1 root   root 412M Oct 10 03:00 /var/backups/db.sql.gz
-rw-r----- 1 root   adm   96M Oct 14 09:15 /var/log/nginx/access.log

முழு கோப்பகங்களை மதிப்பிட du -sh வசதியானது, ஆழத்தில் எங்கோ ஒரே ஒரு பெரிய கோப்பு இடத்தை விழுங்கும்போது find சிறந்தது.

தேதியின்படி தேடுதல்: -mtime, -mmin, -newer

ஒவ்வொரு கோப்புக்கும் மூன்று நேர முத்திரைகள் உள்ளன, find ஒவ்வொன்றின்படியும் வடிகட்டும்:

நிபந்தனைமுத்திரைஅலகு
-mtime / -mminஉள்ளடக்க மாற்றம்நாட்கள் / நிமிடங்கள்
-atime / -aminகடைசியாகப் படித்ததுநாட்கள் / நிமிடங்கள்
-ctime / -cminமெட்டாடேட்டா மாற்றம் (அனுமதிகள், உரிமையாளர், பெயர்)நாட்கள் / நிமிடங்கள்

குறிகள் அளவைப் போலவே செயல்படும்: -mtime -7 — 7 நாட்களுக்குக் குறைவாக முன்பு மாற்றப்பட்டது, -mtime +30 — 30 நாட்களுக்கு மேல் முன்பு.

# கடந்த வாரத்தில் மாற்றப்பட்டவை
find ~/projects -type f -mtime -7

# 30 நாட்களுக்கு மேல் பழைய logs
find /var/log -type f -name '*.log' -mtime +30

# கடந்த 15 நிமிடங்களில் மாற்றப்பட்டவை
find /etc -type f -mmin -15

நாட்கள் 24 மணி நேரக் முழு காலங்களாகக் கணக்கிடப்படுகின்றன, பகுதி எண் நீக்கப்படும். அதனால் -mtime +1 24 மணி நேரம் அல்ல, 48 மணி நேரத்திற்கு மேல் பழைய கோப்புகளைக் கண்டறியும் — இது அடிக்கடி வரும் பொறி. துல்லியம் தேவைப்பட்டால் நிமிடங்களுக்கு மாறுங்கள்: -mmin +1440.

வேறொரு கோப்பு அல்லது தேதியை விடப் புதியவை

# deploy.lock மாற்றப்பட்ட பின் மாற்றப்பட்டவை
find . -type f -newer deploy.lock

# குறிப்பிட்ட தேதிக்குப் பின் மாற்றப்பட்டவை (GNU find)
find . -type f -newermt '2026-10-01'

# தேதி இடைவெளியில்
find . -type f -newermt '2026-10-01' ! -newermt '2026-10-08'

உரிமையாளர் மற்றும் அனுமதிகளின்படி தேடுதல்

# alice பயனரின் கோப்புகள்
find /home -user alice

# உரிமையாளர் இல்லாத கோப்புகள் (பயனர் நீக்கப்பட்ட பின்)
find / -nouser 2>/dev/null

# அனுமதிகள் சரியாக 777 உள்ள கோப்புகள்
find /var/www -type f -perm 777

# அனைவருக்கும் எழுத அனுமதி உள்ள கோப்புகள்
find /var/www -perm -o=w

# SUID பிட் உள்ள கோப்புகள் — பாதுகாப்பு தணிக்கைக்கு பயனுள்ளது
find / -perm -4000 -type f 2>/dev/null

-perm-க்கு மூன்று வடிவங்கள் உள்ளன: குறி இல்லாமல் — அனுமதிகள் சரியாகப் பொருந்த வேண்டும், - உடன் — குறிப்பிட்ட அனைத்து பிட்களும் குறைந்தபட்சம் அமைக்கப்பட்டிருக்க வேண்டும், / உடன் — அவற்றில் குறைந்தது ஒன்றாவது அமைக்கப்பட்டிருக்க வேண்டும்.

நிபந்தனைகளின் தர்க்கம்: AND, OR, NOT

நிபந்தனைகள் இயல்பாக «மற்றும்» (AND) மூலம் இணைக்கப்படுகின்றன. «அல்லது» (OR)-க்கு -o, மறுப்புக்கு ! அல்லது -not. தொகுத்தல் அடைப்புகளால் செய்யப்படும், அவற்றை shell-இலிருந்து escape செய்ய வேண்டும்:

# jpg அல்லது png படங்கள்
find . -type f \( -name '*.jpg' -o -name '*.png' \)

# .tmp கோப்புகளைத் தவிர அனைத்தும்
find . -type f ! -name '*.tmp'

அடைப்புகள் இல்லாவிட்டால் -type f «அல்லது» ஜோடியின் முதல் நிபந்தனையுடன் மட்டுமே பொருந்தும், அதனால் *.png பெயருடைய கோப்பகங்களும் முடிவில் சேரும். \( மற்றும் \)-ஐச் சுற்றி இடைவெளிகள் கட்டாயம்.

தேடல் ஆழம்: -maxdepth மற்றும் -mindepth

# தற்போதைய கோப்பகத்தில் மட்டும், உள் கோப்பகங்கள் இல்லாமல்
find . -maxdepth 1 -type f -name '*.sh'

# இரண்டாம் நிலை உள்ளமைவிலிருந்து தொடங்கி
find . -mindepth 2 -name '*.md'

# வேறு கோப்பு முறைமைகளுக்குச் செல்லாமல்
find / -xdev -type f -size +1G

-maxdepth-ஐ பாதைக்குப் பின்னும், மற்ற நிபந்தனைகளுக்கு முன்பும் வையுங்கள் — இல்லையெனில் GNU find எச்சரிக்கை தரும். /-இல் தேடும்போது -xdev பயனுள்ளது: find /proc, பிணைய மற்றும் இணைக்கப்பட்ட வட்டுகளுக்குள் நுழையாது.

கண்டறிந்தவற்றின் மீது செயல்கள்: -exec, -delete, xargs

-exec: ஒவ்வொரு கோப்புக்கும் கட்டளையை இயக்குதல்

{}-க்குப் பதிலாக find கோப்பின் பாதையைப் பொருத்தும். கட்டளை \; அல்லது + உடன் முடியும்:

# ஒவ்வொரு கோப்புக்கும் தனி இயக்கம்
find . -name '*.sh' -exec chmod +x {} \;

# எல்லா கோப்புகளும் ஒரே பட்டியலாக — வேகமானது
find . -name '*.log' -exec gzip {} +

# ஒவ்வொரு கோப்புக்கும் உறுதிப்படுத்தலுடன்
find . -name '*.bak' -ok rm {} \;

+ வகை பாதைகளை தொகுதிகளாக சேர்த்து கட்டளையை மிகக் குறைவாக இயக்கும், அதனால் ஆயிரக்கணக்கான கோப்புகளில் பல மடங்கு வேகமானது. \; வகை, கட்டளை ஒரே ஒரு கோப்பை ஏற்கும்போது அல்லது {} இறுதியில் இல்லாதபோது தேவை.

-delete: கண்டறிந்ததை நீக்குதல்

# முதலில் எது நீக்கப்படும் என்று பாருங்கள்
find /tmp/build -type f -name '*.o' -mtime +7

# பின்னர் நீக்குங்கள்
find /tmp/build -type f -name '*.o' -mtime +7 -delete

எப்போதும் -delete இல்லாமல் இயக்கி பட்டியலைச் சரிபாருங்கள். -delete-ஐ கடைசியாக வையுங்கள்: find வெளிப்பாட்டை இடமிருந்து வலமாக இயக்கும், அதனால் find . -delete -name '*.o' பெயரைச் சரிபார்ப்பதற்கு முன்பே கோப்பகத்திலுள்ள அனைத்தையும் நீக்கிவிடும்.

find மற்றும் xargs

உன்னதமான இணைப்பு — xargs மூலம் கோப்புகளின் பட்டியலை வேறொரு நிரலுக்கு அனுப்புவது. இடைவெளி உள்ள பெயர்களில் உடையாமல் இருக்க பூஜ்ய பைட் பிரிப்பானைப் பயன்படுத்துங்கள்:

find . -type f -name '*.txt' -print0 | xargs -0 wc -l

xargs-இன் -P கொடி செயலாக்கத்தை இணையாக இயக்கும்:

find ./images -name '*.png' -print0 | xargs -0 -P 4 -n 10 optipng

find மற்றும் grep: கோப்புகளுக்குள் உரை தேடுதல்

find கோப்புகளைத் தேடுகிறது, அவற்றின் உள்ளடக்கத்தை அல்ல. தேர்ந்தெடுத்த கோப்புகளுக்குள் ஒரு வரியைத் தேட, அவற்றை grep-க்கு அனுப்புங்கள்:

# எந்த config-களில் listen 8080 உள்ளது
find /etc/nginx -type f -name '*.conf' -exec grep -Hn 'listen 8080' {} +
/etc/nginx/sites-enabled/app.conf:4:    listen 8080;

-H கோப்புப் பெயரை அச்சிடும், -n வரி எண்ணை, grep -l பொருந்திய கோப்புப் பெயர்களை மட்டும் வெளியிடும். நீட்டிப்பின்படி மட்டும் வடிகட்ட வேண்டுமெனில் grep போதும்: grep -rn --include='*.conf' 'listen 8080' /etc/nginx.

தனிப்பயன் வெளியீட்டு வடிவம்: -printf

GNU find பாதையை மட்டுமல்ல, வேறு தகவல்களையும் அச்சிடும். எடுத்துக்காட்டாக அளவு, தேதி மற்றும் பெயர்:

find . -maxdepth 1 -type f -printf '%s\t%TY-%Tm-%Td\t%p\n' | sort -n

இங்கு %s — பைட்டுகளில் அளவு, %T... — மாற்றப்பட்ட தேதியின் பகுதிகள், %p — பாதை. scripts-க்கு இது வசதியானது: ls வெளியீட்டைப் பிரிக்கத் தேவையில்லை.

அன்றாடப் பயன்பாட்டுக்கான find linux examples சுருக்கம்

பணிகட்டளை
பெயரின்படி கோப்பைக் கண்டறிதல்find / -name 'file.txt' 2>/dev/null
பெரிய/சிறிய எழுத்தைப் பொருட்படுத்தாமல்find . -iname '*.jpg'
கோப்பகங்கள் மட்டும்find . -type d -name 'cache'
1 GB-ஐ விடப் பெரிய கோப்புகள்find / -xdev -type f -size +1G
ஒரு நாளில் மாற்றப்பட்டவைfind . -type f -mtime -1
ஒரு மணி நேரத்தில் மாற்றப்பட்டவைfind . -type f -mmin -60
30 நாட்களுக்கு மேல் பழைய logs-ஐ நீக்குதல்find /var/log/app -name '*.log' -mtime +30 -delete
காலி கோப்பகங்கள்find . -type d -empty
எல்லா கோப்பகங்களின் அனுமதிகளை மாற்றுதல்find . -type d -exec chmod 755 {} +
கோப்புகளுக்குள் ஒரு சரம்find . -name '*.py' -exec grep -l 'TODO' {} +
கோப்புகளை எண்ணுதல்find . -type f | wc -l

பொதுவான தவறுகள்

  • மேற்கோள் இல்லாத வடிவம். find . -name *.log தற்போதைய கோப்பகத்தில் ஒரு .log கோப்பு இருந்தாலும் உடையும். '*.log' என எழுதுங்கள்.
  • Permission denied வெள்ளம். 2>/dev/null சேர்க்கவும், அல்லது முழு வட்டும் உண்மையில் தேவைப்பட்டால் sudo-வுடன் இயக்கவும்.
  • -delete தவறான இடத்தில். அது எப்போதும் கடைசியாக வர வேண்டும், அதற்கு முன் நீக்காமல் சோதனை ஓட்டம் செய்யுங்கள்.
  • குழாயில் இடைவெளி உள்ள பெயர்கள். find ... | xargs rm «My File.txt»-ஐ இரண்டு வாதங்களாகப் பிரிக்கும். -print0 மற்றும் xargs -0 அல்லது -exec பயன்படுத்துங்கள்.
  • -mtime-இடம் துல்லியமான நாட்களை எதிர்பார்ப்பது. துல்லியமான இடைவெளிகளுக்கு -mmin அல்லது -newermt எடுங்கள்.

சுருக்கம்

find என்பது கோப்பு முறைமையில் தேடுவதற்கான பல்நோக்குக் கருவி: பாதை, பெயர், வகை, அளவு, தேதி மற்றும் அனுமதிகள் பற்றிய நிபந்தனைகள், பின்னர் ஒரு செயல். ஐந்து தூண்களைக் கற்றுக்கொள்ளுங்கள் — -name, -type, -size, -mtime மற்றும் -exec ... + — பெரும்பாலான பணிகள் ஒரே வரியில் தீரும். இந்த find linux examples-ஐ உங்கள் டெர்மினலில் திரும்பச் செய்து பாருங்கள்; find-ஐ grep, sed மற்றும் awk உடன் இணைப்பதை Linux பாடத்திட்டத்தின் டெர்மினலில் உரை செயலாக்கம் பற்றிய பாடத்தில் நடைமுறையில் விளக்குகிறோம்.

அடிக்கடி கேட்கப்படும் கேள்விகள்

find, locate இலிருந்து எப்படி வேறுபடுகிறது?

locate முன்பே உருவாக்கப்பட்ட பெயர்களின் தரவுத்தளத்தில் தேடுகிறது, அதனால் உடனடியாக வேலை செய்யும், ஆனால் updatedb கடைசியாக இயங்கிய பின் உருவாக்கப்பட்ட கோப்புகளைப் பார்க்காது. find வட்டை நேரடியாகச் சுற்றிப் பார்க்கிறது, அளவு, தேதி மற்றும் அனுமதிகளின்படி வடிகட்டவும் முடியும்.

பெயரின்படி அல்ல, உள்ளடக்கத்தின்படி கோப்பை எப்படித் தேடுவது?

find உள்ளடக்கத்தைப் படிப்பதில்லை. grep -rn 'உரை' /பாதை பயன்படுத்துங்கள், அல்லது find . -name '*.conf' -exec grep -l 'உரை' {} + இணைப்பைப் பயன்படுத்துங்கள்.

வட்டின் மூலத்தில் find ஏன் மெதுவாக வேலை செய்கிறது?

அது /proc, /sys மற்றும் இணைக்கப்பட்ட வட்டுகள் உட்பட எல்லா கோப்பகங்களையும் சுற்றுகிறது. தேடலைக் குறிப்பிட்ட கோப்பகத்திற்கு வரம்பிடுங்கள், -xdev மற்றும் -maxdepth சேருங்கள், அல்லது -prune மூலம் தேவையற்றதை விலக்குங்கள்.

find முடிவுகளை தேதியின்படி வரிசைப்படுத்த முடியுமா?

ஆம்: find . -type f -printf '%T@ %p\n' | sort -n பழையவற்றிலிருந்து புதியவை வரை கோப்புகளை வெளியிடும், இங்கு %T@ என்பது Unix epoch-இலிருந்து வினாடிகளில் மாற்றப்பட்ட நேரம்.

காலி கோப்பகங்களை எப்படிக் கண்டறிந்து நீக்குவது?

find . -type d -empty -delete கட்டளை காலியான எல்லா கோப்பகங்களையும் நீக்கும், உள் கோப்புகள் நீக்கப்பட்டதால் காலியானவையும் சேர்த்து. முதலில் -delete இல்லாமல் இயக்கி பட்டியலைச் சரிபாருங்கள்.

இந்தத் தலைப்பை வீடியோவில் கற்றுக்கொள்ளுங்கள்

“Linux: с нуля до уверенного администрирования” பாடநெறியில் இந்தத் தலைப்பு பயிற்சியுடன் விரிவாக விளக்கப்பட்டுள்ளது.

பாடநெறிக்குச் செல்