From 09ef63fdc9369d8d1588a158cc730ee5cb4fe4cc Mon Sep 17 00:00:00 2001 From: jay Date: Sun, 25 Nov 2007 11:36:10 +0000 Subject: [PATCH] Fix setgid/setuid typo --- .cvsignore | 21 + .gitignore | 23 + ABOUT-NLS | 996 +++ AUTHORS | 35 + COPYING | 676 ++ ChangeLog | 7174 ++++++++++++++++++++ INSTALL | 236 + Makefile.am | 66 + NEWS | 1317 ++++ README | 66 + README-CVS | 48 + README-alpha | 25 + THANKS | 56 + TODO | 53 + build-aux/.cvsignore | 14 + build-aux/.gitignore | 13 + build-aux/Makefile.am | 2 + build-aux/check-testfiles.sh | 62 + build-aux/man-lint.sh | 19 + build-aux/src-sniff.py | 234 + configure.ac | 260 + debian.rules | 142 + debian/.cvsignore | 2 + debian/.gitignore | 2 + debian/README.debian | 21 + debian/TODO | 0 debian/changelog | 341 + debian/conffiles | 2 + debian/control | 15 + debian/copyright | 36 + debian/cron.find | 12 + debian/doc-base | 10 + debian/postinst | 24 + debian/preinst | 30 + debian/prerm | 14 + debian/rules | 106 + debian/substvars | 1 + debian/updatedb.conf | 11 + doc/.cvsignore | 29 + doc/.gitignore | 27 + doc/Makefile.am | 71 + doc/find-maint.texi | 1166 ++++ doc/find.texi | 5187 ++++++++++++++ doc/perm.texi | 592 ++ find/.cvsignore | 5 + find/.gitignore | 7 + find/Makefile.am | 38 + find/defs.h | 655 ++ find/find.1 | 1693 +++++ find/find.c | 1510 ++++ find/finddata.c | 38 + find/fstype.c | 313 + find/ftsfind.c | 751 ++ find/parser.c | 3455 ++++++++++ find/pred.c | 2382 +++++++ find/testsuite/.cvsignore | 6 + find/testsuite/.gitignore | 6 + find/testsuite/Makefile.am | 229 + find/testsuite/config/unix.exp | 291 + find/testsuite/excuses.txt | 47 + find/testsuite/find.gnu/access.exp | 15 + find/testsuite/find.gnu/access.xo | 11 + find/testsuite/find.gnu/comma.exp | 1 + find/testsuite/find.gnu/comma.xo | 1 + find/testsuite/find.gnu/delete.exp | 7 + find/testsuite/find.gnu/delete.xo | 4 + find/testsuite/find.gnu/deletedir.exp | 9 + find/testsuite/find.gnu/deletedir.xo | 1 + find/testsuite/find.gnu/deletefile.exp | 9 + find/testsuite/find.gnu/deletefile.xo | 1 + find/testsuite/find.gnu/depth-d.exp | 8 + find/testsuite/find.gnu/depth-d.xo | 1 + find/testsuite/find.gnu/depth.exp | 8 + find/testsuite/find.gnu/depth.xo | 1 + find/testsuite/find.gnu/empty.exp | 7 + find/testsuite/find.gnu/empty.xo | 1 + find/testsuite/find.gnu/exec-many-rtn-failure.exp | 4 + find/testsuite/find.gnu/exec-many-rtn-failure.xo | 1 + find/testsuite/find.gnu/exec-many-rtn-success.exp | 4 + find/testsuite/find.gnu/exec-many-rtn-success.xo | 1 + find/testsuite/find.gnu/exec-one-rtn-fail.exp | 5 + find/testsuite/find.gnu/exec-one-rtn-fail.xo | 1 + find/testsuite/find.gnu/exec-one-rtn-success.exp | 3 + find/testsuite/find.gnu/exec-one-rtn-success.xo | 1 + find/testsuite/find.gnu/execdir-hier.exp | 8 + find/testsuite/find.gnu/execdir-hier.xo | 2 + find/testsuite/find.gnu/execdir-in-unreadable.exp | 11 + find/testsuite/find.gnu/execdir-one.exp | 7 + find/testsuite/find.gnu/execdir-one.xo | 1 + find/testsuite/find.gnu/execdir-pwd.exp | 20 + find/testsuite/find.gnu/execdir-root-only.exp | 21 + find/testsuite/find.gnu/execdir-root-only.xo | 1 + find/testsuite/find.gnu/false.exp | 5 + find/testsuite/find.gnu/false.xo | 3 + .../find.gnu/follow-arg-parent-symlink.exp | 6 + .../find.gnu/follow-arg-parent-symlink.xo | 1 + find/testsuite/find.gnu/follow-basic.exp | 10 + find/testsuite/find.gnu/follow-basic.xo | 5 + find/testsuite/find.gnu/fprint-unwritable.exp | 9 + find/testsuite/find.gnu/fprint0_stdout.exp | 5 + find/testsuite/find.gnu/fprint0_stdout.xo | Bin 0 -> 5 bytes find/testsuite/find.gnu/gnu-or.exp | 5 + find/testsuite/find.gnu/gnu-or.xo | 6 + find/testsuite/find.gnu/gnuand.exp | 5 + find/testsuite/find.gnu/gnuand.xo | 1 + find/testsuite/find.gnu/gnunot.exp | 5 + find/testsuite/find.gnu/gnunot.xo | 2 + find/testsuite/find.gnu/ilname.exp | 7 + find/testsuite/find.gnu/ilname.xo | 1 + find/testsuite/find.gnu/iname.exp | 5 + find/testsuite/find.gnu/iname.xo | 1 + find/testsuite/find.gnu/inum.exp | 7 + find/testsuite/find.gnu/inum.xo | 1 + find/testsuite/find.gnu/ipath.exp | 5 + find/testsuite/find.gnu/ipath.xo | 1 + find/testsuite/find.gnu/iregex1.exp | 5 + find/testsuite/find.gnu/iregex1.xo | 4 + find/testsuite/find.gnu/iwholename.exp | 5 + find/testsuite/find.gnu/iwholename.xo | 1 + find/testsuite/find.gnu/lname.exp | 7 + find/testsuite/find.gnu/lname.xo | 1 + find/testsuite/find.gnu/mindepth-arg.exp | 9 + find/testsuite/find.gnu/mindepth-arg.xo | 1 + find/testsuite/find.gnu/mindepth-badarg.exp | 12 + find/testsuite/find.gnu/name-opt.exp | 8 + find/testsuite/find.gnu/name-opt.xo | 0 find/testsuite/find.gnu/name-period.exp | 10 + find/testsuite/find.gnu/name-period.xo | 2 + find/testsuite/find.gnu/name-slash.exp | 2 + find/testsuite/find.gnu/name-slash.xo | 2 + find/testsuite/find.gnu/path.exp | 5 + find/testsuite/find.gnu/path.xo | 1 + find/testsuite/find.gnu/perm-slash.exp | 19 + find/testsuite/find.gnu/perm-slash.xo | 4 + find/testsuite/find.gnu/perm.exp | 7 + find/testsuite/find.gnu/perm.xo | 1 + find/testsuite/find.gnu/perm000.exp | 7 + find/testsuite/find.gnu/perm000.xo | 3 + find/testsuite/find.gnu/posix-dflt.exp | 10 + find/testsuite/find.gnu/posix-dflt.xo | 5 + find/testsuite/find.gnu/posix-h.exp | 13 + find/testsuite/find.gnu/posix-h.xo | 5 + find/testsuite/find.gnu/posix-l.exp | 10 + find/testsuite/find.gnu/posix-l.xo | 5 + find/testsuite/find.gnu/posix-perminvalid.exp | 17 + find/testsuite/find.gnu/print0.exp | 5 + find/testsuite/find.gnu/print0.xo | Bin 0 -> 4 bytes find/testsuite/find.gnu/print_stdout.exp | 5 + find/testsuite/find.gnu/print_stdout.xo | 1 + find/testsuite/find.gnu/printf-h.exp | 5 + find/testsuite/find.gnu/printf-h.xo | 1 + find/testsuite/find.gnu/printf-slash.exp | 1 + find/testsuite/find.gnu/printf-slash.xo | 2 + find/testsuite/find.gnu/printf-symlink.exp | 6 + find/testsuite/find.gnu/printf-symlink.xo | 2 + find/testsuite/find.gnu/printf.exp | 6 + find/testsuite/find.gnu/printf.xo | 11 + find/testsuite/find.gnu/printfHdfl.exp | 2 + find/testsuite/find.gnu/printfHdfl.xo | 1 + find/testsuite/find.gnu/prune-default-print.exp | 5 + find/testsuite/find.gnu/prune-default-print.xo | 1 + find/testsuite/find.gnu/quit.exp | 5 + find/testsuite/find.gnu/quit.xo | 2 + find/testsuite/find.gnu/regex1.exp | 5 + find/testsuite/find.gnu/regex1.xo | 4 + find/testsuite/find.gnu/regex2.exp | 5 + find/testsuite/find.gnu/regex2.xo | 4 + find/testsuite/find.gnu/samefile-copy.exp | 8 + find/testsuite/find.gnu/samefile-copy.xo | 0 find/testsuite/find.gnu/samefile-link.exp | 9 + find/testsuite/find.gnu/samefile-link.xo | 1 + find/testsuite/find.gnu/samefile-missing.exp | 4 + find/testsuite/find.gnu/samefile-p-brokenlink.exp | 13 + find/testsuite/find.gnu/samefile-p-brokenlink.xo | 2 + find/testsuite/find.gnu/samefile-same.exp | 6 + find/testsuite/find.gnu/samefile-same.xo | 2 + find/testsuite/find.gnu/samefile-symlink.exp | 10 + find/testsuite/find.gnu/samefile-symlink.xo | 2 + find/testsuite/find.gnu/sv-bug-12230.exp | 14 + find/testsuite/find.gnu/sv-bug-17477.exp | 2 + find/testsuite/find.gnu/sv-bug-17490.exp | 5 + find/testsuite/find.gnu/sv-bug-17782.exp | 15 + find/testsuite/find.gnu/sv-bug-17782.xo | 1 + find/testsuite/find.gnu/sv-bug-18222.exp | 9 + find/testsuite/find.gnu/sv-bug-18222.xo | 2 + find/testsuite/find.gnu/true.exp | 5 + find/testsuite/find.gnu/true.xo | 6 + find/testsuite/find.gnu/used-invarg.exp | 2 + find/testsuite/find.gnu/used-missing.exp | 2 + find/testsuite/find.gnu/user-invalid.exp | 4 + find/testsuite/find.gnu/wholename.exp | 5 + find/testsuite/find.gnu/wholename.xo | 1 + find/testsuite/find.gnu/xtype-symlink.exp | 7 + find/testsuite/find.gnu/xtype-symlink.xo | 1 + find/testsuite/find.gnu/xtype.exp | 8 + find/testsuite/find.gnu/xtype.xo | 5 + find/testsuite/find.posix/and.exp | 5 + find/testsuite/find.posix/and.xo | 1 + find/testsuite/find.posix/bracket-depth.exp | 5 + find/testsuite/find.posix/depth1.exp | 7 + find/testsuite/find.posix/depth1.xo | 11 + find/testsuite/find.posix/empty-parens.exp | 3 + find/testsuite/find.posix/exec-one.exp | 5 + find/testsuite/find.posix/exec-one.xo | 1 + .../find.posix/files-not-expressions1.exp | 9 + .../testsuite/find.posix/files-not-expressions1.xo | 1 + .../find.posix/files-not-expressions2.exp | 9 + .../testsuite/find.posix/files-not-expressions2.xo | 1 + .../find.posix/files-not-expressions3.exp | 9 + .../testsuite/find.posix/files-not-expressions3.xo | 1 + find/testsuite/find.posix/group-empty.exp | 3 + find/testsuite/find.posix/group-missing.exp | 5 + find/testsuite/find.posix/grouping.exp | 5 + find/testsuite/find.posix/grouping.xo | 1 + find/testsuite/find.posix/links.exp | 25 + find/testsuite/find.posix/links.xo | 3 + find/testsuite/find.posix/name-missing.exp | 5 + find/testsuite/find.posix/name.exp | 5 + find/testsuite/find.posix/name.xo | 1 + find/testsuite/find.posix/perm-X.exp | 12 + find/testsuite/find.posix/perm-X.xo | 3 + find/testsuite/find.posix/perm-vanilla.exp | 18 + find/testsuite/find.posix/perm-vanilla.xo | 4 + find/testsuite/find.posix/posixnot.exp | 5 + find/testsuite/find.posix/posixnot.xo | 2 + find/testsuite/find.posix/prune.exp | 5 + find/testsuite/find.posix/prune.xo | 3 + find/testsuite/find.posix/size-invalid.exp | 7 + find/testsuite/find.posix/size-missing.exp | 5 + find/testsuite/find.posix/sizes.exp | 15 + find/testsuite/find.posix/sizes.xo | 10 + find/testsuite/find.posix/sizetype.exp | 6 + find/testsuite/find.posix/sizetype.xo | 1 + find/testsuite/find.posix/sv-bug-11175.exp | 10 + find/testsuite/find.posix/sv-bug-11175.xo | 1 + find/testsuite/find.posix/sv-bug-12181.exp | 6 + find/testsuite/find.posix/sv-bug-12181.xo | 1 + find/testsuite/find.posix/sv-bug-15235.exp | 6 + find/testsuite/find.posix/sv-bug-15235.xo | 8 + find/testsuite/find.posix/sv-bug-19605.exp | 7 + find/testsuite/find.posix/sv-bug-19613.exp | 14 + find/testsuite/find.posix/sv-bug-19613.xo | 1 + find/testsuite/find.posix/sv-bug-19617.exp | 7 + find/testsuite/find.posix/typearg.exp | 4 + find/testsuite/find.posix/typesize.exp | 6 + find/testsuite/find.posix/typesize.xo | 1 + find/testsuite/find.posix/user-empty.exp | 3 + find/testsuite/find.posix/user-missing.exp | 3 + find/tree.c | 1654 +++++ find/util.c | 1035 +++ import-gnulib.config | 92 + import-gnulib.sh | 311 + lib/.cvsignore | 5 + lib/.gitignore | 5 + lib/Makefile.am | 44 + lib/buildcmd.c | 553 ++ lib/buildcmd.h | 134 + lib/dircallback.c | 97 + lib/dircallback.h | 24 + lib/extendbuf.c | 103 + lib/extendbuf.h | 25 + lib/findutils-version.c | 65 + lib/findutils-version.h | 28 + lib/forcefindlib.c | 47 + lib/gnulib-version.h | 19 + lib/listfile.c | 433 ++ lib/listfile.h | 28 + lib/modetype.h | 142 + lib/nextelem.c | 107 + lib/nextelem.h | 26 + lib/printquoted.c | 87 + lib/printquoted.h | 34 + lib/qmark.c | 237 + lib/regexprops.c | 492 ++ lib/regextype.c | 156 + lib/regextype.h | 27 + lib/savedirinfo.c | 384 ++ lib/savedirinfo.h | 72 + lib/strspn.c | 41 + lib/wait.h | 40 + lib/waitpid.c | 78 + locate/.cvsignore | 10 + locate/.gitignore | 11 + locate/Makefile.am | 58 + locate/bigram.c | 114 + locate/code.c | 287 + locate/frcode.c | 363 + locate/locate.1 | 259 + locate/locate.c | 1936 ++++++ locate/locatedb.5 | 153 + locate/locatedb.h | 80 + locate/testsuite/.cvsignore | 5 + locate/testsuite/.gitignore | 5 + locate/testsuite/Makefile.am | 50 + locate/testsuite/config/unix.exp | 341 + locate/testsuite/locate.gnu/bigendian.exp | 2 + locate/testsuite/locate.gnu/bigendian.xo | 8 + locate/testsuite/locate.gnu/bigprefix1.exp | 12 + locate/testsuite/locate.gnu/exceedshort.exp | 4 + locate/testsuite/locate.gnu/exists1.exp | 8 + locate/testsuite/locate.gnu/exists1.xo | 1 + locate/testsuite/locate.gnu/exists2.exp | 9 + locate/testsuite/locate.gnu/exists2.xo | 1 + locate/testsuite/locate.gnu/exists3.exp | 9 + locate/testsuite/locate.gnu/exists3.xo | 1 + locate/testsuite/locate.gnu/ignore_case1.exp | 8 + locate/testsuite/locate.gnu/ignore_case1.xo | 1 + locate/testsuite/locate.gnu/ignore_case2.exp | 8 + locate/testsuite/locate.gnu/ignore_case2.xo | 0 locate/testsuite/locate.gnu/ignore_case3.exp | 11 + locate/testsuite/locate.gnu/ignore_case3.xo | 1 + locate/testsuite/locate.gnu/littleendian.exp | 2 + locate/testsuite/locate.gnu/littleendian.xo | 8 + .../testsuite/locate.gnu/locateddb.old.powerpc.xi | Bin 0 -> 329 bytes locate/testsuite/locate.gnu/locateddb.old.x86.xi | Bin 0 -> 329 bytes locate/testsuite/locate.gnu/notexists1.exp | 10 + locate/testsuite/locate.gnu/notexists1.xo | 0 locate/testsuite/locate.gnu/notexists2.exp | 9 + locate/testsuite/locate.gnu/notexists2.xo | 1 + locate/testsuite/locate.gnu/notexists3.exp | 9 + locate/testsuite/locate.gnu/notexists3.xo | 1 + locate/testsuite/locate.gnu/old_prefix.exp | 13 + locate/testsuite/locate.gnu/old_prefix.xo | 5 + locate/testsuite/locate.gnu/regex1.exp | 9 + locate/testsuite/locate.gnu/space1st.exp | 2 + locate/testsuite/locate.gnu/sv-bug-14535.exp | 61 + locate/updatedb.1 | 144 + locate/updatedb.sh | 372 + locate/word_io.c | 176 + m4/.cvsignore | 2 + m4/.gitignore | 2 + m4/Makefile.am | 3 + m4/findlib.m4 | 69 + m4/mkinstalldirs.m4 | 40 + m4/noreturn.m4 | 33 + m4/nullsort.m4 | 45 + m4/order-bad.bin | Bin 0 -> 8 bytes m4/order-good.bin | Bin 0 -> 8 bytes m4/withfts.m4 | 13 + po/.cvsignore | 7 + po/.gitignore | 6 + po/Makefile.in.in | 384 ++ po/Makevars | 41 + po/Makevars.template | 41 + po/POTFILES.in | 40 + po/Rules-quot | 47 + po/be.po | 1292 ++++ po/bg.po | 1386 ++++ po/boldquot.sed | 10 + po/ca.po | 1418 ++++ po/da.po | 1383 ++++ po/de.po | 1310 ++++ po/el.po | 1337 ++++ po/en@boldquot.header | 25 + po/en@quot.header | 22 + po/eo.po | 1312 ++++ po/es.po | 1657 +++++ po/et.po | 1318 ++++ po/fetch-po-files | 177 + po/fi.po | 1311 ++++ po/findutils.pot | 1170 ++++ po/fr.po | 1424 ++++ po/ga.po | 1420 ++++ po/gl.po | 1313 ++++ po/hr.po | 1310 ++++ po/hu.po | 1363 ++++ po/id.po | 1306 ++++ po/insert-header.sin | 23 + po/it.po | 1345 ++++ po/ja.po | 1307 ++++ po/ko.po | 1290 ++++ po/lg.po | 1330 ++++ po/ms.po | 1209 ++++ po/nl.po | 1353 ++++ po/pl.po | 1350 ++++ po/pt.po | 1336 ++++ po/pt_BR.po | 1315 ++++ po/quot.sed | 6 + po/remove-potcdate.sin | 19 + po/ro.po | 1375 ++++ po/ru.po | 1309 ++++ po/rw.po | 1337 ++++ po/sk.po | 1321 ++++ po/sl.po | 1394 ++++ po/sr.po | 1338 ++++ po/sv.po | 1463 ++++ po/tr.po | 1349 ++++ po/uk.po | 1351 ++++ po/vi.po | 1429 ++++ po/zh_CN.po | 1299 ++++ po/zh_TW.po | 1283 ++++ stamp-h.in | 1 + xargs/.cvsignore | 4 + xargs/.gitignore | 6 + xargs/Makefile.am | 15 + xargs/testsuite/.cvsignore | 5 + xargs/testsuite/.gitignore | 5 + xargs/testsuite/Makefile.am | 261 + xargs/testsuite/config/unix.exp | 181 + xargs/testsuite/inputs/16383-ys.xi | 1 + xargs/testsuite/inputs/32767-ys.xi | 1 + xargs/testsuite/inputs/EOF.xi | 5 + xargs/testsuite/inputs/EOFb.xi | 5 + xargs/testsuite/inputs/EOFe.xi | 5 + xargs/testsuite/inputs/Pdata.xi | 3 + xargs/testsuite/inputs/blank.xi | 3 + xargs/testsuite/inputs/empty.xi | 3 + xargs/testsuite/inputs/eof1.xi | 5 + xargs/testsuite/inputs/eof_-0.xi | Bin 0 -> 20 bytes xargs/testsuite/inputs/eof_.xi | 5 + xargs/testsuite/inputs/eofstr.xi | 5 + xargs/testsuite/inputs/ett.xi | 3 + xargs/testsuite/inputs/files.xi | 22 + xargs/testsuite/inputs/files0.xi | Bin 0 -> 753 bytes xargs/testsuite/inputs/foobar.xi | 3 + xargs/testsuite/inputs/formfeeds.xi | 2 + xargs/testsuite/inputs/ftt.xi | 3 + xargs/testsuite/inputs/helloworld.xi | 1 + xargs/testsuite/inputs/items-0.xi | Bin 0 -> 63 bytes xargs/testsuite/inputs/items.xi | 8 + xargs/testsuite/inputs/ldata-0.xi | Bin 0 -> 108 bytes xargs/testsuite/inputs/ldata.xi | 9 + xargs/testsuite/inputs/ldatab-0.xi | Bin 0 -> 118 bytes xargs/testsuite/inputs/ldatab.xi | 10 + xargs/testsuite/inputs/lines.xi | 6 + xargs/testsuite/inputs/noeof-0.xi | Bin 0 -> 12 bytes xargs/testsuite/inputs/noeof.xi | 2 + xargs/testsuite/inputs/quotes.xi | 5 + xargs/testsuite/inputs/space.xi | 2 + xargs/testsuite/inputs/stairs-0.xi | Bin 0 -> 108 bytes xargs/testsuite/inputs/stairs.xi | 18 + xargs/testsuite/inputs/stairs2-0.xi | Bin 0 -> 108 bytes xargs/testsuite/inputs/stairs2.xi | 18 + xargs/testsuite/inputs/stt.xi | 3 + xargs/testsuite/inputs/sv-bug-20273.xi | 3 + xargs/testsuite/inputs/unmatched.xi | 3 + xargs/testsuite/inputs/unmatched2.xi | 2 + xargs/testsuite/inputs/verticaltabs.xi | 1 + xargs/testsuite/xargs.gnu/0n3.exp | 1 + xargs/testsuite/xargs.gnu/0n3.xo | 8 + xargs/testsuite/xargs.gnu/E_-0.exp | 1 + xargs/testsuite/xargs.gnu/E_-0.xo | 1 + xargs/testsuite/xargs.gnu/L2-0.exp | 1 + xargs/testsuite/xargs.gnu/L2-0.xo | 5 + xargs/testsuite/xargs.gnu/L2_2-0.exp | 1 + xargs/testsuite/xargs.gnu/L2_2-0.xo | 5 + xargs/testsuite/xargs.gnu/L3-0.exp | 1 + xargs/testsuite/xargs.gnu/L3-0.xo | 3 + xargs/testsuite/xargs.gnu/P3-n1-IARG.exp | 1 + xargs/testsuite/xargs.gnu/P3-n1-IARG.xo | 3 + xargs/testsuite/xargs.gnu/delim-o.exp | 1 + xargs/testsuite/xargs.gnu/delim-o.xo | 3 + xargs/testsuite/xargs.gnu/empty-r.exp | 1 + xargs/testsuite/xargs.gnu/empty_def-r.exp | 1 + xargs/testsuite/xargs.gnu/idef-0.exp | 1 + xargs/testsuite/xargs.gnu/idef-0.xo | 20 + xargs/testsuite/xargs.gnu/idef-s26-0.exp | 1 + xargs/testsuite/xargs.gnu/idef-s26-0.xo | 1 + xargs/testsuite/xargs.gnu/l1-0.exp | 1 + xargs/testsuite/xargs.gnu/l1-0.xo | 9 + xargs/testsuite/xargs.gnu/l1_2-0.exp | 1 + xargs/testsuite/xargs.gnu/l1_2-0.xo | 10 + xargs/testsuite/xargs.gnu/n1-0.exp | 1 + xargs/testsuite/xargs.gnu/n1-0.xo | 18 + xargs/testsuite/xargs.gnu/n2-0.exp | 1 + xargs/testsuite/xargs.gnu/n2-0.xo | 9 + xargs/testsuite/xargs.gnu/n2-s26-0.exp | 1 + xargs/testsuite/xargs.gnu/n2-s26-0.xo | 11 + xargs/testsuite/xargs.gnu/n2-s26-x-0.exp | 1 + xargs/testsuite/xargs.gnu/n2-s26-x-0.xo | 3 + xargs/testsuite/xargs.gnu/n3-0.exp | 1 + xargs/testsuite/xargs.gnu/n3-0.xo | 6 + xargs/testsuite/xargs.gnu/n3-s36-0.exp | 1 + xargs/testsuite/xargs.gnu/n3-s36-0.xo | 7 + xargs/testsuite/xargs.gnu/noeof-0.exp | 1 + xargs/testsuite/xargs.gnu/noeof-0.xo | 1 + xargs/testsuite/xargs.gnu/nothing.exp | 1 + xargs/testsuite/xargs.gnu/nothing.xo | 1 + xargs/testsuite/xargs.gnu/r.exp | 1 + xargs/testsuite/xargs.gnu/r.xo | 0 xargs/testsuite/xargs.gnu/s118-0.exp | 1 + xargs/testsuite/xargs.gnu/s118-0.xo | 1 + xargs/testsuite/xargs.gnu/s19-0.exp | 1 + xargs/testsuite/xargs.gnu/s19-0.xo | 6 + xargs/testsuite/xargs.gnu/s19_2-0.exp | 1 + xargs/testsuite/xargs.gnu/s20-0.exp | 1 + xargs/testsuite/xargs.gnu/s20-0.xo | 14 + xargs/testsuite/xargs.gnu/s30-0.exp | 1 + xargs/testsuite/xargs.gnu/s30-0.xo | 6 + xargs/testsuite/xargs.gnu/space-0.exp | 1 + xargs/testsuite/xargs.gnu/space-0.xo | 3 + xargs/testsuite/xargs.gnu/space-r.exp | 1 + xargs/testsuite/xargs.gnu/space-t-0.exp | 1 + xargs/testsuite/xargs.gnu/space-t-0.xe | 3 + xargs/testsuite/xargs.gnu/space-t-0.xo | 3 + xargs/testsuite/xargs.posix/EEOF.exp | 1 + xargs/testsuite/xargs.posix/EEOF.xo | 1 + xargs/testsuite/xargs.posix/EEOFb.exp | 1 + xargs/testsuite/xargs.posix/EEOFb.xo | 1 + xargs/testsuite/xargs.posix/EEOFe.exp | 1 + xargs/testsuite/xargs.posix/EEOFe.xo | 1 + xargs/testsuite/xargs.posix/E_-IARG.exp | 1 + xargs/testsuite/xargs.posix/E_-IARG.xo | 2 + xargs/testsuite/xargs.posix/E_.exp | 1 + xargs/testsuite/xargs.posix/E_.xo | 1 + xargs/testsuite/xargs.posix/IARG-E_.exp | 1 + xargs/testsuite/xargs.posix/IARG-E_.xo | 5 + xargs/testsuite/xargs.posix/IARG-s15.exp | 1 + xargs/testsuite/xargs.posix/IARG-s15.xo | 18 + xargs/testsuite/xargs.posix/IARG.exp | 1 + xargs/testsuite/xargs.posix/IARG.xo | 6 + xargs/testsuite/xargs.posix/L2-n2.exp | 1 + xargs/testsuite/xargs.posix/L2-n2.xo | 9 + xargs/testsuite/xargs.posix/L2_2.exp | 1 + xargs/testsuite/xargs.posix/L2_2.xo | 3 + xargs/testsuite/xargs.posix/L3.exp | 1 + xargs/testsuite/xargs.posix/L3.xo | 3 + .../xargs.posix/arg_max_32bit_linux_bug.exp | 13 + .../xargs.posix/arg_max_64bit_linux_bug.exp | 13 + xargs/testsuite/xargs.posix/childfail.exp | 1 + xargs/testsuite/xargs.posix/empty.exp | 1 + xargs/testsuite/xargs.posix/empty.xo | 1 + xargs/testsuite/xargs.posix/empty_def.exp | 1 + xargs/testsuite/xargs.posix/empty_def.xo | 1 + xargs/testsuite/xargs.posix/hithere.exp | 1 + xargs/testsuite/xargs.posix/hithere.xo | 2 + xargs/testsuite/xargs.posix/n1.exp | 1 + xargs/testsuite/xargs.posix/n1.xo | 18 + xargs/testsuite/xargs.posix/n2-s26-x.exp | 1 + xargs/testsuite/xargs.posix/n2-s26-x.xo | 3 + xargs/testsuite/xargs.posix/n2-s26.exp | 1 + xargs/testsuite/xargs.posix/n2-s26.xo | 11 + xargs/testsuite/xargs.posix/n2.exp | 1 + xargs/testsuite/xargs.posix/n2.xo | 9 + xargs/testsuite/xargs.posix/n3-s36.exp | 1 + xargs/testsuite/xargs.posix/n3-s36.xo | 7 + xargs/testsuite/xargs.posix/n3.exp | 1 + xargs/testsuite/xargs.posix/n3.xo | 8 + xargs/testsuite/xargs.posix/noeof.exp | 1 + xargs/testsuite/xargs.posix/noeof.xo | 1 + xargs/testsuite/xargs.posix/quotes.exp | 1 + xargs/testsuite/xargs.posix/quotes.xo | 2 + xargs/testsuite/xargs.posix/rc-123.exp | 1 + xargs/testsuite/xargs.posix/rc-123.xo | 2 + xargs/testsuite/xargs.posix/rc-124.exp | 1 + xargs/testsuite/xargs.posix/rc-125.exp | 11 + xargs/testsuite/xargs.posix/rc-126.exp | 1 + xargs/testsuite/xargs.posix/rc-127.exp | 1 + xargs/testsuite/xargs.posix/s118.exp | 1 + xargs/testsuite/xargs.posix/s118.xo | 1 + xargs/testsuite/xargs.posix/s19.exp | 1 + xargs/testsuite/xargs.posix/s19.xo | 6 + xargs/testsuite/xargs.posix/s19_2.exp | 1 + xargs/testsuite/xargs.posix/s20.exp | 1 + xargs/testsuite/xargs.posix/s20.xo | 14 + xargs/testsuite/xargs.posix/s30.exp | 1 + xargs/testsuite/xargs.posix/s30.xo | 6 + xargs/testsuite/xargs.posix/s47.exp | 1 + xargs/testsuite/xargs.posix/s47.xo | 18 + xargs/testsuite/xargs.posix/s470.exp | 1 + xargs/testsuite/xargs.posix/s470.xo | 2 + xargs/testsuite/xargs.posix/s48.exp | 1 + xargs/testsuite/xargs.posix/s48.xo | 22 + xargs/testsuite/xargs.posix/s6.exp | 1 + xargs/testsuite/xargs.posix/savannah-11865.exp | 1 + xargs/testsuite/xargs.posix/savannah-11865.xo | 22 + xargs/testsuite/xargs.posix/space-I.exp | 1 + xargs/testsuite/xargs.posix/space.exp | 1 + xargs/testsuite/xargs.posix/space.xo | 1 + xargs/testsuite/xargs.posix/sv-bug-18714.exp | 10 + xargs/testsuite/xargs.posix/sv-bug-18714.xo | 2 + xargs/testsuite/xargs.posix/sv-bug-18714b.exp | 10 + xargs/testsuite/xargs.posix/sv-bug-18714b.xo | 2 + xargs/testsuite/xargs.posix/sv-bug-20273.exp | 1 + xargs/testsuite/xargs.posix/sv-bug-20273.xo | 2 + xargs/testsuite/xargs.posix/uc_L2.exp | 1 + xargs/testsuite/xargs.posix/uc_L2.xo | 5 + xargs/testsuite/xargs.posix/unmatched-n2-x.exp | 1 + xargs/testsuite/xargs.posix/unmatched.exp | 1 + xargs/testsuite/xargs.posix/unmatched.xo | 1 + xargs/testsuite/xargs.posix/unmatched2.exp | 1 + xargs/testsuite/xargs.posix/unmatched2.xo | 1 + xargs/testsuite/xargs.sysv/e.exp | 1 + xargs/testsuite/xargs.sysv/e.xo | 1 + xargs/testsuite/xargs.sysv/eEOF.exp | 1 + xargs/testsuite/xargs.sysv/eEOF.xo | 1 + xargs/testsuite/xargs.sysv/empty-t.exp | 1 + xargs/testsuite/xargs.sysv/empty-t.xe | 1 + xargs/testsuite/xargs.sysv/empty-t.xo | 1 + xargs/testsuite/xargs.sysv/empty_def-t.exp | 1 + xargs/testsuite/xargs.sysv/empty_def-t.xe | 1 + xargs/testsuite/xargs.sysv/empty_def-t.xo | 1 + xargs/testsuite/xargs.sysv/eof1.exp | 1 + xargs/testsuite/xargs.sysv/eof1.xo | 1 + xargs/testsuite/xargs.sysv/iARG.exp | 1 + xargs/testsuite/xargs.sysv/iARG.xo | 22 + xargs/testsuite/xargs.sysv/idef-s26.exp | 1 + xargs/testsuite/xargs.sysv/idef-s26.xo | 1 + xargs/testsuite/xargs.sysv/idef.exp | 1 + xargs/testsuite/xargs.sysv/idef.xo | 6 + xargs/testsuite/xargs.sysv/iquotes.exp | 1 + xargs/testsuite/xargs.sysv/iquotes.xo | 5 + xargs/testsuite/xargs.sysv/l1.exp | 1 + xargs/testsuite/xargs.sysv/l1.xo | 9 + xargs/testsuite/xargs.sysv/l1_2.exp | 1 + xargs/testsuite/xargs.sysv/l1_2.xo | 6 + xargs/testsuite/xargs.sysv/l1n4.exp | 1 + xargs/testsuite/xargs.sysv/l1n4.xo | 6 + xargs/testsuite/xargs.sysv/lc_l2.exp | 1 + xargs/testsuite/xargs.sysv/lc_l2.xo | 11 + xargs/testsuite/xargs.sysv/s30-t.exp | 1 + xargs/testsuite/xargs.sysv/s30-t.xe | 6 + xargs/testsuite/xargs.sysv/s30-t.xo | 6 + xargs/testsuite/xargs.sysv/space-t.exp | 1 + xargs/testsuite/xargs.sysv/space-t.xe | 1 + xargs/testsuite/xargs.sysv/space-t.xo | 1 + xargs/testsuite/xargs.sysv/sv-bug-18713.exp | 1 + xargs/testsuite/xargs.sysv/sv-bug-18713.xo | 7 + xargs/testsuite/xargs.sysv/trace.exp | 1 + xargs/testsuite/xargs.sysv/trace.xe | 2 + xargs/testsuite/xargs.sysv/trace.xo | 2 + xargs/xargs.1 | 441 ++ xargs/xargs.c | 1318 ++++ 623 files changed, 98040 insertions(+) create mode 100644 .cvsignore create mode 100644 .gitignore create mode 100644 ABOUT-NLS create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 NEWS create mode 100644 README create mode 100644 README-CVS create mode 100644 README-alpha create mode 100644 THANKS create mode 100644 TODO create mode 100644 build-aux/.cvsignore create mode 100644 build-aux/.gitignore create mode 100644 build-aux/Makefile.am create mode 100755 build-aux/check-testfiles.sh create mode 100755 build-aux/man-lint.sh create mode 100644 build-aux/src-sniff.py create mode 100644 configure.ac create mode 100755 debian.rules create mode 100644 debian/.cvsignore create mode 100644 debian/.gitignore create mode 100644 debian/README.debian create mode 100644 debian/TODO create mode 100644 debian/changelog create mode 100644 debian/conffiles create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/cron.find create mode 100644 debian/doc-base create mode 100755 debian/postinst create mode 100755 debian/preinst create mode 100755 debian/prerm create mode 100755 debian/rules create mode 100644 debian/substvars create mode 100644 debian/updatedb.conf create mode 100644 doc/.cvsignore create mode 100644 doc/.gitignore create mode 100644 doc/Makefile.am create mode 100644 doc/find-maint.texi create mode 100644 doc/find.texi create mode 100644 doc/perm.texi create mode 100644 find/.cvsignore create mode 100644 find/.gitignore create mode 100644 find/Makefile.am create mode 100644 find/defs.h create mode 100644 find/find.1 create mode 100644 find/find.c create mode 100644 find/finddata.c create mode 100644 find/fstype.c create mode 100644 find/ftsfind.c create mode 100644 find/parser.c create mode 100644 find/pred.c create mode 100644 find/testsuite/.cvsignore create mode 100644 find/testsuite/.gitignore create mode 100644 find/testsuite/Makefile.am create mode 100644 find/testsuite/config/unix.exp create mode 100644 find/testsuite/excuses.txt create mode 100644 find/testsuite/find.gnu/access.exp create mode 100644 find/testsuite/find.gnu/access.xo create mode 100644 find/testsuite/find.gnu/comma.exp create mode 100644 find/testsuite/find.gnu/comma.xo create mode 100644 find/testsuite/find.gnu/delete.exp create mode 100644 find/testsuite/find.gnu/delete.xo create mode 100644 find/testsuite/find.gnu/deletedir.exp create mode 100644 find/testsuite/find.gnu/deletedir.xo create mode 100644 find/testsuite/find.gnu/deletefile.exp create mode 100644 find/testsuite/find.gnu/deletefile.xo create mode 100644 find/testsuite/find.gnu/depth-d.exp create mode 100644 find/testsuite/find.gnu/depth-d.xo create mode 100644 find/testsuite/find.gnu/depth.exp create mode 100644 find/testsuite/find.gnu/depth.xo create mode 100644 find/testsuite/find.gnu/empty.exp create mode 100644 find/testsuite/find.gnu/empty.xo create mode 100644 find/testsuite/find.gnu/exec-many-rtn-failure.exp create mode 100644 find/testsuite/find.gnu/exec-many-rtn-failure.xo create mode 100644 find/testsuite/find.gnu/exec-many-rtn-success.exp create mode 100644 find/testsuite/find.gnu/exec-many-rtn-success.xo create mode 100644 find/testsuite/find.gnu/exec-one-rtn-fail.exp create mode 100644 find/testsuite/find.gnu/exec-one-rtn-fail.xo create mode 100644 find/testsuite/find.gnu/exec-one-rtn-success.exp create mode 100644 find/testsuite/find.gnu/exec-one-rtn-success.xo create mode 100644 find/testsuite/find.gnu/execdir-hier.exp create mode 100644 find/testsuite/find.gnu/execdir-hier.xo create mode 100644 find/testsuite/find.gnu/execdir-in-unreadable.exp create mode 100644 find/testsuite/find.gnu/execdir-one.exp create mode 100644 find/testsuite/find.gnu/execdir-one.xo create mode 100644 find/testsuite/find.gnu/execdir-pwd.exp create mode 100644 find/testsuite/find.gnu/execdir-root-only.exp create mode 100644 find/testsuite/find.gnu/execdir-root-only.xo create mode 100644 find/testsuite/find.gnu/false.exp create mode 100644 find/testsuite/find.gnu/false.xo create mode 100644 find/testsuite/find.gnu/follow-arg-parent-symlink.exp create mode 100644 find/testsuite/find.gnu/follow-arg-parent-symlink.xo create mode 100644 find/testsuite/find.gnu/follow-basic.exp create mode 100644 find/testsuite/find.gnu/follow-basic.xo create mode 100644 find/testsuite/find.gnu/fprint-unwritable.exp create mode 100644 find/testsuite/find.gnu/fprint0_stdout.exp create mode 100644 find/testsuite/find.gnu/fprint0_stdout.xo create mode 100644 find/testsuite/find.gnu/gnu-or.exp create mode 100644 find/testsuite/find.gnu/gnu-or.xo create mode 100644 find/testsuite/find.gnu/gnuand.exp create mode 100644 find/testsuite/find.gnu/gnuand.xo create mode 100644 find/testsuite/find.gnu/gnunot.exp create mode 100644 find/testsuite/find.gnu/gnunot.xo create mode 100644 find/testsuite/find.gnu/ilname.exp create mode 100644 find/testsuite/find.gnu/ilname.xo create mode 100644 find/testsuite/find.gnu/iname.exp create mode 100644 find/testsuite/find.gnu/iname.xo create mode 100644 find/testsuite/find.gnu/inum.exp create mode 100644 find/testsuite/find.gnu/inum.xo create mode 100644 find/testsuite/find.gnu/ipath.exp create mode 100644 find/testsuite/find.gnu/ipath.xo create mode 100644 find/testsuite/find.gnu/iregex1.exp create mode 100644 find/testsuite/find.gnu/iregex1.xo create mode 100644 find/testsuite/find.gnu/iwholename.exp create mode 100644 find/testsuite/find.gnu/iwholename.xo create mode 100644 find/testsuite/find.gnu/lname.exp create mode 100644 find/testsuite/find.gnu/lname.xo create mode 100644 find/testsuite/find.gnu/mindepth-arg.exp create mode 100644 find/testsuite/find.gnu/mindepth-arg.xo create mode 100644 find/testsuite/find.gnu/mindepth-badarg.exp create mode 100644 find/testsuite/find.gnu/name-opt.exp create mode 100644 find/testsuite/find.gnu/name-opt.xo create mode 100644 find/testsuite/find.gnu/name-period.exp create mode 100644 find/testsuite/find.gnu/name-period.xo create mode 100644 find/testsuite/find.gnu/name-slash.exp create mode 100644 find/testsuite/find.gnu/name-slash.xo create mode 100644 find/testsuite/find.gnu/path.exp create mode 100644 find/testsuite/find.gnu/path.xo create mode 100644 find/testsuite/find.gnu/perm-slash.exp create mode 100644 find/testsuite/find.gnu/perm-slash.xo create mode 100644 find/testsuite/find.gnu/perm.exp create mode 100644 find/testsuite/find.gnu/perm.xo create mode 100644 find/testsuite/find.gnu/perm000.exp create mode 100644 find/testsuite/find.gnu/perm000.xo create mode 100644 find/testsuite/find.gnu/posix-dflt.exp create mode 100644 find/testsuite/find.gnu/posix-dflt.xo create mode 100644 find/testsuite/find.gnu/posix-h.exp create mode 100644 find/testsuite/find.gnu/posix-h.xo create mode 100644 find/testsuite/find.gnu/posix-l.exp create mode 100644 find/testsuite/find.gnu/posix-l.xo create mode 100644 find/testsuite/find.gnu/posix-perminvalid.exp create mode 100644 find/testsuite/find.gnu/print0.exp create mode 100644 find/testsuite/find.gnu/print0.xo create mode 100644 find/testsuite/find.gnu/print_stdout.exp create mode 100644 find/testsuite/find.gnu/print_stdout.xo create mode 100644 find/testsuite/find.gnu/printf-h.exp create mode 100644 find/testsuite/find.gnu/printf-h.xo create mode 100644 find/testsuite/find.gnu/printf-slash.exp create mode 100644 find/testsuite/find.gnu/printf-slash.xo create mode 100644 find/testsuite/find.gnu/printf-symlink.exp create mode 100644 find/testsuite/find.gnu/printf-symlink.xo create mode 100644 find/testsuite/find.gnu/printf.exp create mode 100644 find/testsuite/find.gnu/printf.xo create mode 100644 find/testsuite/find.gnu/printfHdfl.exp create mode 100644 find/testsuite/find.gnu/printfHdfl.xo create mode 100644 find/testsuite/find.gnu/prune-default-print.exp create mode 100644 find/testsuite/find.gnu/prune-default-print.xo create mode 100644 find/testsuite/find.gnu/quit.exp create mode 100644 find/testsuite/find.gnu/quit.xo create mode 100644 find/testsuite/find.gnu/regex1.exp create mode 100644 find/testsuite/find.gnu/regex1.xo create mode 100644 find/testsuite/find.gnu/regex2.exp create mode 100644 find/testsuite/find.gnu/regex2.xo create mode 100644 find/testsuite/find.gnu/samefile-copy.exp create mode 100644 find/testsuite/find.gnu/samefile-copy.xo create mode 100644 find/testsuite/find.gnu/samefile-link.exp create mode 100644 find/testsuite/find.gnu/samefile-link.xo create mode 100644 find/testsuite/find.gnu/samefile-missing.exp create mode 100644 find/testsuite/find.gnu/samefile-p-brokenlink.exp create mode 100644 find/testsuite/find.gnu/samefile-p-brokenlink.xo create mode 100644 find/testsuite/find.gnu/samefile-same.exp create mode 100644 find/testsuite/find.gnu/samefile-same.xo create mode 100644 find/testsuite/find.gnu/samefile-symlink.exp create mode 100644 find/testsuite/find.gnu/samefile-symlink.xo create mode 100644 find/testsuite/find.gnu/sv-bug-12230.exp create mode 100644 find/testsuite/find.gnu/sv-bug-17477.exp create mode 100644 find/testsuite/find.gnu/sv-bug-17490.exp create mode 100644 find/testsuite/find.gnu/sv-bug-17782.exp create mode 100644 find/testsuite/find.gnu/sv-bug-17782.xo create mode 100644 find/testsuite/find.gnu/sv-bug-18222.exp create mode 100644 find/testsuite/find.gnu/sv-bug-18222.xo create mode 100644 find/testsuite/find.gnu/true.exp create mode 100644 find/testsuite/find.gnu/true.xo create mode 100644 find/testsuite/find.gnu/used-invarg.exp create mode 100644 find/testsuite/find.gnu/used-missing.exp create mode 100644 find/testsuite/find.gnu/user-invalid.exp create mode 100644 find/testsuite/find.gnu/wholename.exp create mode 100644 find/testsuite/find.gnu/wholename.xo create mode 100644 find/testsuite/find.gnu/xtype-symlink.exp create mode 100644 find/testsuite/find.gnu/xtype-symlink.xo create mode 100644 find/testsuite/find.gnu/xtype.exp create mode 100644 find/testsuite/find.gnu/xtype.xo create mode 100644 find/testsuite/find.posix/and.exp create mode 100644 find/testsuite/find.posix/and.xo create mode 100644 find/testsuite/find.posix/bracket-depth.exp create mode 100644 find/testsuite/find.posix/depth1.exp create mode 100644 find/testsuite/find.posix/depth1.xo create mode 100644 find/testsuite/find.posix/empty-parens.exp create mode 100644 find/testsuite/find.posix/exec-one.exp create mode 100644 find/testsuite/find.posix/exec-one.xo create mode 100644 find/testsuite/find.posix/files-not-expressions1.exp create mode 100644 find/testsuite/find.posix/files-not-expressions1.xo create mode 100644 find/testsuite/find.posix/files-not-expressions2.exp create mode 100644 find/testsuite/find.posix/files-not-expressions2.xo create mode 100644 find/testsuite/find.posix/files-not-expressions3.exp create mode 100644 find/testsuite/find.posix/files-not-expressions3.xo create mode 100644 find/testsuite/find.posix/group-empty.exp create mode 100644 find/testsuite/find.posix/group-missing.exp create mode 100644 find/testsuite/find.posix/grouping.exp create mode 100644 find/testsuite/find.posix/grouping.xo create mode 100644 find/testsuite/find.posix/links.exp create mode 100644 find/testsuite/find.posix/links.xo create mode 100644 find/testsuite/find.posix/name-missing.exp create mode 100644 find/testsuite/find.posix/name.exp create mode 100644 find/testsuite/find.posix/name.xo create mode 100644 find/testsuite/find.posix/perm-X.exp create mode 100644 find/testsuite/find.posix/perm-X.xo create mode 100644 find/testsuite/find.posix/perm-vanilla.exp create mode 100644 find/testsuite/find.posix/perm-vanilla.xo create mode 100644 find/testsuite/find.posix/posixnot.exp create mode 100644 find/testsuite/find.posix/posixnot.xo create mode 100644 find/testsuite/find.posix/prune.exp create mode 100644 find/testsuite/find.posix/prune.xo create mode 100644 find/testsuite/find.posix/size-invalid.exp create mode 100644 find/testsuite/find.posix/size-missing.exp create mode 100644 find/testsuite/find.posix/sizes.exp create mode 100644 find/testsuite/find.posix/sizes.xo create mode 100644 find/testsuite/find.posix/sizetype.exp create mode 100644 find/testsuite/find.posix/sizetype.xo create mode 100644 find/testsuite/find.posix/sv-bug-11175.exp create mode 100644 find/testsuite/find.posix/sv-bug-11175.xo create mode 100644 find/testsuite/find.posix/sv-bug-12181.exp create mode 100644 find/testsuite/find.posix/sv-bug-12181.xo create mode 100644 find/testsuite/find.posix/sv-bug-15235.exp create mode 100644 find/testsuite/find.posix/sv-bug-15235.xo create mode 100644 find/testsuite/find.posix/sv-bug-19605.exp create mode 100644 find/testsuite/find.posix/sv-bug-19613.exp create mode 100644 find/testsuite/find.posix/sv-bug-19613.xo create mode 100644 find/testsuite/find.posix/sv-bug-19617.exp create mode 100644 find/testsuite/find.posix/typearg.exp create mode 100644 find/testsuite/find.posix/typesize.exp create mode 100644 find/testsuite/find.posix/typesize.xo create mode 100644 find/testsuite/find.posix/user-empty.exp create mode 100644 find/testsuite/find.posix/user-missing.exp create mode 100644 find/tree.c create mode 100644 find/util.c create mode 100644 import-gnulib.config create mode 100755 import-gnulib.sh create mode 100644 lib/.cvsignore create mode 100644 lib/.gitignore create mode 100644 lib/Makefile.am create mode 100644 lib/buildcmd.c create mode 100644 lib/buildcmd.h create mode 100644 lib/dircallback.c create mode 100644 lib/dircallback.h create mode 100644 lib/extendbuf.c create mode 100644 lib/extendbuf.h create mode 100644 lib/findutils-version.c create mode 100644 lib/findutils-version.h create mode 100644 lib/forcefindlib.c create mode 100644 lib/gnulib-version.h create mode 100644 lib/listfile.c create mode 100644 lib/listfile.h create mode 100644 lib/modetype.h create mode 100644 lib/nextelem.c create mode 100644 lib/nextelem.h create mode 100644 lib/printquoted.c create mode 100644 lib/printquoted.h create mode 100644 lib/qmark.c create mode 100644 lib/regexprops.c create mode 100644 lib/regextype.c create mode 100644 lib/regextype.h create mode 100644 lib/savedirinfo.c create mode 100644 lib/savedirinfo.h create mode 100644 lib/strspn.c create mode 100644 lib/wait.h create mode 100644 lib/waitpid.c create mode 100644 locate/.cvsignore create mode 100644 locate/.gitignore create mode 100644 locate/Makefile.am create mode 100644 locate/bigram.c create mode 100644 locate/code.c create mode 100644 locate/frcode.c create mode 100644 locate/locate.1 create mode 100644 locate/locate.c create mode 100644 locate/locatedb.5 create mode 100644 locate/locatedb.h create mode 100644 locate/testsuite/.cvsignore create mode 100644 locate/testsuite/.gitignore create mode 100644 locate/testsuite/Makefile.am create mode 100644 locate/testsuite/config/unix.exp create mode 100644 locate/testsuite/locate.gnu/bigendian.exp create mode 100644 locate/testsuite/locate.gnu/bigendian.xo create mode 100644 locate/testsuite/locate.gnu/bigprefix1.exp create mode 100644 locate/testsuite/locate.gnu/exceedshort.exp create mode 100644 locate/testsuite/locate.gnu/exists1.exp create mode 100644 locate/testsuite/locate.gnu/exists1.xo create mode 100644 locate/testsuite/locate.gnu/exists2.exp create mode 100644 locate/testsuite/locate.gnu/exists2.xo create mode 100644 locate/testsuite/locate.gnu/exists3.exp create mode 100644 locate/testsuite/locate.gnu/exists3.xo create mode 100644 locate/testsuite/locate.gnu/ignore_case1.exp create mode 100644 locate/testsuite/locate.gnu/ignore_case1.xo create mode 100644 locate/testsuite/locate.gnu/ignore_case2.exp create mode 100644 locate/testsuite/locate.gnu/ignore_case2.xo create mode 100644 locate/testsuite/locate.gnu/ignore_case3.exp create mode 100644 locate/testsuite/locate.gnu/ignore_case3.xo create mode 100644 locate/testsuite/locate.gnu/littleendian.exp create mode 100644 locate/testsuite/locate.gnu/littleendian.xo create mode 100644 locate/testsuite/locate.gnu/locateddb.old.powerpc.xi create mode 100644 locate/testsuite/locate.gnu/locateddb.old.x86.xi create mode 100644 locate/testsuite/locate.gnu/notexists1.exp create mode 100644 locate/testsuite/locate.gnu/notexists1.xo create mode 100644 locate/testsuite/locate.gnu/notexists2.exp create mode 100644 locate/testsuite/locate.gnu/notexists2.xo create mode 100644 locate/testsuite/locate.gnu/notexists3.exp create mode 100644 locate/testsuite/locate.gnu/notexists3.xo create mode 100644 locate/testsuite/locate.gnu/old_prefix.exp create mode 100644 locate/testsuite/locate.gnu/old_prefix.xo create mode 100644 locate/testsuite/locate.gnu/regex1.exp create mode 100644 locate/testsuite/locate.gnu/space1st.exp create mode 100644 locate/testsuite/locate.gnu/sv-bug-14535.exp create mode 100644 locate/updatedb.1 create mode 100644 locate/updatedb.sh create mode 100644 locate/word_io.c create mode 100644 m4/.cvsignore create mode 100644 m4/.gitignore create mode 100644 m4/Makefile.am create mode 100644 m4/findlib.m4 create mode 100644 m4/mkinstalldirs.m4 create mode 100644 m4/noreturn.m4 create mode 100644 m4/nullsort.m4 create mode 100644 m4/order-bad.bin create mode 100644 m4/order-good.bin create mode 100644 m4/withfts.m4 create mode 100644 po/.cvsignore create mode 100644 po/.gitignore create mode 100644 po/Makefile.in.in create mode 100644 po/Makevars create mode 100644 po/Makevars.template create mode 100644 po/POTFILES.in create mode 100644 po/Rules-quot create mode 100644 po/be.po create mode 100644 po/bg.po create mode 100644 po/boldquot.sed create mode 100644 po/ca.po create mode 100644 po/da.po create mode 100644 po/de.po create mode 100644 po/el.po create mode 100644 po/en@boldquot.header create mode 100644 po/en@quot.header create mode 100644 po/eo.po create mode 100644 po/es.po create mode 100644 po/et.po create mode 100644 po/fetch-po-files create mode 100644 po/fi.po create mode 100644 po/findutils.pot create mode 100644 po/fr.po create mode 100644 po/ga.po create mode 100644 po/gl.po create mode 100644 po/hr.po create mode 100644 po/hu.po create mode 100644 po/id.po create mode 100644 po/insert-header.sin create mode 100644 po/it.po create mode 100644 po/ja.po create mode 100644 po/ko.po create mode 100644 po/lg.po create mode 100644 po/ms.po create mode 100644 po/nl.po create mode 100644 po/pl.po create mode 100644 po/pt.po create mode 100644 po/pt_BR.po create mode 100644 po/quot.sed create mode 100644 po/remove-potcdate.sin create mode 100644 po/ro.po create mode 100644 po/ru.po create mode 100644 po/rw.po create mode 100644 po/sk.po create mode 100644 po/sl.po create mode 100644 po/sr.po create mode 100644 po/sv.po create mode 100644 po/tr.po create mode 100644 po/uk.po create mode 100644 po/vi.po create mode 100644 po/zh_CN.po create mode 100644 po/zh_TW.po create mode 100644 stamp-h.in create mode 100644 xargs/.cvsignore create mode 100644 xargs/.gitignore create mode 100644 xargs/Makefile.am create mode 100644 xargs/testsuite/.cvsignore create mode 100644 xargs/testsuite/.gitignore create mode 100644 xargs/testsuite/Makefile.am create mode 100644 xargs/testsuite/config/unix.exp create mode 100644 xargs/testsuite/inputs/16383-ys.xi create mode 100644 xargs/testsuite/inputs/32767-ys.xi create mode 100644 xargs/testsuite/inputs/EOF.xi create mode 100644 xargs/testsuite/inputs/EOFb.xi create mode 100644 xargs/testsuite/inputs/EOFe.xi create mode 100644 xargs/testsuite/inputs/Pdata.xi create mode 100644 xargs/testsuite/inputs/blank.xi create mode 100644 xargs/testsuite/inputs/empty.xi create mode 100644 xargs/testsuite/inputs/eof1.xi create mode 100644 xargs/testsuite/inputs/eof_-0.xi create mode 100644 xargs/testsuite/inputs/eof_.xi create mode 100644 xargs/testsuite/inputs/eofstr.xi create mode 100644 xargs/testsuite/inputs/ett.xi create mode 100644 xargs/testsuite/inputs/files.xi create mode 100644 xargs/testsuite/inputs/files0.xi create mode 100644 xargs/testsuite/inputs/foobar.xi create mode 100644 xargs/testsuite/inputs/formfeeds.xi create mode 100644 xargs/testsuite/inputs/ftt.xi create mode 100644 xargs/testsuite/inputs/helloworld.xi create mode 100644 xargs/testsuite/inputs/items-0.xi create mode 100644 xargs/testsuite/inputs/items.xi create mode 100644 xargs/testsuite/inputs/ldata-0.xi create mode 100644 xargs/testsuite/inputs/ldata.xi create mode 100644 xargs/testsuite/inputs/ldatab-0.xi create mode 100644 xargs/testsuite/inputs/ldatab.xi create mode 100644 xargs/testsuite/inputs/lines.xi create mode 100644 xargs/testsuite/inputs/noeof-0.xi create mode 100644 xargs/testsuite/inputs/noeof.xi create mode 100644 xargs/testsuite/inputs/quotes.xi create mode 100644 xargs/testsuite/inputs/space.xi create mode 100644 xargs/testsuite/inputs/stairs-0.xi create mode 100644 xargs/testsuite/inputs/stairs.xi create mode 100644 xargs/testsuite/inputs/stairs2-0.xi create mode 100644 xargs/testsuite/inputs/stairs2.xi create mode 100644 xargs/testsuite/inputs/stt.xi create mode 100644 xargs/testsuite/inputs/sv-bug-20273.xi create mode 100644 xargs/testsuite/inputs/unmatched.xi create mode 100644 xargs/testsuite/inputs/unmatched2.xi create mode 100644 xargs/testsuite/inputs/verticaltabs.xi create mode 100644 xargs/testsuite/xargs.gnu/0n3.exp create mode 100644 xargs/testsuite/xargs.gnu/0n3.xo create mode 100644 xargs/testsuite/xargs.gnu/E_-0.exp create mode 100644 xargs/testsuite/xargs.gnu/E_-0.xo create mode 100644 xargs/testsuite/xargs.gnu/L2-0.exp create mode 100644 xargs/testsuite/xargs.gnu/L2-0.xo create mode 100644 xargs/testsuite/xargs.gnu/L2_2-0.exp create mode 100644 xargs/testsuite/xargs.gnu/L2_2-0.xo create mode 100644 xargs/testsuite/xargs.gnu/L3-0.exp create mode 100644 xargs/testsuite/xargs.gnu/L3-0.xo create mode 100644 xargs/testsuite/xargs.gnu/P3-n1-IARG.exp create mode 100644 xargs/testsuite/xargs.gnu/P3-n1-IARG.xo create mode 100644 xargs/testsuite/xargs.gnu/delim-o.exp create mode 100644 xargs/testsuite/xargs.gnu/delim-o.xo create mode 100644 xargs/testsuite/xargs.gnu/empty-r.exp create mode 100644 xargs/testsuite/xargs.gnu/empty_def-r.exp create mode 100644 xargs/testsuite/xargs.gnu/idef-0.exp create mode 100644 xargs/testsuite/xargs.gnu/idef-0.xo create mode 100644 xargs/testsuite/xargs.gnu/idef-s26-0.exp create mode 100644 xargs/testsuite/xargs.gnu/idef-s26-0.xo create mode 100644 xargs/testsuite/xargs.gnu/l1-0.exp create mode 100644 xargs/testsuite/xargs.gnu/l1-0.xo create mode 100644 xargs/testsuite/xargs.gnu/l1_2-0.exp create mode 100644 xargs/testsuite/xargs.gnu/l1_2-0.xo create mode 100644 xargs/testsuite/xargs.gnu/n1-0.exp create mode 100644 xargs/testsuite/xargs.gnu/n1-0.xo create mode 100644 xargs/testsuite/xargs.gnu/n2-0.exp create mode 100644 xargs/testsuite/xargs.gnu/n2-0.xo create mode 100644 xargs/testsuite/xargs.gnu/n2-s26-0.exp create mode 100644 xargs/testsuite/xargs.gnu/n2-s26-0.xo create mode 100644 xargs/testsuite/xargs.gnu/n2-s26-x-0.exp create mode 100644 xargs/testsuite/xargs.gnu/n2-s26-x-0.xo create mode 100644 xargs/testsuite/xargs.gnu/n3-0.exp create mode 100644 xargs/testsuite/xargs.gnu/n3-0.xo create mode 100644 xargs/testsuite/xargs.gnu/n3-s36-0.exp create mode 100644 xargs/testsuite/xargs.gnu/n3-s36-0.xo create mode 100644 xargs/testsuite/xargs.gnu/noeof-0.exp create mode 100644 xargs/testsuite/xargs.gnu/noeof-0.xo create mode 100644 xargs/testsuite/xargs.gnu/nothing.exp create mode 100644 xargs/testsuite/xargs.gnu/nothing.xo create mode 100644 xargs/testsuite/xargs.gnu/r.exp create mode 100644 xargs/testsuite/xargs.gnu/r.xo create mode 100644 xargs/testsuite/xargs.gnu/s118-0.exp create mode 100644 xargs/testsuite/xargs.gnu/s118-0.xo create mode 100644 xargs/testsuite/xargs.gnu/s19-0.exp create mode 100644 xargs/testsuite/xargs.gnu/s19-0.xo create mode 100644 xargs/testsuite/xargs.gnu/s19_2-0.exp create mode 100644 xargs/testsuite/xargs.gnu/s20-0.exp create mode 100644 xargs/testsuite/xargs.gnu/s20-0.xo create mode 100644 xargs/testsuite/xargs.gnu/s30-0.exp create mode 100644 xargs/testsuite/xargs.gnu/s30-0.xo create mode 100644 xargs/testsuite/xargs.gnu/space-0.exp create mode 100644 xargs/testsuite/xargs.gnu/space-0.xo create mode 100644 xargs/testsuite/xargs.gnu/space-r.exp create mode 100644 xargs/testsuite/xargs.gnu/space-t-0.exp create mode 100644 xargs/testsuite/xargs.gnu/space-t-0.xe create mode 100644 xargs/testsuite/xargs.gnu/space-t-0.xo create mode 100644 xargs/testsuite/xargs.posix/EEOF.exp create mode 100644 xargs/testsuite/xargs.posix/EEOF.xo create mode 100644 xargs/testsuite/xargs.posix/EEOFb.exp create mode 100644 xargs/testsuite/xargs.posix/EEOFb.xo create mode 100644 xargs/testsuite/xargs.posix/EEOFe.exp create mode 100644 xargs/testsuite/xargs.posix/EEOFe.xo create mode 100644 xargs/testsuite/xargs.posix/E_-IARG.exp create mode 100644 xargs/testsuite/xargs.posix/E_-IARG.xo create mode 100644 xargs/testsuite/xargs.posix/E_.exp create mode 100644 xargs/testsuite/xargs.posix/E_.xo create mode 100644 xargs/testsuite/xargs.posix/IARG-E_.exp create mode 100644 xargs/testsuite/xargs.posix/IARG-E_.xo create mode 100644 xargs/testsuite/xargs.posix/IARG-s15.exp create mode 100644 xargs/testsuite/xargs.posix/IARG-s15.xo create mode 100644 xargs/testsuite/xargs.posix/IARG.exp create mode 100644 xargs/testsuite/xargs.posix/IARG.xo create mode 100644 xargs/testsuite/xargs.posix/L2-n2.exp create mode 100644 xargs/testsuite/xargs.posix/L2-n2.xo create mode 100644 xargs/testsuite/xargs.posix/L2_2.exp create mode 100644 xargs/testsuite/xargs.posix/L2_2.xo create mode 100644 xargs/testsuite/xargs.posix/L3.exp create mode 100644 xargs/testsuite/xargs.posix/L3.xo create mode 100644 xargs/testsuite/xargs.posix/arg_max_32bit_linux_bug.exp create mode 100644 xargs/testsuite/xargs.posix/arg_max_64bit_linux_bug.exp create mode 100644 xargs/testsuite/xargs.posix/childfail.exp create mode 100644 xargs/testsuite/xargs.posix/empty.exp create mode 100644 xargs/testsuite/xargs.posix/empty.xo create mode 100644 xargs/testsuite/xargs.posix/empty_def.exp create mode 100644 xargs/testsuite/xargs.posix/empty_def.xo create mode 100644 xargs/testsuite/xargs.posix/hithere.exp create mode 100644 xargs/testsuite/xargs.posix/hithere.xo create mode 100644 xargs/testsuite/xargs.posix/n1.exp create mode 100644 xargs/testsuite/xargs.posix/n1.xo create mode 100644 xargs/testsuite/xargs.posix/n2-s26-x.exp create mode 100644 xargs/testsuite/xargs.posix/n2-s26-x.xo create mode 100644 xargs/testsuite/xargs.posix/n2-s26.exp create mode 100644 xargs/testsuite/xargs.posix/n2-s26.xo create mode 100644 xargs/testsuite/xargs.posix/n2.exp create mode 100644 xargs/testsuite/xargs.posix/n2.xo create mode 100644 xargs/testsuite/xargs.posix/n3-s36.exp create mode 100644 xargs/testsuite/xargs.posix/n3-s36.xo create mode 100644 xargs/testsuite/xargs.posix/n3.exp create mode 100644 xargs/testsuite/xargs.posix/n3.xo create mode 100644 xargs/testsuite/xargs.posix/noeof.exp create mode 100644 xargs/testsuite/xargs.posix/noeof.xo create mode 100644 xargs/testsuite/xargs.posix/quotes.exp create mode 100644 xargs/testsuite/xargs.posix/quotes.xo create mode 100644 xargs/testsuite/xargs.posix/rc-123.exp create mode 100644 xargs/testsuite/xargs.posix/rc-123.xo create mode 100644 xargs/testsuite/xargs.posix/rc-124.exp create mode 100644 xargs/testsuite/xargs.posix/rc-125.exp create mode 100644 xargs/testsuite/xargs.posix/rc-126.exp create mode 100644 xargs/testsuite/xargs.posix/rc-127.exp create mode 100644 xargs/testsuite/xargs.posix/s118.exp create mode 100644 xargs/testsuite/xargs.posix/s118.xo create mode 100644 xargs/testsuite/xargs.posix/s19.exp create mode 100644 xargs/testsuite/xargs.posix/s19.xo create mode 100644 xargs/testsuite/xargs.posix/s19_2.exp create mode 100644 xargs/testsuite/xargs.posix/s20.exp create mode 100644 xargs/testsuite/xargs.posix/s20.xo create mode 100644 xargs/testsuite/xargs.posix/s30.exp create mode 100644 xargs/testsuite/xargs.posix/s30.xo create mode 100644 xargs/testsuite/xargs.posix/s47.exp create mode 100644 xargs/testsuite/xargs.posix/s47.xo create mode 100644 xargs/testsuite/xargs.posix/s470.exp create mode 100644 xargs/testsuite/xargs.posix/s470.xo create mode 100644 xargs/testsuite/xargs.posix/s48.exp create mode 100644 xargs/testsuite/xargs.posix/s48.xo create mode 100644 xargs/testsuite/xargs.posix/s6.exp create mode 100644 xargs/testsuite/xargs.posix/savannah-11865.exp create mode 100644 xargs/testsuite/xargs.posix/savannah-11865.xo create mode 100644 xargs/testsuite/xargs.posix/space-I.exp create mode 100644 xargs/testsuite/xargs.posix/space.exp create mode 100644 xargs/testsuite/xargs.posix/space.xo create mode 100644 xargs/testsuite/xargs.posix/sv-bug-18714.exp create mode 100644 xargs/testsuite/xargs.posix/sv-bug-18714.xo create mode 100644 xargs/testsuite/xargs.posix/sv-bug-18714b.exp create mode 100644 xargs/testsuite/xargs.posix/sv-bug-18714b.xo create mode 100644 xargs/testsuite/xargs.posix/sv-bug-20273.exp create mode 100644 xargs/testsuite/xargs.posix/sv-bug-20273.xo create mode 100644 xargs/testsuite/xargs.posix/uc_L2.exp create mode 100644 xargs/testsuite/xargs.posix/uc_L2.xo create mode 100644 xargs/testsuite/xargs.posix/unmatched-n2-x.exp create mode 100644 xargs/testsuite/xargs.posix/unmatched.exp create mode 100644 xargs/testsuite/xargs.posix/unmatched.xo create mode 100644 xargs/testsuite/xargs.posix/unmatched2.exp create mode 100644 xargs/testsuite/xargs.posix/unmatched2.xo create mode 100644 xargs/testsuite/xargs.sysv/e.exp create mode 100644 xargs/testsuite/xargs.sysv/e.xo create mode 100644 xargs/testsuite/xargs.sysv/eEOF.exp create mode 100644 xargs/testsuite/xargs.sysv/eEOF.xo create mode 100644 xargs/testsuite/xargs.sysv/empty-t.exp create mode 100644 xargs/testsuite/xargs.sysv/empty-t.xe create mode 100644 xargs/testsuite/xargs.sysv/empty-t.xo create mode 100644 xargs/testsuite/xargs.sysv/empty_def-t.exp create mode 100644 xargs/testsuite/xargs.sysv/empty_def-t.xe create mode 100644 xargs/testsuite/xargs.sysv/empty_def-t.xo create mode 100644 xargs/testsuite/xargs.sysv/eof1.exp create mode 100644 xargs/testsuite/xargs.sysv/eof1.xo create mode 100644 xargs/testsuite/xargs.sysv/iARG.exp create mode 100644 xargs/testsuite/xargs.sysv/iARG.xo create mode 100644 xargs/testsuite/xargs.sysv/idef-s26.exp create mode 100644 xargs/testsuite/xargs.sysv/idef-s26.xo create mode 100644 xargs/testsuite/xargs.sysv/idef.exp create mode 100644 xargs/testsuite/xargs.sysv/idef.xo create mode 100644 xargs/testsuite/xargs.sysv/iquotes.exp create mode 100644 xargs/testsuite/xargs.sysv/iquotes.xo create mode 100644 xargs/testsuite/xargs.sysv/l1.exp create mode 100644 xargs/testsuite/xargs.sysv/l1.xo create mode 100644 xargs/testsuite/xargs.sysv/l1_2.exp create mode 100644 xargs/testsuite/xargs.sysv/l1_2.xo create mode 100644 xargs/testsuite/xargs.sysv/l1n4.exp create mode 100644 xargs/testsuite/xargs.sysv/l1n4.xo create mode 100644 xargs/testsuite/xargs.sysv/lc_l2.exp create mode 100644 xargs/testsuite/xargs.sysv/lc_l2.xo create mode 100644 xargs/testsuite/xargs.sysv/s30-t.exp create mode 100644 xargs/testsuite/xargs.sysv/s30-t.xe create mode 100644 xargs/testsuite/xargs.sysv/s30-t.xo create mode 100644 xargs/testsuite/xargs.sysv/space-t.exp create mode 100644 xargs/testsuite/xargs.sysv/space-t.xe create mode 100644 xargs/testsuite/xargs.sysv/space-t.xo create mode 100644 xargs/testsuite/xargs.sysv/sv-bug-18713.exp create mode 100644 xargs/testsuite/xargs.sysv/sv-bug-18713.xo create mode 100644 xargs/testsuite/xargs.sysv/trace.exp create mode 100644 xargs/testsuite/xargs.sysv/trace.xe create mode 100644 xargs/testsuite/xargs.sysv/trace.xo create mode 100644 xargs/xargs.1 create mode 100644 xargs/xargs.c diff --git a/.cvsignore b/.cvsignore new file mode 100644 index 0000000..e8fb221 --- /dev/null +++ b/.cvsignore @@ -0,0 +1,21 @@ +Makefile +Makefile.in +aclocal.m4 +build +config.cache +autom4te.cache +config.h +config.h.in +configure +config.log +config.status +stamp-h1 +config.sub +config.rpath +config.guess +gnulib +install-sh +link-warning.h +gnulib-cvs +tests +findutils-* diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2b960a1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +Makefile +Makefile.in +aclocal.m4 +build +config.cache +autom4te.cache +config.h +config.h.in +configure +config.log +config.status +stamp-h1 +config.sub +config.rpath +config.guess +gnulib +install-sh +link-warning.h +gnulib-cvs +tests +*~ +patches + diff --git a/ABOUT-NLS b/ABOUT-NLS new file mode 100644 index 0000000..e32d52d --- /dev/null +++ b/ABOUT-NLS @@ -0,0 +1,996 @@ +1 Notes on the Free Translation Project +*************************************** + +Free software is going international! The Free Translation Project is +a way to get maintainers of free software, translators, and users all +together, so that free software will gradually become able to speak many +languages. A few packages already provide translations for their +messages. + + If you found this `ABOUT-NLS' file inside a distribution, you may +assume that the distributed package does use GNU `gettext' internally, +itself available at your nearest GNU archive site. But you do _not_ +need to install GNU `gettext' prior to configuring, installing or using +this package with messages translated. + + Installers will find here some useful hints. These notes also +explain how users should proceed for getting the programs to use the +available translations. They tell how people wanting to contribute and +work on translations can contact the appropriate team. + + When reporting bugs in the `intl/' directory or bugs which may be +related to internationalization, you should tell about the version of +`gettext' which is used. The information can be found in the +`intl/VERSION' file, in internationalized packages. + +1.1 Quick configuration advice +============================== + +If you want to exploit the full power of internationalization, you +should configure it using + + ./configure --with-included-gettext + +to force usage of internationalizing routines provided within this +package, despite the existence of internationalizing capabilities in the +operating system where this package is being installed. So far, only +the `gettext' implementation in the GNU C library version 2 provides as +many features (such as locale alias, message inheritance, automatic +charset conversion or plural form handling) as the implementation here. +It is also not possible to offer this additional functionality on top +of a `catgets' implementation. Future versions of GNU `gettext' will +very likely convey even more functionality. So it might be a good idea +to change to GNU `gettext' as soon as possible. + + So you need _not_ provide this option if you are using GNU libc 2 or +you have installed a recent copy of the GNU gettext package with the +included `libintl'. + +1.2 INSTALL Matters +=================== + +Some packages are "localizable" when properly installed; the programs +they contain can be made to speak your own native language. Most such +packages use GNU `gettext'. Other packages have their own ways to +internationalization, predating GNU `gettext'. + + By default, this package will be installed to allow translation of +messages. It will automatically detect whether the system already +provides the GNU `gettext' functions. If not, the included GNU +`gettext' library will be used. This library is wholly contained +within this package, usually in the `intl/' subdirectory, so prior +installation of the GNU `gettext' package is _not_ required. +Installers may use special options at configuration time for changing +the default behaviour. The commands: + + ./configure --with-included-gettext + ./configure --disable-nls + +will, respectively, bypass any pre-existing `gettext' to use the +internationalizing routines provided within this package, or else, +_totally_ disable translation of messages. + + When you already have GNU `gettext' installed on your system and run +configure without an option for your new package, `configure' will +probably detect the previously built and installed `libintl.a' file and +will decide to use this. This might not be desirable. You should use +the more recent version of the GNU `gettext' library. I.e. if the file +`intl/VERSION' shows that the library which comes with this package is +more recent, you should use + + ./configure --with-included-gettext + +to prevent auto-detection. + + The configuration process will not test for the `catgets' function +and therefore it will not be used. The reason is that even an +emulation of `gettext' on top of `catgets' could not provide all the +extensions of the GNU `gettext' library. + + Internationalized packages usually have many `po/LL.po' files, where +LL gives an ISO 639 two-letter code identifying the language. Unless +translations have been forbidden at `configure' time by using the +`--disable-nls' switch, all available translations are installed +together with the package. However, the environment variable `LINGUAS' +may be set, prior to configuration, to limit the installed set. +`LINGUAS' should then contain a space separated list of two-letter +codes, stating which languages are allowed. + +1.3 Using This Package +====================== + +As a user, if your language has been installed for this package, you +only have to set the `LANG' environment variable to the appropriate +`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, +and `CC' is an ISO 3166 two-letter country code. For example, let's +suppose that you speak German and live in Germany. At the shell +prompt, merely execute `setenv LANG de_DE' (in `csh'), +`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). +This can be done from your `.login' or `.profile' file, once and for +all. + + You might think that the country code specification is redundant. +But in fact, some languages have dialects in different countries. For +example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The +country code serves to distinguish the dialects. + + The locale naming convention of `LL_CC', with `LL' denoting the +language and `CC' denoting the country, is the one use on systems based +on GNU libc. On other systems, some variations of this scheme are +used, such as `LL' or `LL_CC.ENCODING'. You can get the list of +locales supported by your system for your country by running the command +`locale -a | grep '^LL''. + + Not all programs have translations for all languages. By default, an +English message is shown in place of a nonexistent translation. If you +understand other languages, you can set up a priority list of languages. +This is done through a different environment variable, called +`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' +for the purpose of message handling, but you still need to have `LANG' +set to the primary language; this is required by other parts of the +system libraries. For example, some Swedish users who would rather +read translations in German than English for when Swedish is not +available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. + + Special advice for Norwegian users: The language code for Norwegian +bokma*l changed from `no' to `nb' recently (in 2003). During the +transition period, while some message catalogs for this language are +installed under `nb' and some older ones under `no', it's recommended +for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and +older translations are used. + + In the `LANGUAGE' environment variable, but not in the `LANG' +environment variable, `LL_CC' combinations can be abbreviated as `LL' +to denote the language's main dialect. For example, `de' is equivalent +to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' +(Portuguese as spoken in Portugal) in this context. + +1.4 Translating Teams +===================== + +For the Free Translation Project to be a success, we need interested +people who like their own language and write it well, and who are also +able to synergize with other translators speaking the same language. +Each translation team has its own mailing list. The up-to-date list of +teams can be found at the Free Translation Project's homepage, +`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams" +area. + + If you'd like to volunteer to _work_ at translating messages, you +should become a member of the translating team for your own language. +The subscribing address is _not_ the same as the list itself, it has +`-request' appended. For example, speakers of Swedish can send a +message to `sv-request@li.org', having this message body: + + subscribe + + Keep in mind that team members are expected to participate +_actively_ in translations, or at solving translational difficulties, +rather than merely lurking around. If your team does not exist yet and +you want to start one, or if you are unsure about what to do or how to +get started, please write to `translation@iro.umontreal.ca' to reach the +coordinator for all translator teams. + + The English team is special. It works at improving and uniformizing +the terminology in use. Proven linguistic skill are praised more than +programming skill, here. + +1.5 Available Packages +====================== + +Languages are not equally supported in all packages. The following +matrix shows the current state of internationalization, as of May 2005. +The matrix shows, in regard of each package, for which languages PO +files have been submitted to translation coordination, with a +translation percentage of at least 50%. + + Ready PO files af am ar az be bg bs ca cs cy da de el en en_GB + +-------------------------------------------------+ + GNUnet | | + a2ps | [] [] [] [] [] | + aegis | () | + ant-phone | () | + anubis | [] | + ap-utils | | + aspell | [] [] [] [] | + bash | [] [] | + batchelor | [] | + bfd | | + bibshelf | [] | + binutils | [] | + bison | [] [] | + bluez-pin | [] [] [] [] | + clisp | [] [] | + console-tools | [] [] | + coreutils | [] [] [] [] | + cpio | | + cpplib | [] [] [] | + darkstat | [] () [] | + dialog | [] [] [] [] [] [] | + diffutils | [] [] [] [] [] | + doodle | [] | + e2fsprogs | [] [] | + enscript | [] [] [] [] | + error | [] [] [] [] | + fetchmail | [] [] () [] | + fileutils | [] [] | + findutils | [] [] [] | + flex | [] [] [] | + fslint | [] | + gas | | + gawk | [] [] [] | + gbiff | [] | + gcal | [] | + gcc | [] | + gettext-examples | [] [] [] [] | + gettext-runtime | [] [] [] [] | + gettext-tools | [] [] | + gimp-print | [] [] [] [] | + gip | | + gliv | [] | + glunarclock | | + gmult | [] [] | + gnubiff | () | + gnucash | [] () () [] | + gnucash-glossary | [] () | + gpe-aerial | [] [] | + gpe-beam | [] [] | + gpe-calendar | [] [] | + gpe-clock | [] [] | + gpe-conf | [] [] | + gpe-contacts | | + gpe-edit | [] | + gpe-go | [] | + gpe-login | [] [] | + gpe-ownerinfo | [] [] | + gpe-sketchbook | [] [] | + gpe-su | [] [] | + gpe-taskmanager | [] [] | + gpe-timesheet | [] | + gpe-today | [] [] | + gpe-todo | [] [] | + gphoto2 | [] [] [] [] | + gprof | [] [] | + gpsdrive | () () | + gramadoir | [] [] | + grep | [] [] [] [] [] [] | + gretl | | + gsasl | [] | + gss | | + gst-plugins | [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] | + gtick | [] () | + gtkspell | [] [] [] | + hello | [] [] [] [] | + id-utils | [] [] | + impost | | + indent | [] [] | + iso_3166 | | + iso_3166_1 | [] [] [] [] [] | + iso_3166_2 | | + iso_3166_3 | [] | + iso_4217 | | + iso_639 | | + jpilot | [] | + jtag | | + jwhois | | + kbd | [] [] [] [] | + latrine | () | + ld | [] | + libc | [] [] [] [] [] | + libextractor | | + libgpewidget | [] [] [] | + libgphoto2 | [] | + libgphoto2_port | [] | + libgsasl | | + libiconv | [] [] [] [] [] | + libidn | | + lifelines | [] () | + lilypond | [] | + lingoteach | | + lynx | [] [] [] [] | + m4 | [] [] [] [] | + mailutils | [] | + make | [] [] | + man-db | [] () [] [] | + minicom | [] [] | + mysecretdiary | [] [] | + nano | [] () [] | + nano_1_0 | [] () [] [] | + opcodes | [] | + parted | [] [] [] [] | + psmisc | | + ptx | [] [] [] | + pwdutils | | + python | | + radius | [] | + recode | [] [] [] [] [] | + rpm | [] [] | + screem | | + scrollkeeper | [] [] [] [] [] [] [] [] | + sed | [] [] | + sh-utils | [] [] | + shared-mime-info | [] [] | + sharutils | [] [] [] [] [] | + silky | | + skencil | [] () | + sketch | [] () | + solfege | [] | + soundtracker | [] [] | + sp | [] | + stardict | [] | + tar | | + texinfo | [] [] | + textutils | [] [] [] | + tin | () () | + tp-robot | [] | + tuxpaint | [] [] [] [] [] [] [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] [] [] | + vorbis-tools | [] [] [] [] | + wastesedge | () | + wdiff | [] [] [] [] | + wget | | + xchat | [] [] [] [] [] | + xkeyboard-config | | + xpad | | + +-------------------------------------------------+ + af am ar az be bg bs ca cs cy da de el en en_GB + 10 0 0 2 7 5 0 40 43 2 51 91 19 1 14 + + eo es et eu fa fi fr ga gl he hi hr hu id is + +-----------------------------------------------+ + GNUnet | | + a2ps | [] [] [] | + aegis | | + ant-phone | [] | + anubis | [] | + ap-utils | [] | + aspell | [] [] | + bash | [] [] [] [] | + batchelor | [] [] | + bfd | [] | + bibshelf | [] [] | + binutils | [] [] | + bison | [] [] [] [] [] | + bluez-pin | [] [] [] [] [] [] | + clisp | [] [] | + console-tools | | + coreutils | [] [] [] [] [] | + cpio | [] [] | + cpplib | [] [] | + darkstat | [] () [] [] [] | + dialog | [] [] [] [] [] [] [] | + diffutils | [] [] [] [] [] [] [] [] [] | + doodle | [] | + e2fsprogs | [] [] | + enscript | [] [] | + error | [] [] [] [] [] | + fetchmail | [] | + fileutils | [] [] [] [] [] | + findutils | [] [] [] [] | + flex | [] [] [] | + fslint | [] | + gas | [] [] | + gawk | [] [] [] [] | + gbiff | [] | + gcal | [] [] | + gcc | [] | + gettext-examples | [] [] [] | + gettext-runtime | [] [] [] [] [] | + gettext-tools | [] [] | + gimp-print | [] [] | + gip | [] [] [] | + gliv | () | + glunarclock | [] [] [] | + gmult | [] [] | + gnubiff | () | + gnucash | [] () | + gnucash-glossary | [] | + gpe-aerial | [] [] | + gpe-beam | [] [] | + gpe-calendar | [] [] [] [] | + gpe-clock | [] [] [] | + gpe-conf | [] | + gpe-contacts | [] | + gpe-edit | [] [] | + gpe-go | [] [] | + gpe-login | [] [] [] | + gpe-ownerinfo | [] [] [] [] [] | + gpe-sketchbook | [] [] | + gpe-su | [] [] [] | + gpe-taskmanager | [] [] [] | + gpe-timesheet | [] [] [] [] | + gpe-today | [] [] [] [] | + gpe-todo | [] [] [] | + gphoto2 | [] [] [] [] | + gprof | [] [] [] | + gpsdrive | () () [] | + gramadoir | [] [] | + grep | [] [] [] [] [] [] [] [] [] [] [] | + gretl | [] [] | + gsasl | [] [] [] | + gss | [] | + gst-plugins | [] [] | + gstreamer | | + gtick | [] [] [] [] | + gtkspell | [] [] [] [] [] | + hello | [] [] [] [] [] [] [] [] [] [] [] [] [] | + id-utils | [] [] [] | + impost | [] [] | + indent | [] [] [] [] [] [] [] [] [] [] | + iso_3166 | [] [] [] | + iso_3166_1 | [] [] [] [] [] [] [] | + iso_3166_2 | [] | + iso_3166_3 | [] | + iso_4217 | [] [] [] | + iso_639 | [] [] [] [] | + jpilot | [] [] | + jtag | [] | + jwhois | [] [] [] [] | + kbd | [] [] | + latrine | [] [] | + ld | [] [] | + libc | [] [] [] [] [] | + libextractor | | + libgpewidget | [] [] [] [] [] | + libgphoto2 | [] [] [] | + libgphoto2_port | [] | + libgsasl | [] [] | + libiconv | [] [] [] [] [] [] [] [] [] [] | + libidn | [] [] | + lifelines | () | + lilypond | | + lingoteach | [] [] | + lynx | [] [] | + m4 | [] [] [] [] | + mailutils | [] [] | + make | [] [] [] [] [] [] [] | + man-db | () | + minicom | [] [] [] [] | + mysecretdiary | [] [] [] | + nano | [] [] () [] | + nano_1_0 | [] [] [] [] | + opcodes | [] [] [] | + parted | [] [] [] | + psmisc | [] | + ptx | [] [] [] [] [] [] [] [] [] | + pwdutils | | + python | | + radius | [] [] | + recode | [] [] [] [] [] [] [] | + rpm | [] | + screem | | + scrollkeeper | [] [] [] | + sed | [] [] [] [] [] [] | + sh-utils | [] [] [] [] [] [] | + shared-mime-info | [] [] [] [] [] [] | + sharutils | [] [] [] [] [] [] | + silky | [] | + skencil | [] [] | + sketch | [] [] | + solfege | | + soundtracker | [] [] | + sp | [] | + stardict | [] | + tar | [] [] [] [] | + texinfo | [] [] [] | + textutils | [] [] [] [] [] | + tin | [] () | + tp-robot | [] [] | + tuxpaint | [] [] [] [] [] [] [] [] | + unicode-han-tra... | | + unicode-transla... | [] [] | + util-linux | [] [] [] [] [] | + vorbis-tools | [] [] | + wastesedge | () | + wdiff | [] [] [] [] [] [] [] | + wget | [] [] [] [] | + xchat | [] [] [] [] [] | + xkeyboard-config | | + xpad | [] [] [] | + +-----------------------------------------------+ + eo es et eu fa fi fr ga gl he hi hr hu id is + 15 85 21 15 2 35 115 45 16 8 1 6 40 27 1 + + it ja ko ku lg lt lv mk mn ms mt nb nl nn no nso + +--------------------------------------------------+ + GNUnet | | + a2ps | () () [] [] () | + aegis | () | + ant-phone | [] | + anubis | [] [] [] | + ap-utils | | + aspell | [] [] | + bash | [] | + batchelor | [] | + bfd | | + bibshelf | [] | + binutils | | + bison | [] [] [] [] | + bluez-pin | [] [] | + clisp | [] | + console-tools | | + coreutils | [] [] | + cpio | | + cpplib | [] | + darkstat | [] [] | + dialog | [] [] | + diffutils | [] [] [] [] | + doodle | [] | + e2fsprogs | [] | + enscript | [] | + error | [] | + fetchmail | [] [] | + fileutils | [] [] [] | + findutils | [] [] | + flex | [] [] | + fslint | [] | + gas | | + gawk | [] [] | + gbiff | [] | + gcal | | + gcc | | + gettext-examples | [] [] [] | + gettext-runtime | [] [] [] [] | + gettext-tools | [] [] [] | + gimp-print | [] [] | + gip | [] | + gliv | [] | + glunarclock | [] [] | + gmult | [] [] | + gnubiff | () | + gnucash | [] () () [] | + gnucash-glossary | [] [] | + gpe-aerial | [] | + gpe-beam | [] | + gpe-calendar | [] | + gpe-clock | [] | + gpe-conf | [] | + gpe-contacts | | + gpe-edit | [] | + gpe-go | [] | + gpe-login | [] | + gpe-ownerinfo | [] | + gpe-sketchbook | [] | + gpe-su | [] | + gpe-taskmanager | [] [] | + gpe-timesheet | [] | + gpe-today | [] | + gpe-todo | [] | + gphoto2 | [] [] [] | + gprof | | + gpsdrive | () () () () | + gramadoir | () | + grep | [] [] [] [] | + gretl | [] | + gsasl | [] | + gss | | + gst-plugins | [] [] | + gstreamer | [] [] | + gtick | [] [] | + gtkspell | [] [] [] | + hello | [] [] [] [] [] [] [] [] [] | + id-utils | [] [] | + impost | | + indent | [] [] [] | + iso_3166 | [] | + iso_3166_1 | [] [] | + iso_3166_2 | [] | + iso_3166_3 | [] | + iso_4217 | [] [] [] | + iso_639 | [] [] [] | + jpilot | () () () | + jtag | | + jwhois | [] [] | + kbd | [] | + latrine | [] [] | + ld | | + libc | [] [] [] [] [] | + libextractor | | + libgpewidget | [] | + libgphoto2 | [] [] | + libgphoto2_port | [] [] | + libgsasl | [] | + libiconv | [] [] | + libidn | [] | + lifelines | [] | + lilypond | | + lingoteach | [] [] | + lynx | [] [] [] | + m4 | [] [] | + mailutils | | + make | [] [] [] | + man-db | () | + minicom | [] | + mysecretdiary | [] | + nano | [] [] [] | + nano_1_0 | [] [] [] [] | + opcodes | [] | + parted | [] [] [] [] | + psmisc | [] [] [] | + ptx | [] [] [] | + pwdutils | | + python | | + radius | | + recode | [] [] | + rpm | [] [] | + screem | [] | + scrollkeeper | [] [] [] | + sed | [] [] | + sh-utils | [] [] [] | + shared-mime-info | [] [] [] [] | + sharutils | [] [] [] | + silky | [] | + skencil | | + sketch | | + solfege | [] [] [] | + soundtracker | [] | + sp | () | + stardict | [] [] | + tar | [] [] [] | + texinfo | [] [] [] | + textutils | [] [] [] | + tin | | + tp-robot | [] | + tuxpaint | [] [] [] [] [] [] [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] [] | + vorbis-tools | [] | + wastesedge | [] | + wdiff | [] [] [] | + wget | [] | + xchat | [] [] [] [] [] | + xkeyboard-config | [] | + xpad | [] | + +--------------------------------------------------+ + it ja ko ku lg lt lv mk mn ms mt nb nl nn no nso + 46 35 11 2 1 1 2 2 3 11 0 15 96 7 5 0 + + or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv + +----------------------------------------------+ + GNUnet | | + a2ps | () [] [] [] [] [] [] | + aegis | () () | + ant-phone | [] | + anubis | [] [] [] | + ap-utils | () | + aspell | [] [] | + bash | [] [] [] | + batchelor | [] | + bfd | | + bibshelf | | + binutils | [] [] | + bison | [] [] [] [] [] | + bluez-pin | [] [] [] [] [] [] [] [] | + clisp | [] | + console-tools | [] | + coreutils | [] [] [] [] | + cpio | [] [] | + cpplib | | + darkstat | [] [] [] [] [] [] | + dialog | [] [] [] [] [] [] [] | + diffutils | [] [] [] [] [] [] | + doodle | [] | + e2fsprogs | [] [] | + enscript | [] [] [] [] | + error | [] [] [] | + fetchmail | [] [] [] [] | + fileutils | [] [] [] [] [] | + findutils | [] [] [] [] [] [] | + flex | [] [] [] [] [] | + fslint | [] [] [] | + gas | | + gawk | [] [] [] [] | + gbiff | [] | + gcal | [] | + gcc | | + gettext-examples | [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] [] | + gettext-tools | [] [] [] [] [] [] [] | + gimp-print | [] [] | + gip | [] [] [] | + gliv | [] [] [] | + glunarclock | [] [] [] [] [] [] | + gmult | [] [] [] [] | + gnubiff | () [] | + gnucash | () [] [] [] [] | + gnucash-glossary | [] [] [] | + gpe-aerial | [] [] [] [] [] [] | + gpe-beam | [] [] [] [] [] [] | + gpe-calendar | [] [] [] [] [] [] [] | + gpe-clock | [] [] [] [] [] [] [] | + gpe-conf | [] [] [] [] [] [] | + gpe-contacts | [] [] [] [] | + gpe-edit | [] [] [] [] [] [] [] | + gpe-go | [] [] [] [] [] | + gpe-login | [] [] [] [] [] [] [] | + gpe-ownerinfo | [] [] [] [] [] [] [] | + gpe-sketchbook | [] [] [] [] [] [] [] | + gpe-su | [] [] [] [] [] [] [] | + gpe-taskmanager | [] [] [] [] [] [] [] | + gpe-timesheet | [] [] [] [] [] [] [] | + gpe-today | [] [] [] [] [] [] [] | + gpe-todo | [] [] [] [] [] [] [] [] | + gphoto2 | [] [] [] [] | + gprof | [] [] [] | + gpsdrive | [] [] | + gramadoir | [] | + grep | [] [] [] [] [] [] [] | + gretl | [] | + gsasl | [] [] [] [] [] | + gss | [] [] [] | + gst-plugins | [] [] [] [] | + gstreamer | [] [] [] [] | + gtick | [] [] [] | + gtkspell | [] [] [] [] [] [] | + hello | [] [] [] [] [] [] [] | + id-utils | [] [] [] [] | + impost | | + indent | [] [] [] [] [] [] | + iso_3166 | [] [] [] [] [] | + iso_3166_1 | [] [] [] [] | + iso_3166_2 | | + iso_3166_3 | [] [] [] | + iso_4217 | [] [] | + iso_639 | [] [] [] | + jpilot | | + jtag | [] | + jwhois | [] [] [] () () | + kbd | [] [] [] | + latrine | [] [] | + ld | [] | + libc | [] [] [] [] [] | + libextractor | [] | + libgpewidget | [] [] [] [] [] [] | + libgphoto2 | [] [] | + libgphoto2_port | [] | + libgsasl | [] [] [] | + libiconv | [] [] [] [] [] [] [] [] [] [] | + libidn | [] () | + lifelines | [] [] | + lilypond | | + lingoteach | [] | + lynx | [] [] [] | + m4 | [] [] [] [] [] | + mailutils | [] [] [] | + make | [] [] [] [] | + man-db | [] [] | + minicom | [] [] [] [] | + mysecretdiary | [] [] [] [] | + nano | [] [] [] | + nano_1_0 | [] [] [] [] | + opcodes | [] [] | + parted | [] [] [] [] | + psmisc | [] [] | + ptx | [] [] [] [] [] [] | + pwdutils | [] | + python | | + radius | [] [] | + recode | [] [] [] [] [] [] | + rpm | [] [] [] [] | + screem | | + scrollkeeper | [] [] [] [] [] [] [] | + sed | [] [] [] [] [] [] [] [] | + sh-utils | [] [] [] | + shared-mime-info | [] [] [] [] [] [] | + sharutils | [] [] [] | + silky | [] | + skencil | [] [] [] | + sketch | [] [] [] | + solfege | | + soundtracker | [] [] | + sp | | + stardict | [] [] | + tar | [] [] [] [] | + texinfo | [] [] [] [] | + textutils | [] [] [] | + tin | | + tp-robot | [] | + tuxpaint | [] [] [] [] [] [] [] [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] [] | + vorbis-tools | [] [] | + wastesedge | | + wdiff | [] [] [] [] [] [] | + wget | | + xchat | [] [] [] [] [] [] [] | + xkeyboard-config | | + xpad | | + +----------------------------------------------+ + or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv + 1 3 47 29 57 6 78 73 5 44 12 12 50 85 + + ta tg th tk tr uk ven vi wa xh zh_CN zh_TW zu + +-----------------------------------------------+ + GNUnet | | 0 + a2ps | [] [] [] | 19 + aegis | | 0 + ant-phone | [] [] | 5 + anubis | [] [] [] | 11 + ap-utils | () [] | 2 + aspell | [] [] [] | 13 + bash | [] | 11 + batchelor | [] [] | 7 + bfd | | 1 + bibshelf | [] | 5 + binutils | [] | 6 + bison | [] [] | 18 + bluez-pin | [] [] [] [] [] | 25 + clisp | | 7 + console-tools | [] [] | 5 + coreutils | [] [] | 17 + cpio | [] [] [] | 7 + cpplib | [] [] | 8 + darkstat | [] () () | 15 + dialog | [] [] [] | 25 + diffutils | [] [] [] [] | 28 + doodle | [] | 5 + e2fsprogs | [] | 8 + enscript | [] | 12 + error | [] [] [] | 16 + fetchmail | [] | 12 + fileutils | [] [] [] | 18 + findutils | [] [] | 17 + flex | [] [] | 15 + fslint | [] | 7 + gas | [] | 3 + gawk | [] | 14 + gbiff | [] | 5 + gcal | [] | 5 + gcc | [] [] | 4 + gettext-examples | [] [] [] [] [] | 21 + gettext-runtime | [] [] [] [] [] | 25 + gettext-tools | [] [] [] [] [] | 19 + gimp-print | [] | 11 + gip | [] | 8 + gliv | [] [] | 7 + glunarclock | [] [] | 13 + gmult | [] [] [] | 13 + gnubiff | [] | 3 + gnucash | () [] | 10 + gnucash-glossary | [] [] | 9 + gpe-aerial | [] [] | 13 + gpe-beam | [] [] | 13 + gpe-calendar | [] [] [] [] | 18 + gpe-clock | [] [] [] [] | 17 + gpe-conf | [] [] | 12 + gpe-contacts | [] [] | 7 + gpe-edit | [] [] [] [] | 15 + gpe-go | [] [] | 11 + gpe-login | [] [] [] [] [] | 18 + gpe-ownerinfo | [] [] [] [] | 19 + gpe-sketchbook | [] [] | 14 + gpe-su | [] [] [] | 16 + gpe-taskmanager | [] [] [] | 17 + gpe-timesheet | [] [] [] [] | 17 + gpe-today | [] [] [] [] [] | 19 + gpe-todo | [] [] [] | 17 + gphoto2 | [] [] [] | 18 + gprof | [] [] | 10 + gpsdrive | | 3 + gramadoir | [] | 6 + grep | [] [] [] [] | 32 + gretl | | 4 + gsasl | [] [] | 12 + gss | [] | 5 + gst-plugins | [] [] [] | 17 + gstreamer | [] [] [] [] | 15 + gtick | [] | 11 + gtkspell | [] [] [] [] | 21 + hello | [] [] [] [] | 37 + id-utils | [] [] | 13 + impost | [] | 3 + indent | [] [] [] [] | 25 + iso_3166 | [] [] [] | 12 + iso_3166_1 | [] [] | 20 + iso_3166_2 | | 2 + iso_3166_3 | [] [] | 8 + iso_4217 | [] [] | 10 + iso_639 | [] [] | 12 + jpilot | [] [] [] | 6 + jtag | | 2 + jwhois | [] [] [] | 12 + kbd | [] [] | 12 + latrine | [] [] | 8 + ld | [] | 5 + libc | [] [] | 22 + libextractor | | 1 + libgpewidget | [] [] | 17 + libgphoto2 | [] | 9 + libgphoto2_port | | 5 + libgsasl | [] | 7 + libiconv | [] [] [] [] [] | 32 + libidn | [] [] | 6 + lifelines | | 4 + lilypond | | 1 + lingoteach | [] | 6 + lynx | [] [] [] | 15 + m4 | [] [] | 17 + mailutils | [] | 7 + make | [] [] | 18 + man-db | | 5 + minicom | | 11 + mysecretdiary | [] [] | 12 + nano | [] [] | 13 + nano_1_0 | [] [] [] | 18 + opcodes | [] [] | 9 + parted | [] [] [] | 18 + psmisc | [] | 7 + ptx | [] [] | 23 + pwdutils | | 1 + python | | 0 + radius | [] | 6 + recode | [] [] | 22 + rpm | [] [] | 11 + screem | | 1 + scrollkeeper | [] [] [] | 24 + sed | [] [] [] | 21 + sh-utils | [] | 15 + shared-mime-info | [] [] [] | 21 + sharutils | [] [] [] | 20 + silky | | 3 + skencil | | 6 + sketch | | 6 + solfege | | 4 + soundtracker | [] | 8 + sp | [] | 3 + stardict | [] [] [] [] | 10 + tar | [] [] [] [] | 15 + texinfo | [] [] | 14 + textutils | [] [] [] | 17 + tin | | 1 + tp-robot | [] [] [] | 8 + tuxpaint | [] [] [] [] | 34 + unicode-han-tra... | | 0 + unicode-transla... | | 2 + util-linux | [] [] [] | 18 + vorbis-tools | [] | 10 + wastesedge | | 1 + wdiff | [] [] | 22 + wget | [] [] | 7 + xchat | [] [] [] [] | 26 + xkeyboard-config | [] | 2 + xpad | [] | 5 + +-----------------------------------------------+ + 73 teams ta tg th tk tr uk ven vi wa xh zh_CN zh_TW zu + 149 domains 0 0 0 1 77 30 0 92 16 0 42 32 0 1746 + + Some counters in the preceding matrix are higher than the number of +visible blocks let us expect. This is because a few extra PO files are +used for implementing regional variants of languages, or language +dialects. + + For a PO file in the matrix above to be effective, the package to +which it applies should also have been internationalized and +distributed as such by its maintainer. There might be an observable +lag between the mere existence a PO file and its wide availability in a +distribution. + + If May 2005 seems to be old, you may fetch a more recent copy of +this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date +matrix with full percentage details can be found at +`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. + +1.6 Using `gettext' in new packages +=================================== + +If you are writing a freely available program and want to +internationalize it you are welcome to use GNU `gettext' in your +package. Of course you have to respect the GNU Library General Public +License which covers the use of the GNU `gettext' library. This means +in particular that even non-free programs can use `libintl' as a shared +library, whereas only free software can use `libintl' as a static +library or use modified versions of `libintl'. + + Once the sources are changed appropriately and the setup can handle +the use of `gettext' the only thing missing are the translations. The +Free Translation Project is also available for packages which are not +developed inside the GNU project. Therefore the information given above +applies also for every other Free Software Project. Contact +`translation@iro.umontreal.ca' to make the `.pot' files available to +the translation teams. + diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..dba6791 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,35 @@ +AUTHORS of findutils + +I do not know the name of the original author of the findutils +package, but the authors of all the major components are known. Eric +B. Decker contributed GNU find and Michael Rendell contributed xargs. +James A. Woods contributed locate. + +Here are the names of some authors culled from ChangeLog and +miscellaneous other files. The main criterion for whether your name +ends up in this file or in THANKS is that the people with entries here +donated code or documentation which was significant enough to require +a copyright assignment. + +The locate program and its helper programs are derived (heavily +modified) from James Woods' public domain fast-find code, which is +also distributed with the 4.3BSD find. + +Eric B. Decker +Michael Rendell +David J. MacKenzie +Jim Meyering +Tim Wood +Kevin Dalley +Paul Eggert +James Youngman +Jay Plett +Paul Sheer +Dmitry V. Levin +Bas van Gompel +Eric Blake + +The current maintainer of the findutils package is James Youngman. +Questions about findutils should be addressed to the mailing list, + which, contrary to the impression given by its +name, is used for general discussion of the findutils package. diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..4432540 --- /dev/null +++ b/COPYING @@ -0,0 +1,676 @@ + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. + diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..1e2babe --- /dev/null +++ b/ChangeLog @@ -0,0 +1,7174 @@ +2007-11-25 James Youngman + + * doc/perm.texi (Mode Structure): Fix setgid/setuid typo. + +2007-11-24 James Youngman + + * doc/find.texi (Mode Bits): Correct the warning about the change + in behaviour of -perm /000 to indicate that the change has + happened now. This fixes Savannah bug #21628. + * NEWS: Mention this. + +2007-11-22 James Youngman + + POSIXLY_CORRECT turns off warnings. + * find/defs.h (struct options): Added member posixly_correct. + This is set when the POSIXLY_CORRECT environment variable is set. + * find/util.c (set_option_defaults): Set options.posixly_correct + if the POSIXLY_CORRECT environment variable is set. + (set_option_defaults): Turn off warnings when POSIXLY_CORRECT is + in force. + * find/find.1: Document this. + (Environment Variables): Likewise. + (Warning Messages): Likewise. + + Non-POSIX compliant arguments to -perm generate an error when + POSIXLY_CORRECT is set. + * find/parser.c (parse_table): Indicate which primaries are + defined by POSIX. + (non_posix_mode): New function; issues an error message when a + non-POSIX-compliant argument to -perm is used (and POSIXLY_CORRECT + is in force). + (parse_perm): Call non_posix_mode when a non-POSIX-compliant mode + argument is seen. + * find/testsuite/find.gnu/posix-perminvalid.exp: New file; tests + invalid arguments to -perm. + * find/testsuite/Makefile.am (EXTRA_DIST_EXP): Add + posix-perminvalid.exp. + * find/find.1: Document this. + * doc/find.texi (Mode Bits): Likewise + (Environment Variables): Likewise + + + * xargs/xargs.1: Options should be bold, not italic; filenames + should also be italic. OPTIONS should be a section, not a + subsection. In the description of --max-lines, "max-args" was + corrected to "max-lines". Turn off hyphenation in the SYNOPSIS + section. This fixes Savannah bug #21270. + +2007-11-13 James Youngman + + * NEWS, configure.ac: Prepare for the release of findutils-4.3.10. + + * import-gnulib.sh (usage): If the existing CVS working tree for + gnulib in the source tree does not yet point at the + git-cvs-pserver repository, move the old gnulib working tree out + of the way and do a fresh checkout. This fixes Savannah bug + #21568. + +2007-11-11 James Youngman + + + * configure.ac: Prepared for release of findutils-4.3.9. + * NEWS: Likewise. + + * po/POTFILES.in: Use gnulib/lib/getdate.y rather than + gnulib/lib/getdate.c, because the former is the source file, and + because without this change the update-po target of po/Makefile + fails. + + * import-gnulib.config (gnulib_version): Move to gnulib + 2007-11-10. + + * po/hu.po, po/nl.po: Updated from Translation Project. + +2007-09-08 James Youngman + + Better documentation on $PATH security checks. + * doc/find.texi (Single File): Better explanation of what makes + certain values of $PATH insecure. This fixes Savannah bug + #20951. + * find/find.1 (-execdir): Likewise. + + Document interaction of -depth/-delete/-prune. + * doc/find.texi (Directories): Mention that "-prune ... -delete" + will not do what you want and will cause the deletion of more + files than you probably intended. + (Delete Files): Likewise, suggest using "-depth" when testing + command lines you plan to eventually add "-delete" to. + (Cleaning Up): Add -depth explicitly to an example which uses + -delete. + * find/find.1 (-depth): Mention that -delete also implies -depth. + (-delete): Warn against putting -delete first. + (-prune): Also warn against -prune ... -delete. + NEWS: Mention these changes. + +2007-08-23 Eric Blake + + Pick up gnulib change to getline module. + * import-gnulib.config (gnulib_version): Bump date. + * locate/bigram.c: Use , not getline.h. + * locate/code.c: Likewise. + * locate/frcode.c: Likewise. + * locate/locate.c: Likewise. + + * po/ChangeLog: Delete, merge into this file. + +2007-08-23 James Youngman + + * po/nl.po: Updated from Translation Project + + * find/parser.c (check_path_safety): Assume the path is safe is + $PATH is not set. This avoids a segfault in that situation + and thus fixes Savannah bug #20834. + +2007-08-22 James Youngman + + * find/parser.c (parse_path): This is the 'canonical' name once + again. + (parse_wholename): This is not. + (parse_ipath): No longer deprecated. + * NEWS: Mention this. + +2007-08-22 Eric Blake + + Fix Savannah bug #20871. + * find/find.c (main): Remove bogus assertion. + * NEWS: Document the fix. + + Update to recent gnulib addition of idcache.h. + * lib/listfile.c (getuser, getgroup): Use header rather than + declaring things ourself. + * po/POTFILES.in (locate/frcode.c): Add missing file. + +2007-08-21 Eric Blake + + Fix for Savannah bug #20273, find -ok with seekable stdin. + * find/find.c (main): Use close_stdin, not close_stdout. + * import-gnulib.config (gnulib_version): Pick up yesno tests. + * NEWS: Document the change. + * build-aux/.cvsignore: Ignore compile. + +2007-08-20 Paul Eggert + and Eric Blake + + Improve translation of xstrtol messages. + * import-gnulib.config (destdir): Upgrade gnulib to 2007-08-11. + * locate/locate.c (dolocate): Adjust to API change of xstrtol + gnulib module. + * po/POTFILES.in: Likewise. + * NEWS: Document the enhancement. + +2007-08-20 James Youngman + + * doc/find.texi (Directories): Clarify that built commands which + have not been executed yet will be executed before find quits, + even with -quit. Also clarify the difference between -prune and + -quit. + +2007-08-18 Eric Blake + + Fix Savannah bug #20751. + * lib/listfile.c (list_file): Accomodate gnulib change of 3 Jul + 2006. + * NEWS: Document this. + Reported by Nigel Stepp. + * THANKS: Sort and update. + * AUTHORS: Add myself. + +2007-08-05 Eric Blake + + Fix Savannah bugs #20662, #20688. + * find/find.c (at_top): Avoid memory leak. + * find/pred.c (do_fprintf, pred_iname, pred_name): Likewise. + (pred_name_common): New function, factored from pred_iname and + pred_name. + * find/parser.c (check_name_arg): Let -nowarn silence -name /. + * locate/locate.c (visit_basename): Avoid memory leak. + * NEWS: Document the changes. + * doc/find.texi (Warning Messages): Document -nowarn's effect on + -name and -iname. + * find/testsuite/find.gnu/name-slash.exp: New test, to ensure + 20662 doesn't regress on '-name /', and that 20688 silences the + warning. + * find/testsuite/find.gnu/printf-slash.exp: Likewise. + * find/testsuite/find.gnu/name-slash.xo: Expected results. + * find/testsuite/find.gnu/printf-slash.xo: Likewise. + * find/testsuite/Makefile.am (EXTRA_DIST_XO, EXTRA_DIST_EXP): + Distribute new tests. + +2007-07-31 Eric Blake + + Allow choice of default arg size, Savannah bug #20594. + * configure.ac (DEFAULT_ARG_SIZE): Check environment for a default + size override. + * lib/buildcmd.c (bc_use_sensible_arg_max): Use default size from + configure, if requested. + * README (DEFAULT_ARG_SIZE): Mention the ability to tune this at + configure time. + * NEWS: Document the change. + +2007-07-29 James Youngman + + * po/tr.po: Updated from Translation Project. + +2007-07-26 Eric Blake + + * doc/.cvsignore: Ignore more generated documentation. + +2007-07-23 Eric Blake + + * find/parser.c (parse_version): Avoid compiler warning. + * locate/code.c (includes): Likewise. + +2007-07-22 Eric Blake + + * po/POTFILES.in: Add lib/findutils-version.c. + +2007-07-22 James Youngman + + * find/find.1: Corrected a number of typos and fixed up the + alphabetical section ordering. This fixes Savannah bug #20552. + + Version banners now comply with the GNU coding standard. + * find/parser.c (parse_version): Use display_findutils_version() + instead of printing the information manually. Don't include + gnulib-version.h since we no longer directly use that header. + * lib/findutils-version.c: Added + * lib/findutils-version.h: Added + * import-gnulib.config (modules): Added version-etc and + version-etc-fsf. + * lib/Makefile.am (libfind_a_SOURCES): added findutils-version.c. + * find/version.c: Removed + * find/Makefile.am: Remove version.c + * locate/Makefile.am: Don't link ../find/version.o + * xargs/Makefile.am: Ditto + * xargs/xargs.c (main): Use display_findutils_version() + * locate/code.c (main): Ditto + * locate/frcode.c (main): Ditto + * locate/locate.c (dolocate): Ditto + * locate/updatedb.sh (version): Display copyright information in + the right format. Also ensure that we exit with a nonzero status + if there was an output error for --help and --version. + * find/testsuite/config/unix.exp (find_version): Adjust for + --version format change + * locate/testsuite/config/unix.exp (locate_version): Ditto + * xargs/testsuite/config/unix.exp (xargs_version): Ditto + * NEWS: Mention the change + +2007-07-19 Eric Blake + + * po/POTFILES.in: Update to reflect current location of + translatable strings. + +2007-07-17 Eric Blake + + Ensure 'make distcheck' can pass on cygwin. + * configure.in: Rename... + * configure.ac: ...to this, to match automake recommendations. + * NEWS: Add release dates. + * doc/find-maint.texi: Remove trailing whitespace. + (Documentation): Document where release dates are usefully + recorded. + * locate/Makefile.am (AM_INSTALLCHECK_STD_OPTIONS_EXEMPT): Be + aware of .exe. + * .cvsignore: Ignore 'make dist' files. + * po/.cvsignore: Ignore remove-potcdate.sed. + +2007-07-14 Eric Blake + + * import-gnulib.config (gnulib_version): Bump date, to pick + up fix in canonicalize module testing. + +2007-07-06 James Youngman + + * po/uk.po, po/nl.po, po/vi.po: Updated from Translation Project. + +2007-07-04 James Youngman + + * NEWS: Fixed typos in description of bugfix for bug #20310. + +2007-07-03 James Youngman + + Fix Savannah bug #20310. + * m4/nullsort.m4: If we are cross compiling, assume "sort -z" does + not work on the target. + + Manpage improvements. + * find/find.1: More consistent use of quotation marks. + * locate/locate.1 (HISTORY): New section. + +2007-07-02 James Youngman + + * import-gnulib.sh: (run_gnulib_tool): Don't pass --gpl3 to + gnulib-tool, since the program does not have that option (that was + a local change which proved not to be necessary). + + GPL3 migration. + * COPYING: Migrate to version 3 of the GNU General Public license. + * Makefile.am: ditto + * build-aux/check-testfiles.sh: ditto + * build-aux/src-sniff.py: ditto + * debian/copyright: ditto + * doc/find-maint.texi: ditto + * find/defs.h: ditto + * find/find.c: ditto + * find/finddata.c: ditto + * find/fstype.c: ditto + * find/ftsfind.c: ditto + * find/parser.c: ditto + * find/pred.c: ditto + * find/testsuite/config/unix.exp: ditto + * find/tree.c: ditto + * find/util.c: ditto + * import-gnulib.config: ditto + * import-gnulib.sh: ditto + * lib/buildcmd.c: ditto + * lib/buildcmd.h: ditto + * lib/dircallback.c: ditto + * lib/dircallback.h: ditto + * lib/extendbuf.c: ditto + * lib/extendbuf.h: ditto + * lib/forcefindlib.c: ditto + * lib/gnulib-version.h: ditto + * lib/listfile.c: ditto + * lib/listfile.h: ditto + * lib/modetype.h: ditto + * lib/nextelem.c: ditto + * lib/nextelem.h: ditto + * lib/printquoted.c: ditto + * lib/printquoted.h: ditto + * lib/qmark.c: ditto + * lib/regexprops.c: ditto + * lib/regextype.c: ditto + * lib/regextype.h: ditto + * lib/savedirinfo.c: ditto + * lib/savedirinfo.h: ditto + * lib/strspn.c: ditto + * lib/wait.h: ditto + * lib/waitpid.c: ditto + * locate/bigram.c: ditto + * locate/code.c: ditto + * locate/frcode.c: ditto + * locate/locate.c: ditto + * locate/locatedb.h: ditto + * locate/testsuite/config/unix.exp: ditto + * locate/updatedb.sh: ditto + * locate/word_io.c: ditto + * po/fetch-po-files: ditto + * xargs/testsuite/config/unix.exp: ditto + * xargs/xargs.c: ditto + + Typo fixes. + * doc/find.texi (Deleting Files): Fixed a typo. + (Deleting Files): Likewise. + + New worked example for find. + * doc/find.texi (Copying A Subset of Files): Added a new worked + example. + + * doc/find.texi (Updating A Timestamp File): Indicate that %A@ now + includes a sub-second part on many systems. + + Include unconditionally. + * import-gnulib.config (modules): Also use the fcntl module. + * find/find.c: #include unconditionally, since + gnulib provides it if it is absent. + * find/fstype.c: Likewise. + * find/ftsfind.c: Likewise. + * find/parser.c: Likewise. + * find/util.c: Likewise. + * locate/locate.c: Likewise. + +2007-06-30 Eric Blake + + * find/pred.c (pred_timewindow): Avoid gcc warnings. + (format_date): Likewise. + * find/tree.c (calculate_derived_rates): Likewise. + * locate/word_io.c (getword): Likewise. + +2007-06-30 James Youngman + + * find/find.1 (EXAMPLES): Added an example of using find and cpio -p + to copy a directory tree, with pruning and omitted files. + + * find/pred.c (format_date): Use verify_true for constant + conditions rather than assert. + * xargs/xargs.c (main): Ditto. + + Enhancements to the code smell detector. + * Makefile.am (findutils-check-smells): Automate the calling of + build-aux/src-sniff.py. + * build-aux/src-sniff.py: Rework to use a list of regex-based + sniffers, to allow checking types of file other than C. Allow + file-based regex sniffers to give an indication of the line number + where they think the problem (or part of the problem) exists. + Added code smell detectors for a sample Bourne shell problem and + for out-of-date FSF addresses. + + * find/tree.c (get_pred_cost): Eliminate unused variable. + + Fix Savannah bug #20263 in a more portable way. + * find/tree.c (cost_table_comparison): Avoid casting function + pointers to poiter-to-object, since this is not portable (or + of course conforming). Instead, use memcmp(). + +2007-06-28 Eric Blake + + * import-gnulib.sh (run_gnulib_tool): Speed operation when + updating an existing tree. + + Allow 'make check' to work without prior 'make all'. + * find/Makefile.am (SUBDIRS): Build in . before testsuite. + * locate/Makefile.am (SUBDIRS): Likewise. + * xargs/Makefile.am (SUBDIRS): Likewise. + + Fix Savannah bug #20273, xargs -E with seekable stdin. + * import-gnulib.config (modules): Sort, add closein. + * xargs/testsuite/Makefile.am (EXTRA_DIST_EXP, EXTRA_DIST_XO) + (EXTRA_DIST_XI): Add new test. + * xargs/testsuite/config/unix.exp (xargs_start): Support optional + argument to allow test to run a subshell. + * xargs/testsuite/inputs/sv-bug-20273.xi: New file. + * xargs/testsuite/xargs.posix/sv-bug-20273.xo: Likewise. + * xargs/testsuite/xargs.posix/sv-but-20273.exp: Likewise. + * xargs/xargs.c (main): Use close_stdin, not close_stdout. + * NEWS: Document the fix. + +2007-06-27 James Youngman + + Added a maintenance manual. + * doc/find-maint.texi: New file. + * doc/Makefile.am (info_TEXINFOS): Added doc/find-main.texi. + * doc/find.texi (Introduction): Fixed typo. + +2007-06-26 Eric Blake + + * import-gnulib.config (modules): Allow ./configure + --disable-assert. + +2007-06-26 James Youngman + + * build-aux/src-sniff.py: Detect uses of struct stat where the + header file was not included. + * find/find.c: Fix this, and uses of assert without a following + space (the coding standard requires a space, but there are still + a number of cases where other functions are called with no + following space). + * find/fstype.c: Ditto. + * find/ftsfind.c: Ditto. + * find/parser.c: Ditto. + * find/pred.c: Ditto. + * find/tree.c: Ditto. + * find/util.c: Ditto. + * lib/buildcmd.c: Ditto. + * lib/buildcmd.h: Ditto. + * lib/extendbuf.c: Ditto. + * locate/frcode.c: Ditto. + * locate/locate.c: Ditto. + * locate/word_io.c: Ditto. + * xargs/xargs.c: Ditto. + + * find/tree.c (cost_table_comparison): Avoid < comparison between + function pointer types. Instead cast the function pointers to + (const void*). Both alternatives are undefined C, but the former + actually fails to compile on some systems. This fixes Savannah + bug #20263. + * NEWS: mention the fix + + * find/tree.c (calculate_derived_rates): Removed assignment to + rate variable following an assert(0) call, which had been added to + silence a "used before initialised" warning, and replace it with a + call to abort, which (a) correctly halts execution if _NDEBUG is + defined and (b) more accurately documents what's happening. + + * find/parser.c (get_stat_Ytime): Removed redundant call to abort. + + * find/util.c (debug_stat): For consistency, use assert (0) rather + than assert (false). + +2007-06-26 James Youngman + + * README-alpha: Mention the findutils-patches mailng list and the + archives for findutils-patches and bug-findutils. + + * po/bg.po: Updated from Translation Project. + +2007-06-25 James Youngman + + * po/sv.po: Updated Swedish translation. + +2007-06-24 James Youngman + + * build-aux/.gitignore, debian/.gitignore, doc/.gitignore, + find/.gitignore, find/testsuite/.gitignore, .gitignore, + lib/.gitignore, locate/.gitignore, locate/testsuite/.gitignore, + m4/.gitignore, po/.gitignore, xargs/.gitignore, + xargs/testsuite/.gitignore: New files to make it more painless to + track findutils sources with git. + + * NEWS: Mention the previous change to doc/find.texi. + +2007-06-23 James Youngman + + * doc/find.texi (Introduction): Recommend that people check they + are using the latest version before reporting a bug. + +2007-06-22 James Youngman + + Better documentation for the fractional part of seconds fields for + -printf and similar actions. + * doc/find.texi (Time Components): Point out that the seconds + field of the timestamp is often printed out with a fractional part + of unspecified length and precision. The '%Tc' field has no + seconds part. + (Combined Time Formats): Point out the same thing for '%T@'. + * find/find.1 (%A): Point out the same thing. + * NEWS: Mention these changes. + + Fix various lint-type complaints taken from the rules in the + coreutils Makefile.maint file (see build-aux/src-sniff.py). + * xargs/xargs.c: Removed unnecessary parentheses in "#if defined" + checks. + (main): Don't cast the return value of xmalloc. + (add_proc): Don't cast the return value of xmalloc. + * lib/regextype.c: Don't include quotearg.h, we don't need it. + * lib/dircallback.c, lib/nextelem.c, lib/prontquoted.c, + lib/qmark.c, lib/strspn.c, lib/waitpid.c: Assume config.h is available. + * lib/extendbuf.c: Ditto + * lib/listfile.c: Ditto. Also removed unnecessary parentheses in + "#if defined" checks. + (get_link_name): Don't cast the result of xmalloc. + * lib/bigram.c: Removed unnecessary parentheses in "#if defined" + checks. + * lib/savedirinfo.c: Assume config.h is available. Also removed + unnecessary parentheses in "#if defined" checks. + * lib/buildcmd.c (bc_do_insert): Don'tcast the result of xmalloc(). + * find/tree.c (build_expression_tree): Don't cast the argument to free(). + * find/ftsfind.c (set_close_on_exec): Removed unnecessary + parentheses in "#if defined" checks. Also changed "filesystem" -> + "file system" + * find/util.c (check_nofollow): Removed unnecessary parentheses in + "#if defined" checks. + * find/parser.c (estimate_fstype_success_rate): ditto. + (insert_regex): Do not cast the result of xmaloc(). Removed unnecessary + parentheses in "#if defined" checks. Also changed "filesystem" -> + "file system" + * find/pred.c: ditto + * find/find.c: "the the" -> "the", "filesystem" -> "file system" + * find/fstype.c: "filesystem" -> "file system" (in comments and + static functions) + * locate/frcode.c: Removed unnecessary parentheses in "#if + defined" checks. + * locate/locate.c (search_one_database): Don't cast the return + value of xmalloc. + (dolocate): Mark error message for translation. + +2007-06-21 Eric Blake + + * locate/.cvsignore: Ignore dblocation.texi. + * build-aux/.cvsignore: Ignore Makefile. + * locate/locate.c (set_max_db_age): Fix typo in error message. + +2007-06-19 Eric Blake + + Fix compilation on cygwin, Savannah bug #20210. + * import-gnulib.config (gnulib_version): Import strcasestr and + updated canonicalize-lgpl-tests. + * lib/dircallback.c (includes): Track gnulib changes. + +2007-06-14 James Youngman + + * find/parser.c (parse_time): Use the variable comp, which holds + the planned comparison type, rather than the structure tval, which + has not been initialised yet and contains a random value. This + fixes Savannah bug #20139. + * NEWS: Mention the bugfix. + +2007-06-13 James Youngman + + * po/pl.po: Updated Polish translation. + +2007-06-12 James Youngman + + Release 4.3.8. + + * find/find.1 (HISTORY): Document when the find tests -readable, + -writable, -executable and the option -regextype were introduced. + +2007-06-12 Nix (trivial change) + + * locate/locate.c (drop_privs): Use groups[0] rather than + groups[1], since groups[] is a one-element array. This is a + buffer overrun affecting root only. In theory it could affect + setuid installations, but I (James Youngman) cannot find an explot + mechanism for it. This fixes Savannah bug#20157. + * NEWS: Mention this fix. + +2007-06-12 James Youngman + + Make the test suite work when run as root. + * find/testsuite/config/unix.exp (fs_superuser): Abstract out the + check which discovers if we have superuser privileges on the + filesystem (taken from access.exp). + * find/testsuite/find.gnu/access.exp: Call fs_superuser. + * find/testsuite/find.gnu/fprint-unwritable.exp: Use fs_superuser. + + * po/vi.po, ga.po, nl.po: Updated translations + * po/findutils.pot: Updated template file + +2007-06-09 James Youngman + + Release 4.3.7. + + Check that we can correctly read old-format databases which are + big-endian or little endian. + * locate/testsuite/config/unix.exp (locate_from_db): New function; + supports testing locate against a provided database. + * locate/testsuite/locate.gnu/bigendian.exp: New test; make sure + we can read an old-format big-endian database. + * locate/testsuite/locate.gnu/bigendian.xo: Expected output from + bigendian.exp test. + * locate/testsuite/locate.gnu/littleendian.exp: New test; make sure + we can read an old-format little-endian database. + * locate/testsuite/locate.gnu/locateddb.old.powerpc.xi: Old format + big endian database file, for supporting bigendian.exp. + * locate/testsuite/locate.gnu/littleendian.xo: Expected output from + littleendian.exp test. + * locate/testsuite/locate.gnu/locateddb.old.x86.xi: Old format + little endian database file, for supporting littleendian.exp. + * locate/testsuite/Makefile.am: Distribute littleendian.exp, + bigendian.exp and related .xi and .xo files. + + + * doc/find.texi (Size Directives): Compare %b with %s/512, not + %s/1024. This fixes (again) Savannah bug #19596. + * NEWS: mention the fix. + + Avoid using the non-portable function putw(). + * locate/locatedb.h: Declare putword(). + * locate/frcode.c: Include as locatedb.h now requires + it. + * locate/code.c (main): Use putword() rather than putw(), because + the latter was removed from SUSv3. This fixes Savannah bug #19980. + Also include as locatedb.h now requires this. + * locate/word_io.c (putword): Define the new function putword. + + Ensure that is included before any system header + * find/defs.h: Do not include from "defs.h". Instead + just complain if it was not already included, since it needs to + be included first of all, even before system headers (in case + gnulib had replaced a system header). Check + ALREADY_INCLUDED_CONFIG_H to determine this. + * configure.in: Always define ALREADY_INCLUDED_CONFIG_H in + config.h. + * find/find.c: Include config.h before defs.h. + * find/finddata.c: ditto. + * find/fstfind.c: ditto. + * find/parser.c: ditto. + * find/pred.c: ditto. + * find/util.c: ditto + * find/tree.c: ditto (fixing Savannah bug #20128). + + * m4/noreturn.m4 (jy_AC_ATTRIBUTE_NORETURN): Use AC_LANG_PROGRAM + inside AC_COMPILE_IFELSE. + + * doc/find.texi (Security Considerations for locate): Discuss in + detail the buffer overrun when reading old-format locate + databases. This is CVE reference CVE-2007-2452. + +2007-06-05 James Youngman + + Guess the byte-order of old-format locate databases. + * locate/word_io.c (getword): Make the endian_state_flag parameter + an enum rather than an int. If we are in the initial ("don't + know") byte-order guessing state and the swapped value is out of + range, use this as evidence that the byte order is native. + * locate/locatedb.h: Declare getword accordingly. + * locate/locate.c (struct process_data): Added endian_state + member, which remembers for us what the big/little endian order + guessing state is when we read an old-format database. + (visit_old_format): Use the procdata.endian_state rather than a + local variable, so that the information can persist across calls. + (i_am_little_endian): Locate figures out if we needed to byteswap + the words in an old-format database, but that is an implementation + detail. Therefore we figure out our own byte order so that we can + produce a more relevant message for --statistics. The + i_am_little_endian() returns nonzero if the current host has + little-endian byte order. + (search_one_database): Report the byte-order of old-format + databases. + +2007-06-04 James Youngman + + * locate/testsuite/Makefile.am (EXTRA_DIST_XO, EXTRA_DIST_EXP): + Added old_prefix.exp and old_prefix.xo, a new test case for long + shared rpefixes with the old database format. + + * locate/locate.c (visit_old_format): Use getword() from word_io.c + instead of getw(), because getw() is not in POSIX. + * locate/word_io.c: New file, providing replacement for getw(). + * locate/locatedb.h: Declare getword() + * locate/Makefile.am (locate_SOURCES): Added word_io.c + + * locate/testsuite/config/unix.exp (locate_start): Make the + failure messages slightly more explicit; indicate what went wrong + when a test fails. + +2007-06-03 James Youngman + + * locate/locate.c (visit_old_format, extend, toolong): Extend the + buffer used to build the current pathname when reading an + old-format database. The new function extend is called to do + this. The new function toolong is called to report a fatal error + when the buffer size would otherwise exceed SIZE_MAX. This fixes + Savannah bug #20014, which is a security-related problem with the + CVE identifier CVE-2007-2452. + + * configure.in: Determine if the setgroups function is available, + and set HAVE_SETGROUPS if so. + * locate/locate.c (drop_privs): Call setgroups() only if + HAVE_SETGROUPS indicates that it is available. This fixes + Savannah bug #19981. + + * po/vi.po: Updated Vietnamese translation + +2007-05-31 James Youngman + + * find/parser.c (parse_time): Once we have determined the + comparison type, restore the original time argument since + get_relative_timestamp() also wants to see it. This fixes + Savannah bug #20005. + + * po/findutils.pot, ga.po, pt.po, tr.po, pl.po: updated from the TP + website. + +2007-05-31 Jakub Bogusz (trivial change) + + * find/parser.c (parse_group): Correct typo in error message. + (check_path_safety): same + +2007-05-27 James Youngman + + * import-gnulib.config (modules): Import sys_stat. + (gnulib_version): Update to 2007-05-26. This fixes a compilation + error in stdlib.h with the DEC C compiler. This fixes Savannah + bug# 19983. + + * find/parser.c (safe_atoi): New function, like atoi, but which + calls error(1, ...) when the argument is invalid or out of range. + (parse_group): Use safe_atoi. + (insert_depthspec): Use safe_atoi + (parse_user): Use safe_atoi + + * configure.in: Check for fabs in libm (fixing a compilation error + on Solaris). + + * import-gnulib.config (modules): Import the wcwidth module to + provide it on those systems (such as BeOS) which lack it. + + * find/pred.c (file_sparseness): If st_blocks is not present in + struct stat, the file has a sparseness of 1.0. + + * doc/find.texi (Size Directives): Document the %S format + directive for -printf. + + * find/pred.c (mode_to_filetype): Don't use S_IFSOCK on systems + which lack that macro. POSIX systems are allowed to lack + sockets (it's an XSI extension). + (file_sparseness): If struct stat lacks st_blocks, assume all + files have a spearseness of 1.0. + + * import-gnulib.config (modules): Import fchdir inorder to fix an + undefined-symbol error for fchdir on BeOS. + +2007-05-26 James Youngman + + Code refactoring in locate. + * locate/locate.c (visit): New function, into which we factor out + the traversal of the inspector list. + (process_simple): Use visit(). + (process_or): Use visit(). + (process_and): Use visit(). + + Speed improvements in locate for unibyte locales. + * locate/locate.c (visit_substring_match_nocasefold_wide): Renamed + from visit_substring_match_nocasefold. + (visit_substring_match_casefold_wide): Renamed from + visit_substring_match_casefold. + (visit_substring_match_casefold_narrow): Special case of + visit_substring_match_casefold_wide which we use for unibyte + locales; we use strcasestr() rather than mbscasestr(). + (visit_substring_match_nocasefold_narrow): Ditto, using strstr() + instead of mbsstr(). + + * find/parser.c (parse_gid): Return an explicit boolean constant + rather than automatically converting from a pointer, because the + gnulib substitute for bool (or _Bool) in c89 environments lacking + bool does not support that conversion. One affected system is Sun + WorkShop Compilers 5.0 98/12/15 C 5.0 on Solaris 7. This is + Savannah bug #19970, reported by Nelson Beebe. + (parse_inum): Ditto. + (parse_links): Ditto. + (parse_uid): Ditto. + (check_path_safety): declarations need to go before code, not + interspersed. Move declaration of char* s. + + * xargs/testsuite/xargs.posix/rc-125.exp: Explain Savannah bug + #19969. This bug is not yet fixed. + + * find/defs.h: #include , for uintmax_t. This should + fix a compilation error on DEC C V5.9-005 on Digital UNIX V4.0F + (Rev. 1229). This is Savannah bug #19965, reported by Nelson + Beebe. + + * find/defs.h: Don't include , since it is not needed in + the header file itself. The "extern int errno;" declaration is + now obsolete. + * find/parser.c: Include + * find/pred.c: Dito + * find/util.c: Ditto + +2007-05-24 James Youngman + + * find/util.c (check_nofollow): If O_NOFOLLOW is defined but 0, + act as if it is undefined. This should prevent a runtime + assertion failure on IRIX 6.5. This fixes Savannah bug #19948, + reported by Nelson Beebe. + + * m4/noreturn.m4: New file, testing for support of __attribute__ + ((__noreturn__)). Defines jy_AC_ATTRIBUTE_NORETURN and sets + HAVE_ATTRIBUTE_NORETURN. + * configure.in: Call jy_AC_ATTRIBUTE_NORETURN. + * find/defs.h (ATTRIBUTE_NORETURN): Define to nothing if + HAVE_ATTRIBUTE_NORETURN is not set in config.h. This should fix a + compilation error with non-GCC compilers. This is Savannah bug + #19967, reported by Nelson Beebe. + + * configure.in (FINDLIBS): Update FINDLIBS to link against -lm for + modf. This fixed a link error on HP-UX. This fixes Savannah + bug #19966, reported by Nelson Beebe. + * find/Makefile.am (LDADD): Use @FINDLIBS@ + +2007-05-21 James Youngman + + Release 4.3.6. + + * build-aux/Makefile.am (EXTRA_DIST): Added man-lint.sh. + + * locate/locate.c (drop_privs): pass the correct list of groups to + setgroups(). Previously, if root invoked locate, their group ID + would have been set to a random value. The same bug also caused + an array overrun past the end of the local array groups[]. The + variable which gets overwritten by the buffer overrun on x86 is + 'what'. The value of that variable is always changed before it is + used, and so I believe that this buffer overrun will not cause a + crash. The only effect of the bug therefore would be for locate + to change group to a random group ID since groups[0] is + uninitialised. On my test system this random group ID is 0 + anyway. The effect does not depend on any externally-controllable + information, so it is unlikely this is exploitable. This bug is + detailed as bug# 19923. + +2007-05-19 James Youngman + + * find/find.1: Spurious .R directives (.R is not a directive) + should be .B. This fixes Savannah bug #19871. + * build-aux/man-lint.sh: New file; verifies that the specified + manual pages do not provoke error messages from troff. This is + used to detect further occurrences of Savannah bug #19871. + * find/Makefile.am (dist-hook): Run findutils-check-manpages, + which invokes man-lint.sh. + * locate/Makefile.am (dist-hook): ditto + * xargs/Makefile.am (dist-hook): ditto + + * .cvsignore: Ignore ylwrap, which automake-1.10 wants us to have + a copy of for some reason + + * import-gnulib.sh (main): New option -a which just runs the + autotools without reimporting gnulib. + + * Makefile.am (jy-regex-fix): The previous explanatory comment + refers to the jy-regex-fix target, not to dist-hook, so it has + been moved. + +2007-05-08 James Youngman + + * find/defs.h (struct predicate.args): str is now const. + + * find/parser.c (get_comp_type): get_comp_type now takes a const + char* parameter. + (get_num): ditto + (get_relative_timestamp): ditto. Also use collect_arg(). + (collect_arg_stat_info): New function; collects a command-line + argument and returns its xstat information, in one go. + error(1,...) is called if the stat fails. + (parse_anewer): Use collect_arg(). + (parse_cnewer): ditto + (parse_fprint): ditto + (parse_fstype): ditto + (parse_group): ditto + (parse_ilname): ditto + (parse_iname): ditto + (parse_iwholename): ditto + (parse_lname): ditto + (insert_depthspec): ditto + (parse_name): ditto + (parse_newer): ditto + (parse_wholename): ditto + (parse_perm): ditto + (parse_regextype): ditto + (insert_regex): ditto + (parse_samefile): ditto + (parse_used): ditto + (parse_user): ditto + (insert_type): ditto + (parse_time): ditto + (parse_size): When the size argument is invalid but consists only + of a valid suffix char, avoid issuing an error message about a + blank argument. Append the suffix letter again. + (parse_xdev, parse_ignore_race, parse_noignore_race, parse_warn, + parse_xtype): Remove casts to void for some function parameters + that were, in fact, used. + + * find/testsuite/find.gnu/fprint-unwritable.exp: new test + * find/testsuite/find.gnu/fprint0_stdout.exp: new test + * find/testsuite/find.gnu/fprint0_stdout.xo: new test + * find/testsuite/find.gnu/mindepth-arg.exp: new test + * find/testsuite/find.gnu/mindepth-arg.xo: new test + * find/testsuite/find.gnu/mindepth-badarg.exp: new test + * find/testsuite/find.gnu/print_stdout.exp: new test + * find/testsuite/find.gnu/print_stdout.xo: new test + * find/testsuite/find.gnu/samefile-missing.exp: new test + * find/testsuite/find.gnu/samefile-p-brokenlink.exp: new test + * find/testsuite/find.gnu/samefile-p-brokenlink.xo: new test + * find/testsuite/find.gnu/used-invarg.exp: new test + * find/testsuite/find.gnu/used-missing.exp: new test + * find/testsuite/find.gnu/user-invalid.exp: new test + * find/testsuite/find.posix/group-empty.exp: new test + * find/testsuite/find.posix/group-missing.exp: new test + * find/testsuite/find.posix/name-missing.exp: new test + * find/testsuite/find.posix/size-invalid.exp: new test + * find/testsuite/find.posix/size-missing.exp: new test + * find/testsuite/find.posix/typearg.exp: new test + * find/testsuite/find.posix/user-empty.exp: new test + * find/testsuite/find.posix/user-missing.exp: new test + +2007-05-06 James Youngman + + * find/tree.c: (costlookup): Added pred_fls to the optimiser's + predicate cost lookup table. + + * lib/printquoted.c (print_quoted): Change return value from void + to int, to allow the caller to detect failures. + * lib/printquoted.h (print_quoted): Change declaration + accordingly. + + * find/defs.h (struct format_val): Incldue a 'filename' member so + that we can provide more useful error messages (e.g. when we fail + to flush or close an output file). + (nonfatal_file_error): declare new function. + + * find/util.c (traverse_tree): Utility function which calls a + callback on every node of the parse tree. + (flush_and_close_output_files): Flush all output streams. Close + all output files. Report any errors. + (cleanup): Use traverse_tree() to invoke + complete_pending_execdirs(). + (report_file_err): refactored error reporting function, extracted + from fatal_file_error. + (nonfatal_file_error): New function. + + * find/pred.c (checked_fprintf): New function, which performa an + fprinf(), and checkes the result. If the operation resulted in an + error, a nonfatal error message is issued. + (checked_print_quoted): Ditto, for print_quoted rather than + fprintf. + (checked_fwrite): Ditto for fwrite instead of fprintf. + (checked_fflush): Ditto for fflush + (do_fprintf): Use the checked_*() functions rather than their + direct counterparts, to ensure that I/O errors are detected. This + fixes Savannah bug #19416. + (pred_fls): Use args.printf_vec instead of args.stream, which has + now been removed. + (pred_ls): just call pred_fls. + (pred_fprint0): use args.printf_vec, instead of the now removed + args.stream. + (pred_print0): just call pred_fprint0 + + * find/parser.c: (insert_fprintf): Make the caller collect the + format argument from the argument list. + (open_output_file): Enhance to set up defaults in + our_pred->args.printf_vec as well as opening the output file. + Also record the filename for possible later use in an error + message. + (collect_arg): Convenience function for collecting an argument + from the argument list. + (insert_fls): Refactored the body of parse_fls out so that + parse_ls can use it. + (parse_fls): call insert_fls. + (parse_ls): ditto + (parse_fprint): Instead of setting up our_pred->args.printf_vec + manually, call open_output_file() to do it. + (parse_print): Same, but by calling open_stdout(). + (insert_fprint): Make the caller collect the filename argument, + and delegate the setup of our_pred->args.printf_vec to either + open_output_file() (for parse_fprint and parse_fprint0) or + open_stdout (parse_print0). + (parse_fprint0): Use collect_arg(). + (parse_print0): Use insert_fprint(), just like parse_fprint0. + (parse_printf): Use collect_arg(). + (parse_fprintf): Use collect_arg(). + +2007-05-05 James Youngman + + Release 4.3.5. + + * find/parser.c (parse_samefile): Hold a file descriptor open on + the reference file in order to prevent pred_samefile getting + fooled by inode reuse. Pay attention to race conditions on + systems lacking O_NOFOLLOW when the -P option is in force. This + fixes Savannah bug #19806. + + * find/defs.h (struct samefile_file_id): New struct, like dir_id + but including a file descriptor on the reference file. + + * find/pred.c (pred_type): -type should return false if the file + has mode 00000, as opposed to having an assertion failure. This + fixes Savannah bug #16378. + + * find/ftsfind.c (consider_visiting): Issue a warning message if + none of the mode bits are set for a file (i.e. st_mode==00000). + * find/util.c (get_statinfo): ditto + * find/util.c (hook_fstatat): Introduced debug code (normally + disabled) for testing Savannah bug #16378. + +2007-05-01 James Youngman + + * find/find.c (wd_sanity_check): corrected the type of %ld fprintf + arguments in error messages. + * find/fstype.c: include "error.h" for the declaratio of error(). + * find/ftsfind.c: include "error.h" for the declaratio of + error(). Include dircallback.h for the correct declararion of + run_in_dir(). + * find/parser.c: include getdate.h (for declaration of getdate) + and error.h (for the declaration of error). + (find_parser): Removed unused variable p. + * find/pred.c (pred_timewindow): Removed unused variable delta. + (do_fprintf): Removed unused variable cc. + * find/tree.c: Include error.h (for the declaration of error()). + (build_expression_tree): removed sourious extra arguments in call + to error(). + * find/util.c: include error.h. + * lib/buildcmd.h (get_line_max): Comment out unused function. + * lib/listfile.c: Include dircallback.h. + * locate/code.c: Include errno.h, erorr.h, progname.h and + xlloc.h. + (inerr): New function for reporting read errors. + (outerr): New function for reporting output errors. + (main): Call inerror when fgets fails. Call outerr when fwrite + or putc or putw fails. + * locate/frcode.c (put_short): Return boolean value indicating + success. + (outerr): New function for reporting write errors. + (main): Call outerr if call to putc() or puts() or put_short() + fails. + * locate/locate.c (search_one_database): diagnose corruption if a + traditional-style database is too short to include a complete + bigram table. + +2007-04-30 James Youngman + + * find/defs.h: Change all predicate functions to take a const + char* argument as the pathname, not a char*. Modify the parser + table definition accordingly. + * find/parser.c: Ditto + * find/pred.c: Ditto + * find/pred.c (do_fprintf): copy the pathname string for the %H + and %h cases, since we can no longer modify the string in place. + * lib/listfile.c (print_name, list_file, + print_name_without_quoting, print_name_with_quoting): Use const + char * param for pathname. + * lib/listfile.h (list_file): Use const char * param for + pathname. + +2007-04-29 James Youngman + + * find/defs.h: Declare fatal_file_error(), a function for + reporting immediately-fatal file errors, which appropriately + quotes the file name. The function does not return. Also define + ATTRIBUTE_NORETURN. Record the currently-required quoting style + in struct options. + + * find/find.c, find/ftsfind.c, find/parser.c, find/pred.c, + find/util.c: Call fatal_file_error() for fatal file errors. Use + quotearg_n_style() to quote filenames which are used in error + message that aren't fatal. Use options.err_quoting_style as the + quoting style. This fixes Savannah bug #18203. + * locate/locate.c: ditto + * xargs/xargs.c: ditto + + * lib/listfile.c: To use alloca, just #include . Gnulib + handles the rest. Also these days, and can + just be included unconditionally. + * lib/qmark.c: Fixed comment on first line describing the module. + +2007-04-29 Michael Haubenwallner (Trivial Change) + + * find/defs.h (pred_open) Rename to pred_openparen to avoid + problems with the macrtos which build the parser tabnles on + platforms where 'open' is in fact a macro whcih expands to + open64. The problem was that token pasting put pred_open64 into + the parser table, but the function was still defined as + parse_open. This fixes Savannah bug #19371. + (pred_close): ditto + * find/parser.c (parse_open, parse_close): ditto. Also change + repferences to pred_open and pred_close similarly. + * find/parser.c (parse_openparen, parse_closeparen): ditto + +2007-04-28 James Youngman + + * find/testsuite/find.gnu/deletedir.exp, + find/testsuite/find.gnu/deletedir.xo: New test. + * find/testsuite/find.gnu/deletefile.exp, + find/testsuite/find.gnu/deletefile.xo: New test. + * find/testsuite/Makefile.am: Distribute the new tests + deletefile.exp and deletedir,exp, with their expected-output (.xo) + files too. + * find/testsuite/config/unix.exp (find_start): Add a new "setup" + parameter called just before each time find is invoked. This + allows last-minute tasks to be performed. This feature is + essential for find commands that modify the filesystem, since + otherwise we cannot use our strategy of invoking both binaries at + each optimisation level. + + * find/util.c (optionh_stat, optionp_stat, optionl_stat): Assert + that state.cwd_dir_fd is valid. + + * find/parser.c (parse_delete): Set need_stat to false, since we + don't need the stat information in pred_delete. + * find/pred.c (pred_delete): If unlinkat() with a zero flags + parameter fails with errno==EISDIR, just try again with + flags=AT_REMOVEDIR. That way we normally avoid the cost of a + stat. If we happen to have the stat information to hand anyway, + we make sure we get it right the first time. + + * lib/buildcmd.c (bc_init_controlinfo): Eliminate confusing extra + variable arg_max. Add return value + BC_INIT_CANNOT_ACCOMODATE_HEADROOM for the case where the + environment itself is not too large, but the required headroom + cannot also be accomodated. The caller now passes in the amount + of headroom required. + (bc_use_sensible_arg_max): Use the environment size consistently; + this is accounted for already in posix_arg_size_max, so there is + no need to re-measure the size of the environment. + * lib/buildcmd.h: Define BC_INIT_CANNOT_ACCOMODATE_HEADROOM and + add the headroom parameter to the prototype of bc_init_controlinfo(). + * xargs/xargs.c (main): Define XARGS_POSIX_HEADROOM as 2048 and + use that symbolic value. Pass XARGS_POSIX_HEADROOM to + bc_init_controlinfo(). Handle the case where + BC_INIT_CANNOT_ACCOMODATE_HEADROOM is returned by + bc_init_controlinfo(). + * find/parser.c (new_insert_exec_ok): Pass the required headroom to + bc_init_controlinfo() and handle the error return + BC_INIT_CANNOT_ACCOMODATE_HEADROOM. + + * xargs/xargs.1: Correct the description of the default value and + maximum value for the -s option of xargs. + + * xargs/xargs.c (main): Modify the assertions not to assume that + bc_ctl.arg_max is 2KiB less than ARG_MAX, since sysconfig() may + have returned a value for _SC_ARG_MAX which is greater. For + example, AIX 5.3 can do this. This should fix Savannah bug + #19391. + +2007-04-25 James Youngman + + * find/tree.c (predlist_dump, predlist_merge_nosort): These + functions were unused and commented out. Removed. + (mark_stat) No longer used. Removed. + (mark_type) No longer used. Removed. + + * find/parser.c (new_insert_exec_ok): When checking for {} in the + arguments to -exec..., use mbsstr() rather than strstr() in order + to cope bettwe with multibyte locales. + + * lib/buildcmd.c: Don't define mbsstr() locally. Instead, call + gnulib's mbsstr(). + +2007-04-24 James Youngman + + * lib/buildcmd.c: Added some comments outlining how we might + change the implementation to support figuring out the real ARG_MAX + limit. + +2007-04-23 James Youngman + + * find/defs.h (struct predicate_performance_info): New data + structure for holding perofmance statistics. + (struct predicate: include predicate_performance_info + (apply_predicate): change from macro to function + (pred_is): new macro, for predicate identity testing + (enum DebugOption): Added DebugSuccessRates + * find/find.1: Document option "-D rates" which turns on + DebugSuccessRates. + * doc/find.texi: ditto + * find.c (main): Call show_success_rates() before exiting. + (apply_predicate): remove the macro defintion, declare equivalent + function in defs.h. + * find/ftsfind.c (main): Call show_success_rates() before + exiting. Use apply_predicate(). + (show_outstanding_execdirs): use pred_is(). + + + +2007-04-22 Eric Blake + + * xargs/xargs.c (main): Don't assume LINE_MAX exists (i.e. is + #defined). + + * locate/updatedb.sh (PRUNEPATHS): Exclude /proc by default. + +2007-04-22 James Youngman + + * doc/Makefile.am: When cross-compiling, 'make clean' should not + delete doc/regexprops.texi, becaue we can't regenerate it. Fixes + Savannah bug #19658. + + * locate/Makefile.am (BUILT_SOURCES): Automatically generate + dblocation.texi, which records the default database location. + * doc/find.texi: Collect the default database location from + ../locate/dblocation.texi, and use LOCATE_DB in various places. + Document the fact that updatedb can generate slocate-compatible + databases. Document the --dbformat option of updatedb. + * locate/frcode.c (main): Implemented the -S option which allows the + generation of an slocate secure database. + * locate/updatedb.sh: New option --dbformat which selects which + database format to use. + * locate/updatedb.1 (--dbformat): Document the new option. + + + * find/testsuite/find.gnu/access.exp: fixed a typo which prevented + the test correctly being skipped when run as root. This re-fixes + Savannah bug# 18414, I hope. + +2007-04-21 James Youngman + + Release 4.3.4. + + * find/locate/locatedb.5: Clarifications to the description of the + LOCATE02 format. Organised the material under a number of + headings. Documented the slocate database format. + +2007-04-21 James Youngman + + * find/testuite/Makefile.am (EXTRA_DIST_EXP): added + find/testsuite/find.posix/sv-bug-19617.exp + +2007-04-20 Maxim V. Dziumanenko + + * po/uk.po: New Ukranian translation. + * configure.in: Added "uk" for Ukranian. + +2007-04-19 Peter Breitenlohner (Trivial change) + + * locate/bigram.c (main): Set the initial pathname to the empty + string, to avoid decompression problems if the initial pathname + begins with a space. This fixes Savannah bug #19484. + * locate/code.c (main): ditto + +2007-04-19 James Youngman + + * locate/updatedb.1 (--help): Option name should be bold, not + italic. + + * find/testsuite/find.gnu/execdir-hier.exp: Avoid running + -execdir based tests if "." is on $PATH. Fixes Savannah bug + #19634. + * find/testsuite/find.gnu/execdir-in-unreadable.exp: ditto + + * find/testsuite/config/unix.exp (touch): New procedure touch, + replacing "exec touch" for greater efficiency. + * find/testsuite/find.posix/depth1.exp: Change "exec touch" to + "touch". + * find/testsuite/find.posix/files-not-expressions1.exp: ditto + * find/testsuite/find.posix/files-not-expressions2.exp: ditto + * find/testsuite/find.posix/files-not-expressions3.exp: ditto + * find/testsuite/find.posix/links.exp: ditto + * find/testsuite/find.posix/perm-vanilla.exp: ditto + * find/testsuite/find.posix/sv-bug-15235.exp: ditto + * /find/testsuite/find.posix/sv-bug-19613.exp: ditto + + * find/testsuite/find.gnu/access.exp: Fix savannah bug #18414 by + skipping the test if the user can read any file (e.g. is root or + is an Admin user under Cygwin). + +2007-04-17 James Youngman + + * import-gnulib.config (gnulib_version): Use the 2007-04-17 + version of gnulib to fix a compilation error on Cygwin. This + fixes Savannah bug #19619. + + * find/testsuite/find.posix/sv-bug-19605.exp: New test, for + Savannah bug #19605. + * find/testsuite/find.posix/sv-bug-19617.exp: New test, for + Savannah bug #19617. + * find/ftsfind.c (consider_visiting): if fts_read() returns + enf->fts_info==FTS_NS, check for and diagnose a symbolic link + loop. This fixes Savannah bugs #19605 and #19617. + + * find/find.c (process_path): collect the stat information for + directories even if we already have the mode information, because + we need to use the members st_nlink and st_rdev in for the leaf + optimisation and loop detection, respectively. This fixes + Savannah bug #19616. + + * find/ftsfind.c (is_fts_enabled): Return a copy of ftsoptions, + not a copy of the (uninitialised) input argument. This fixes + Savannah bug #19615. + + * find/ftsfind.c (consider_visiting): If fts_read() returned + FTS_NS, then remember that the stat information is not valid, and + therefore don't set state.have_type or state.have_stat. This + fixes Savannah bug #19613. + + * find/testsuite/find.posix/sv-bug-91613.exp, + * find/testsuite/find.posix/sv-bug-91613.xo: New test for Savannah + bug 19613 (assertion failure on symbolic link loop). + + * find/testsuite/config/unix.exp: Correctly diagnose a test case + which fails because find was expected to fail and instead + succeeded. + * find/testsuite/find.gnu/exec-many-rtn-failure.exp: The child + process in this test should return non-zero, not zero. Therefore + run "false" instead of "true". + +2007-04-15 James Youngman + + Release 4.3.3. + + * find/find.1: "-printf %b": blocks are 512 bytes. Fixes + Savannah bug #19596. + + * doc/Makefile.am (regexprops.texi): Do not use $(RM) because many + versions od make do not set it, and so it expands to nothing. + This avoids suprious emission of the regexprops.texi file to stdout. + + * find/find.c (main, safely_chdir_lstat, safely_chdir_nofollow): + Only use O_LARGEFILE if it is #defined (NetBSD-3.1 does not define + it). + * find/ftsfind.c (main): ditto + * find/pred.c (pred_empty, prep_child_for_exec): ditto + + + * import-gnulib.config: Update to gnuliv 2007-04-14. + + * lib/Makefile.am, import-gnulib.sh: Create lib/gnulib-version.c + in import-gnulib.sh, not in lib/Makefile. + + * build-aux/Makefile.am: New file; distribute check-tstfiles.sh. + + * locate/Makefile.am: mkinstalldirs is now in build-aux. + + * doc/Makefile.am: We also need getdate.texi. + +2007-04-14 James Youngman + + * doc/.cvsignore: Ignore getdate.texi + + * find/defs.h: #include "buildcmd.h" near the top of the file, not + in the middle. + + * all: Pass O_LARGEFILE when opening directories. + + * all: Changes to allow us to use the FTS_CWDFD mode of fts(). + These are quite extensive changes, and are detailed below. + + * find/defs.h (struct exec_val): New member dirfd, the directory + in which the exec should take place. + (is_fts_enabled): Tell the caller which flags are passed to + fts_open(). + (get_start_dirfd): New function. Returns value of start_desc. + (get_current_dirfd): New function. Returns the fd of the + directory fts is currently traversing. If this is the current + directory, AT_FDCWD is returned. + (complete_pending_execdirs): takes a new argument, indicating + where the exec is to take place. Ugh. + (get_info): the file name is taken from state.rel_pathname, so + we don't need it as a function argument. + (enum DebugOption): Added DebugExec ("-D exec"). + (struct state): Added cwd_dir_fd, the directory we are examining + with fts(). If fts() is not in use, this is AT_FDCWD. Also added + execdirs_outstanding, which is a boolean which tells us if there + are any not-yet-execed -execdir or -okdir actions (with +). This + is not really used yet. + * find/ftsfind.c (set_close_on_exec): New function. + (get_current_dirfd): Return an fd open on the directory that fts() + is currently examining. + (left_dir): Signal that our previous ides of which dirctory fts is + searching is now out of date. + (inside_dir): Indicate which directory fts is now searching. + (complete_execdirs_cb): Callback for run_in_dir() to complete + pending execdirs in this directory. + (show_outstanding_execdirs): Supports "-D exec" + consider_visiting(): Do not allow building-up of pending execdirs, + as a workaround to Savannah bug #18466. + (ftsoptions): Make this a static module variable. + * find/parser.c (insert_exec_ok): New parameter describing which + directory the exec should occur in. + (parse_version): for FTS, add a list of options being used. + * find/pred.c (pred_and, pred_comma): No need to pass the relative + path name to get_info(), it can pull it from state.rel_pathname. + (pred_delete): use unlinkat(). + (pred_empty): use openat(). + (new_impl_pred_exec): Accept an fd parameter describing where the + exec is to take place. + (pred_executable, pred_writable, pred_readable): Use run_in_dir() + to ensure that access() is called in a working directory which is + suitable for the pathname we pass in. + (prep_child_for_exec): In the child process, change to the + appropriate directory becore the exec(). + * find/util.c (debugassoc): Support "-D exec". + (get_info): No longer need to pass the relative path to + get_statinfo(). + (do_complete_pending_execdirs): Refactored body of what used to be + complete_pending_execdirs(). + (complete_pending_execdirs): Pull body out into + do_complete_pending_execdirs() and call that only if there is work + to do. + (fallback_stat, optionh_stat, optionp_stat, optionl_stat): Use fstatat(). + (get_start_dirfd): New access function for starting_desc. + * find/testsuite/find.gnu/execdir-hier.exp: New test + * find/testsuite/find.gnu/execdir-hier.xo: Expected outut for new test + * lib/dircallback.c, lib/dircallback.h: New function, + run_in_dir(), which runs a callback function in a specified + directory. + * lib/listfile.c: Use run_in_dir() to call readlink() in the right + directory. + (get_link_name_at): Call get_link_name_cb via run_in_dir. + (get_link_name_cb): New callback function, wrappting + get_link_name(). + + * find/testsuite/find.gnu/execdir-pwd.exp: Since we have disabled + thebuilding-up of command lines for -execdir, Savannah bug #18466 + has been neutralised (but not fixed - we just don't allow the + problem circumstance to occur). + +2007-04-09 James Youngman + + * doc/find.texi: Change fully-specified @node directives to + single-argument @node directives in order to accomodate the + inclusion of getdate.texi. + + * doc/find.texi: Document -newerXY. + + * doc/find.texi (Security Considerations): updated to describe + differences in the fts-based implementation. + + * find/find.1: Indicate that testing the birth time where this is + not supported produces a negative result for files where the birth + time is not known (or a fatal error if the file of interest is a + reference file). + +2007-04-08 James Youngman + + * configure.in: Set @AUXDIR@ (to the location of the build-aux + directory). + * build-aux/check-testfiles.sh: New script, which checks that all + the DejaGnu test files have been included in the distribution and + (more helpfully) lists any that are missing. + * Makefile.am (findutils-check-testfiles): Use + build-aux/check-testfiles.sh. + * locate/testsuite/Makefile.am (EXTRA_DIST_EXP): distribute + locate/testsuite/locate.gnu/sv-bug-14535.exp. + + * config.rpath, depcomp, missing: Moved into build-aux/. + * configure.in(AC_CONFIG_AUX_DIR): Find aux files in $SRCDIR/build-aux, + not in $SRCDIR. + +2007-03-31 James Youngman + + * find/tree.c (build_expression_tree): Issue more specific error + messages; distinguish the case where the predicate is invalid from + the cases where a required argument is missing, and a supplied + argument is invalid. + + * import-gnulib.config (gnulib_version): Update to 2007-03-30 + version of gnulib. + +2007-03-28 James Youngman + + * find/defs.h (set_stat_placeholders): utility function for + initialising the sturct stat fields that NetBSD doesn't always set + (like st_birthtime where the file is on a filesystem not + supporting birthtime). + * find/util.c: set_stat_placeholders(): new function + (get_statinfo): Call set_stat_placeholders(). + (optionh_stat, optionl_stat, optionp_stat): ditto + * find/find.c (main, wd_sanity_check, safely_chdir_lstat, + process_dir): use set_stat_placeholders(). + * find/parser.c (parse_anewer, parse_cnewer, parse_newer, + parse_newerXY): ditto. + (get_stat_Ytime): Support birth time ('B'). + (parse_newerXY): Support st_birthtime. + * find/fstype.c (set_fstype_devno): Use set_stat_placeholders(). + * find/pred.c (pred_xtype): Use set_stat_placeholders(). + (pred_newerXY): Support birth time. + (pred_fprintf, format_date): ditto ("%Bx"). + +2007-03-25 James Youngman + + * xargs/xargs.c (main): For "xargs --show-limits" where stdin is a + terminal, warn the user that the program specified (or /bin/echo) + will be run at least once, if that is what will happen. + +2007-03-24 James Youngman + + * import-gnulib.sh: Added option -d, allowing the user to use a + local version of gnulib, perhaps because they have local changes. + +2007-03-13 James Youngman + + * find/parser.c (parse_quit): Estimated success rate of -quit is + 100%. + +2007-03-08 James Youngman + + * find/find.1 (TESTS): Document -newerXY, indicate that reference + files are only examined once. + (HISTORY): Indicate when various features were added + (BUGS): Indicate that -ok ignores LC_COLLATE. + +2007-03-07 James Youngman + + * import-gnulib.config: (gnulib_version): Use gnulib version + 2007-03-05 + (modules): Added getdate + + * find/Makefile.am (LDADD): Added @LIB_CLOCK_GETTIME@ for + clock_gettime(), if it is available. + + * find/defs.h: (enum xval): New enumeration, representing the + value of X used in the -newerXY test. It is stored in the reftime + member of 'union args'. + (struct predicate): reftime is also used by -newerXY. + (enum arg_type): Added ARG_SPECIAL_PARSE for -newerXY, because the + parsing function needs to look at the name of the test. + (struct options): start_time is now a struct timespec, not a + time_t. + + * find/parser.c: (parse_newerXY): New parsing function for + -newerXY, a feature copied from FreeBSD (also present other BSD + implementations too) + (get_stat_Ytime): New function; returns st_atime, st_mtime or + st_ctime from struct stat, as a timespec, as required according to + the value of Y in -newerXY. + (found_parser): Factored the tail out of find_parser. + (find_parser): Moved tail into found_parser. Add special handling + for -newerXY. + (do_parse_xmin): New argument xv, indicating the value to which + predicate->reftime.xval should be set. + (parse_amin): Pass XVAL_ATIME to do_parse_xmin. + (parse_cmin): Pass XVAL_CTIME to do_parse_xmin. + (parse_mmin): Pass XVAL_MTIME to do_parse_xmin. + (parse_newer): Set args.reftime.xval to XVAL_MTIME. + + * find/pred.c (pred_table): added pred_XY. + (pred_fls): options.start_time is now a struct timespec, so just + pass the tv_sec member to list_file. + (pred_ls): ditto + (pred_newerXY): New function, implementing -newerXY. + + * find/tree.c (costlookup): pred_newerXY needs stat information. + (build_expression_tree): For predicates of type ARG_SPECIAL_PARSE, + pass them in the name of the predicate (that is, don't advance + argc). + + * find/util.c (now): New function for setting options.start_time. + Use nanoseconds where it is available. + (set_option_defaults): Use now() rather than time(). + +2007-03-03 James Youngman + + * import-gnulib.sh: Pass --with-tests to gnulib-tool so that relevant + gnulib unit tests are built and are run for "make check". + + * configure.in (AC_CONFIG_FILES): Add tests/Makefile (the makefile + for the gnulib unit tests). + + * Makefile.am: Add 'tests' to SUBDIRS. + + * .cvsignore: Add 'tests'. + + * import-gnulib.config (modules): Also use Gnulib modules + mbscasestr and mbsstr in order to perform correct string searching + in multibyte strings, in order to fix Savannah bug #14535. + + * locate/testsuite/locate.gnu/sv-bug-14535.exp: new test case for + Savannah bug #14535. + + * locale/locate.c (visit_substring_match_nocasefold): Use mbsstr + rather than strstr, in order to correctly support multibyte + strings. + (visit_substring_match_casefold): Use mbscasestr rather than + strstr in order to correctly support case-folding in a multibyte + environment (e.g. with UTF-8 characters outside the normal ASCII + range). This fixes Savannah bug #14535. + (struct casefolder): No longer needed, removed + (visit_casefold): No longer needed, removed. + (lc_strcpy): No longer needed, removed. + (search_one_database): Removed redundant variable need_fold and + the code which used to set it. It had controlled the adding of + the visitor function visit_casefold, but that function itself is + no longer required. Also there is now no need to pass in a + lower-case argument to visit_substring_match_casefold, so don't + pass that in the context argument. + + * locate/locate.c (usage): Fixed typo. + +2007-03-01 James Youngman + + * doc/find.texi (Multiple Files): Document the construct + -exec sh -c 'cmd "$@" final-args' {} + - fixing Savannah bug + #18554. + +2007-02-28 James Youngman + + * import-gnulib.config: New file. Specifies which version of + Gnulib we need to check out and build from. + + * import-gnulib.sh: Use import-gnulib.config. + + * README-CVS: Describe the new method of building from CVS. + + * lib/gnulib-version.h, lib/gnulib-version.sh: New files; code for + reporting which version of Gnulib we built findutils from. + + * lib/Makefile.am: Build gnulib-version.c out of + ./gnulib-version.config by using lib/gnulib-version.sh. + + * Makefile.am: Ship import-gnulib.config and import-gnulib.sh. + + * .cvsignore: Ignore gnulib-cvs + + * lib/.cvsignore: Ignore gnulib-version.c + + * find/parser.c, locate/code.c, locate/locate.c, xargs/xargs.c: + Report which version of Gnulib we were built from. + +2007-02-25 James Youngman + + * find/find.c (process_dir): Removed duplicated (shadow) + declaration of did_stat. Assert that we did not use subdirs_left + if subdirs_unreliable is true. + + * find/parser.c (parse_size): Removed unused variable rate. + (parse_time): Removed unused variable num_days_approx. + (get_num): Removed unused variables ok and suffixes. + + * find/pred.c (do_fprintf): Indicate that the function needs a + return value (referring to Savannah bug #19146). + + * find/tree.c (predlist_dump): Commented out unused function + (predlist_merge_nosort): Commented out unused function + (getrate): Returns type is float, so return 1.0f not 1.0. + (calculate_derived_rates): Removed unused variable rate. Use a + switch statement rater than ifs. + + * find/util.c (usage): Removed unused variable i. + + * lib/buildcmd.c (bc_do_insert): Removed unused variable + need_prefix. + (bc_init_controlinfo): annotate a line (with #warning) which is + probably a bug. + + * locate/locate.c: #include for the benefit of the + setgroups() call in drop_privs. + (slocate_db_pathname): Commented out unused variable. + (set_max_db_age): error command has no format directive, so + remove the unused extra argument. + (looking_at_slocate_db): Removed unused variables magic and + lenwanted. Fix bug where result is indeterminate (due to falling + off the end of the function) if the first character is a nondigit. + (search_one_database): Eliminate (spurious) compiler warning + rlating to possible use before initialisation of slocate_seclevel. + + * xargs/xargs.c (get_char_oct_or_hex_escape): Eliminate spurious + compiler warning on variable p. + (main): Removed unused varible env_too_big + + +2007-02-24 James Youngman + + * find/parser.c (pred_sanity_check): define this function even for + _NDEBUG, but do nothing in that case. + (estimate_timestamp_success_rate): correct (invert) the sense of + the subtraction used to find the file's age. + + * import-gnulib.sh (findutils_modules): Import Gnulib modules + xstrtod and timespec. + + * find/parser.c (get_comp_type): Refactored out of get_num. + (get_num): call get_comp_type to find the comparison type. + (get_relative_timestamp): new function replacing get_num_days. + (get_num_days): Remove. + (do_parse_xmin): Support fractional arguments and + nanosecond timestamps. + (parse_used): ditto + (parse_time): ditto + + * xargs/xargs.c (read_line): Give a warning message if a NUL is + found in the input (this function is called only when -0 is not in + effect). + + * xargs/xargs.c (nullwarning_given): New variable indicating if + the NULL character warning had already been issued. + + * doc/find.texi (Multiple Files): Describe how trailing blanks are + handled when -L is in effect. + + * xargs/xargs.c (read_line): Use an enum rather than + preprocessor macro values for the lexer state. + + * lib/savedirinfo.c (free_dirinfo): Fixed memory leak (trivial + patch from Supriya Kannery) + +2007-01-22 James Youngman + + * .cvsignore (install-sh): Ignore, since the install-sh file is no + longer held in the findutils CVS repository. + + * find/testsuite/config/unix.exp (find_start): allow a test to be + skipped for either the old or the new find executable. + * find/testsuite/find.gnu/execdir-pwd.exp, + find/testsuite/Makefile.am: + New test, covering Savannah bug #18466. This test currently fails + for the ftsfind binary and passes for the oldfind binary. Due to + a limitation in the way that we perform the test, we can't tell + the test suite to expect a failure in the new binary but not the + old. Therefore we skip the test for the old binary. + + * lib/regeprops.c (describe_regex_syntax): fixed a typo in the text + * doc/find.texi (Multiple Files): fixed a typo + +2007-01-16 James Youngman + + (ctime_format): format the time manually (rather than using ctime) + in order to include the sub-second part of the time. + (weekdays, months): new static variables used by ctime_format. + (format_date): append a the sub-second part of the timestamp to + the seconds part of date/time output. + +2007-01-15 James Youngman + + * find/defs.h (time_val): define struct; use timespec to hold time + in the 'reftime' member. + (args): use struct timespec instead of time_t for predicates + -newer, -anewer, -cnewer. * find/parser.c (includes): include + stat-time.h. + (parse_anewer, parse_cnewer, parse_newer): use struct timespec to + hold timestamps. * find/pred.c (compare_ts): new function for + comparing timestamps in struct timespec. + (pred_anewer, pred_cnewer, pred_newer): use compare_ts() to + compare timestamps (hence takinng acoung of sub-second + granularity). + * find/ftsfind.c: Various improvements to comments. + (is_fts_enabled): Newline before function name to comply with GNU + coding standard. + +2007-01-13 James Youngman + + * lib/regexprops.c (describe_regex_syntax): fixed typo + + * xargs/xargs.c (read_line): Fixed Savannah bug# 18714; VT and FF + are not separators, according to POSIX (in the POSIX locale). + + * xargs/testsuite/Makefile.am, + xargs/testsuite/input/formfeeds.xi, + xargs/testsuite/input/verticaltabs.xi, + xargs/testsuite/xargs.posix/sv-bug-18714.exp, + xargs/testsuite/xargs.posix/sv-bug-18714.xo, + xargs/testsuite/xargs.posix/sv-bug-18714b.exp, + xargs/testsuite/xargs.posix/sv-bug-18714b.xo: Tests for Savannah + bug #18714. + + * xargs/xargs.c (usage): Removed suprious "[" in --help output + (fixes Savannah bug #18384). + + * locate/locate.c: Implement the option --max-database-age. + (main) Accept the option. + (set_max_db_age): Parse the argument. + + * locate/locate.c (dolocate): If the database is more than N days + old, indicate its actual age in the warning message we produce. + + * locate/locate.1, docs/find.texi: Document --max-database-age + + * THANKS: Thank Dean Gaudet for the idea of -sparse. + + * po/findutils.pot: Updated from Translation Project + + * po/ga.po, po/pl.po, po/nl.po, po/tr.po, po/hu.po: Updated from + the Translation Project + +2007-01-09 Ralf Wildenhues + + * doc/find.texi: Fix some typos. (trivial change) + +2007-01-07 James Youngman + + * find/parser.c (parse_perm), find/testsuite/find.gnu/perm000.exp, + find/testsuite/find.gnu/perm000.xo: -perm /000 is now quivalent + to -perm -000, as dscussed in Savannah bug #14748. The warning + message we issue when the user does this now explains that the + defintion changed as we promised it would in 2005. + + * xargs/xargs.c (read_line): Correctly handle quoted empty + arguments occurring first or last on a line (by adding an empty + argument to the output). Fixes Savannah bug #18713. + + * xargs/testsuite/xargs.sysv/sv-bug-18713.exp, + xargs/testsuite/xargs.sysv/sv-bug-18713.xo, + xargs/testsuite/input/empty.xi: Test case for Savannah bug #18713. + + +2006-12-29 James Youngman + + * find/testsuite/config/unix.exp: + Verify that find_start is invoked with wither a p (pass) or an f + (fail) argument. + + * lib/listfile.c, lib/listfile.h: + define find_blocksize() and provide a declaration for get_link_name() + + * find/testsuite/config/unix.exp: Updated copyright years. + + * find/testsuite/find.gnu/execdir-one.exp, find/testsuite/find.gnu/execdir-root-only.exp, find/testsuite/find.gnu/sv-bug-12230.exp, find/testsuite/find.gnu/sv-bug-17782.exp, find/testsuite/config/unix.exp: + Avoid tests using -execdir if $PATH contains a relative directory + + * find/parser.c: + Also flag $PATH values containing relative directories as being dangerous. + + * find/parser.c, find/defs.h, find/util.c: + Instead of selecting the old or new exec handling code with the NEW_EXEC macro, just use the new code all the time + + * locate/testsuite/config/unix.exp: + Fixed Savannah bug #13252, test suite failure caused by the fact that 'file normalize' is not available in Tcl 8.3 + + * NEWS, find/pred.c: + Fixed Savannah bug #18433, compilation failure with configure --enable-debug + +2006-12-28 James Youngman + + * NEWS: Document addition of %S. + + * find/defs.h, find/find.1, find/parser.c, find/pred.c: + Implemented %S (sparseness) printf format, and general refactoring and cleanup of printf predicate + +2006-12-01 James Youngman + + * NEWS, configure.in: Begin work on findutils 4.2.30 + + * find/find.c: + Fix compilation error for oldfind if --enable-debug was passed to configure + + * NEWS, configure.in: Prepare for work on findutils-4.3.3 + +2006-11-25 James Youngman + + Release 4.3.2. + + * find/testsuite/Makefile.am: Added test case for Savannah bug #17782 + + * doc/textinfo.tex: Removed; we now use the version supplied + by automake. + + * m4/mkinstalldirs.m4: Added this file. It's an excerpt from an + old version of gnulib's m4/nls.po file. The current version of + gnulib does not expand MKINSTALLDIRS, but gettext-0.14.6's version + of po/Makefile.in.in expects it to be expanded. This m4 file + fills the gap. + +2006-11-20 James Youngman + + * po/et.po, po/bg.po, po/pl.po, po/nl.po, po/tr.po: Updated + translations for Bulgarian, Estonian, Dutch, Polish and Turkish. + +2006-11-08 James Youngman + + * find/testsuite/Makefile.am: + Oops, indicate the right directory for the new test files + + * ChangeLog, depcomp, doc/texinfo.tex, find/ftsfind.c, find/testsuite/Makefile.am, find/testsuite/find.gnu/sv-bug-18222.exp, find/testsuite/find.gnu/sv-bug-18222.xo, install-sh: + Savannah bug#18222 - test case + + * ChangeLog, lib/buildcmd.c: + Fixed Svannah bug #17782 ('./' prefix added at start of arg while it should be added at the start of the expansion of {}) + + * find/ftsfind.c (process_all_startpoints): Set + state.starting_path_length for every pathname argument. + This fixes Savannah bug #18222. + + * find/pred.c (pred_prune): -prune should have an effect only if we are + currently considering a directory (Savannah bug #15531). + +2006-10-15 James Youngman + + * lib/buildcmd.c: Fixed Savannah bug #17782, in which "find + -execdir echo "foo {}" runs 'echo ./foo filename' instead of the + correct command 'echo foo ./filename'. + + * po/hu.po, po/sl.po: Updated Hungarian and Slovenian po files + +2006-08-21 James Youngman + + * find/parser.c, find/testsuite/Makefile.am, find/testsuite/find.gnu/sv-bug-17490.exp: + Fixed Savannah bug #17490, which was a coiredump when -regex ZZZ was the final test on the command line + +2006-08-20 James Youngman + + * find/parser.c: Merged the fix for the trailing % in "find -printf". + +2006-08-20 Paul Eggert + + Port recent fixes for symbolic modes involving X from gnulib, + and clarify the documentation in this area. + * doc/find.texi: Use "file mode bits" when talking about + all the file mode bits (including setuid, setgid, and sticky), + and "permissions" when talking only about permissions bits + (read, write, execute/search). Use "execute/search" to + talk about the x bit, since it means both. You do not need + permission to the linked-to file to follow a symlink for + syscalls like "stat", but you do need search permission for + the directories you traverse. Clarify the explanation of + -perm. Use "that" instead of "which" when "which" isn't + quite correct English. + (Mode Bits): Renamed from Permissions. All uses changed. + * doc/perm.texi: Sync from coreutils 6.0. + * find/defs.h (struct perm_val.val): Now an array of two items, + one for non-directories, and one for directories. This is + to handle symbolic modes like +X correctly. + * find/parser.c (parse_perm): Likewise. Also, adjust to + latest gnulib interface for mode_adjust. + * find/pred.c (pred_perm): Likewise. + * find/testsuite/Makefile.am (EXTRA_DIST_XO): Add find.posix/perm-X.xo. + (EXTRA_DIST_EXP): Add find.posix/perm-X.exp. + * find/testsuite/find.posix/perm-X.exp: New file. + * find/testsuite/find.posix/perm-X.so: New file. + +12006-08-19 Paul Eggert + + Port to latest gnulib, and simplify the bootstrapping procedure. + * intl: Remove this directory and everything in it. + * depcomp, install-sh, missing, mkinstalldirs, doc/texinfo.tex: + Remove these files from CVS, as they are now gotten from gnulib. + * README-CVS: Don't recommend "autoreconf -i", as it doesn't work + for us. + * import-gnulib.sh (findutils_files): New var. Grab this stuff + from gnulib. + (findutils_modules): Add fopen-safer; remove stdio-safer. This + adjusts to latest gnulib. + (modules): Remove obsolete reference to intl_modules. + * .cvsignore: Remove stamp-h; add stamp-h1. + * doc/.cvsignore: Add regexprops.texi. + * find/.cvsignore: Add oldfind. + * lib/.cvsignore: Add .deps, regexprops. + * m4/.cvsignore: Add Makefile. + * po/.cvsignore: Add stamp-po. + +2006-08-19 James Youngman + + * locate/testsuite/config/unix.exp, locate/testsuite/locate.gnu/bigprefix1.exp: + Explicit checks for parefixes which are within range of a short, but outside the one-byte range + + * locate/testsuite/locate.gnu/bigprefix1.exp, locate/testsuite/locate.gnu/exceedshort.exp, locate/testsuite/locate.gnu/space1st.exp: + New file. + + * locate/testsuite/Makefile.am, locate/testsuite/locate.gnu/exceedshort.exp, locate/testsuite/locate.gnu/space1st.exp: + Patch from Tavis Ormandy; check frcode handles initial space end encodes paths with more than 2^16 characters in the common prefix (trivial change) + + * locate/frcode.c: Changes to avoid overflows + +2006-08-11 James Youngman + + * locate/frcode.c: + Avoid producing an invalid database if the first item begins with a space + +2006-08-10 James Youngman + + * find/pred.c, import-gnulib.sh, lib/listfile.c: + Updated callers of the gnnulib filemode module so that they work with the 2006-07-09 version of gnulib + + * config.rpath: Updated config.rpath from autotools + +2006-08-08 James Youngman + + * locate/locatedb.h: + Automatically verify (at compile time) that the frcode datastream + cannot get desynchronised. + + * find/ftsfind.c: + Fixed Savannah bug #10494 (-maxdepth does not yield the same stat savinf in ftsfind as oldfind) + + * find/ftsfind.c: display fts_level for find -D search + + * find/util.c: Support find -D search + + * locate/locate.c: + If the user specified -E but the database is an slocate database, do + not produce a list of files they cannot stat. Issue an error message + explaining the problem. + + * locate/locate.c: + Issue states messages in a way which indicates more clearly what's + happening when the numbers are reduced because not every filename + matched the pattern. + + * locate/locate.c: Better error checking in drop_privs(). + +2006-08-07 James Youngman + + * NEWS, locate/locate.c, locate/locatedb.h: + Added support for slocate database format + + * xargs/xargs.c: + Removed unused code (tivial patch from Miloslav Trmac). + + * xargs/xargs.c: Removed unused code. + + * doc/find.texi: + Clarify that the output format for locate -S differs from BSD's. + + * NEWS, find/find.1: + Savannah bug #15360: explain global vs. positional options more clearly in the manual page + + * NEWS: Typo in subsection header (* should be **). + + * NEWS, find/find.1: + Savannah bug #15360: explain global vs. positional options more clearly in the manual page + + * doc/find.texi: Fixed some clumsy phrasing + + * NEWS, configure.in: + Now diverging again from the released tarball, so change once more to -CVS version number suffixes + +2006-08-06 James Youngman + + * locate/locate.c: Fixed a typo in a comment. + + * NEWS, configure.in: Moving on towards 4.3.2... + + Release 4.3.1. + + * find/testsuite/config/unix.exp: + Check that we can see the find.o file in the right position relative + to $base_dir to ensure that we are indeed testing the program we just built. + + * find/testsuite/config/unix.exp: + Be more paranoid about whether we're really checking the right version + of find. + + * NEWS, configure.in: Prepare for release of 4.3.1 + + * doc/find.texi: Document the -O and -D options + + * find/defs.h, find/find.1, find/util.c: + 'find -D help' now explains the available debugging options + + * po/be.po, po/bg.po, po/ca.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fi.po, po/findutils.pot, po/fr.po, po/ga.po, po/gl.po, po/hr.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lg.po, po/ms.po, po/nl.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/rw.po, po/sk.po, po/sl.po, po/sr.po, po/sv.po, po/tr.po, po/vi.po, po/zh_CN.po, po/zh_TW.po: + Make dist changed all the po files again + +2006-08-05 James Youngman + + * NEWS: Described more changes in 4.3.1. + + * locate/testsuite/config/unix.exp: + Set the environment variable so that updatedb knows where to find it; it's not in BINDIR yet during 'make check' + + * po/be.po, po/bg.po, po/ca.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fi.po, po/findutils.pot, po/fr.po, po/ga.po, po/gl.po, po/hr.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lg.po, po/ms.po, po/nl.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/rw.po, po/sk.po, po/sl.po, po/sr.po, po/sv.po, po/tr.po, po/vi.po, po/zh_CN.po, po/zh_TW.po: + Make dist changed all the po files again :) + + * po/et.po, po/vi.po: UPdated the Estonian and Vietnamese translations + + * NEWS, configure.in: Prepare for release of findutils-4.2.28 + + * po/sv.po, po/tr.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/be.po, po/bg.po, po/ca.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fi.po, po/findutils.pot, po/fr.po, po/ga.po, po/gl.po, po/hr.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lg.po, po/ms.po, po/nl.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/rw.po, po/sk.po, po/sl.po, po/sr.po: + Make dist changed all the po files again :) + + * configure.in: Added Bulgarian translation. + + * po/bg.po: Include Bulgarian translation + + * configure.in: Added Bulgarian translation. + + * po/et.po, po/vi.po: Updated Estonian and Vietnamese translations + + * NEWS: Removed spurious comma. + + * NEWS: Listed the updated translations. + + * find/parser.c, lib/buildcmd.c, lib/buildcmd.h, xargs/xargs.c: + Fixed Savannah bug#16738, find does not subtract environment size in find .. -exec {} + + + * NEWS: Updated the list of bugfixes etc. + +2006-06-15 James Youngman + + * NEWS: Described recent changes + + * configure.in: fix to how we invoke the gnulib regex module + + * find/find.1: + Savannah bug #16269: avoid confusion over what type of quotes to use + in an example. + + * find/parser.c: Option -nowarn should not itself produce a warning + + * find/defs.h: Remoevd useless declaration of last_pred + +2006-06-14 James Youngman + + * po/be.po, po/ca.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fi.po, po/findutils.pot, po/fr.po, po/ga.po, po/gl.po, po/hr.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lg.po, po/ms.po, po/nl.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/rw.po, po/sk.po, po/sl.po, po/sr.po, po/sv.po, po/tr.po, po/vi.po, po/zh_CN.po, po/zh_TW.po: + Updated translation files ga pl sv tr nl ca vi bg fr + + * locate/updatedb.sh: + Fixed Savannah bug #16579 (su false should be su -c false) + +2006-04-01 James Youngman + + * find/find.c: + Fixed Savannah bug #15800: "Hard link count is wrong" reports wrong + directory name. + +2006-03-31 James Youngman + + * po/hu.po: Updated Hungarian translation + +2006-01-04 James Youngman + + * find/testsuite/find.posix/sizetype.exp, find/testsuite/find.posix/sizetype.xo, find/testsuite/find.posix/typesize.exp, find/testsuite/find.posix/typesize.xo: + Additional tests for -type -size and -size -type + + * NEWS, doc/find.texi, find/defs.h, find/find.1, find/find.c, find/ftsfind.c, find/parser.c, find/pred.c, find/testsuite/Makefile.am, find/testsuite/config/unix.exp, find/testsuite/find.gnu/depth-d.exp, find/tree.c, find/util.c, po/be.po, po/ca.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fi.po, po/findutils.pot, po/fr.po, po/ga.po, po/gl.po, po/hr.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lg.po, po/ms.po, po/nl.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/rw.po, po/sk.po, po/sl.po, po/sr.po, po/sv.po, po/tr.po, po/vi.po, po/zh_CN.po, po/zh_TW.po: + Initial implementation of a cost-based optimiser + +2005-12-23 James Youngman + + * find/parser.c: Refactor of parse_[acm]time + + * find/defs.h, find/find.c, find/finddata.c, find/ftsfind.c, find/tree.c, find/util.c: + last_pred can be a static in tree.c rather than a global variable + + * find/tree.c, find/finddata.c: + Moved some global data out of finddata.o and into static variables in tree.c + + * NEWS, find/find.c, find/fstype.c, find/ftsfind.c, find/parser.c, find/pred.c, lib/buildcmd.c, lib/buildcmd.h, lib/regexprops.c, lib/regextype.c, lib/regextype.h, lib/savedirinfo.c, locate/locate.c, xargs/xargs.c: + Fixed many compilation warnings + + * find/find.c, find/ftsfind.c, find/util.c: + Evaluating the predicates can change the contents of the data structure (for example to add another exec item) + + * find/defs.h, find/find.c, find/ftsfind.c, find/tree.c, find/util.c: + Re-factored a lot of common expression-handling code out of find.c and ftsfind.c, mainly into tree.c + + * find/find.c, find/ftsfind.c, find/tree.c: + Savannah bug #15271: more helpful error messages for cases where there is a missing expression + +2005-12-20 James Youngman + + * NEWS, doc/find.texi, find/defs.h, find/find.1, find/find.c, find/ftsfind.c, find/testsuite/Makefile.am, find/testsuite/find.posix/sv-bug-15235.exp, find/testsuite/find.posix/sv-bug-15235.xo, find/tree.c, find/util.c: + Savannah bug #15195: more helpful error messages for 'find . ( )' or 'find . \!' + + * ChangeLog: Added entries for recent changes. + + * find/defs.h, find/find.c, find/ftsfind.c, find/testsuite/find.posix/bracket-depth.exp, find/util.c: + Further fix to bug# 15235: a leading comma is a filename not an expression + + * find/defs.h, find/parser.c, find/testsuite/Makefile.am, find/testsuite/find.posix/empty-parens.exp, find/tree.c: + Accept 'find ( -depth )' but reject 'find ( )' + + * po/be.po, po/ca.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fi.po, po/findutils.pot, po/fr.po, po/ga.po, po/gl.po, po/hr.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lg.po, po/ms.po, po/nl.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/rw.po, po/sk.po, po/sl.po, po/sr.po, po/sv.po, po/tr.po, po/vi.po, po/zh_CN.po, po/zh_TW.po: + did make dist + + * find/testsuite/find.gnu/delete.exp: + Use the new find program, and the new way of locating it (/ instead of ) + + * find/testsuite/Makefile.am: Added bracket-depth.exp. + + * NEWS, configure.in: We have moved on from 4.3.0 + + * find/defs.h, find/find.c, find/ftsfind.c, find/testsuite/Makefile.am, find/testsuite/find.gnu/delete.exp, find/testsuite/find.posix/files-not-expressions1.exp, find/testsuite/find.posix/files-not-expressions1.xo, find/testsuite/find.posix/files-not-expressions2.exp, find/testsuite/find.posix/files-not-expressions2.xo, find/testsuite/find.posix/files-not-expressions3.exp, find/testsuite/find.posix/files-not-expressions3.xo, find/util.c: + Avoid getting confused by filename arguments of which the first + character looks like a predicate, for example ',x' or '!x' or + '(x' (Savannah bug #15235). + +2005-12-20 James Youngman + + * find/defs.h, find/find.c, find/ftsfind.c, + find/testsuite/find.posix/bracket-depth.exp, find/util.c: Further + fix to bug# 15235: a leading comma is a filename not an expression + + * find/defs.h, find/parser.c, find/testsuite/Makefile.am, + find/testsuite/find.posix/empty-parens.exp, find/tree.c: Accept + 'find ( -depth )' but reject 'find ( )' + + * find/testsuite/find.gnu/delete.exp: Use the new find program, + and the new way of locating it ($OLDFIND/$FTSFIND instead of $FIND) + + * find/testsuite/Makefile.am: Added bracket-depth.exp. + + * NEWS, configure.in: We have moved on from 4.3.0 + + * find/defs.h, find/find.c, find/ftsfind.c, + find/testsuite/Makefile.am, find/testsuite/find.gnu/delete.exp, + find/testsuite/find.posix/files-not-expressions1.exp, + find/testsuite/find.posix/files-not-expressions1.xo, + find/testsuite/find.posix/files-not-expressions2.exp, + find/testsuite/find.posix/files-not-expressions2.xo, + find/testsuite/find.posix/files-not-expressions3.exp, + find/testsuite/find.posix/files-not-expressions3.xo, find/util.c: + Avoid getting confused by filename arguments of which the first + character looks like a predicate, for example ',x' or '!x' or '(x' + (Savannah bug #15235). + +2005-12-19 James Youngman + + * find/testsuite/config/unix.exp: + Run every test twice, once with the old (non-fts) binary and once with + the new (fts-enabled) binary. + +2005-12-19 Eric Blake + + * find/testsuite/Makefile.am, + find/testsuite/find.posix/sv-bug-15235.xo, + find/testsuite/find.posix/sv-bug-15235.exp: New tests for Savannah + bug 15235. + + * NEWS, find/find.1, doc/find.texi (Invoking find): Document bug + fix for Savannah bug 15235. + +2005-12-16 James Youngman + + * xargs/xargs.1, xargs/xargs.c: Fixed bug# 15211, that xargs + --show-limits is not documented in the manpage or in the usage + message + +2005-12-12 James Youngman + + Release 4.3.0. + + * find/testsuite/find.gnu/access.exp: + Don't leave junk files lying around the place + + * README-CVS: Update the the instructions for getting gnulib; the + CVS arrangements at Savannah have changed. + + * ChangeLog, NEWS, doc/find.texi, doc/perm.texi, find/defs.h, find/parser.c: + Merged changes from 4.2.x branch again + + * NEWS, doc/find.texi, find/defs.h, find/find.c, find/ftsfind.c, + find/parser.c, find/pred.c, find/util.c, lib/listfile.c, + lib/listfile.h: Initial code to allow control over how -ls quote + (or does not quote) control characters; not enabled yet + +2005-12-11 James Youngman + + * ChangeLog, THANKS, xargs/xargs.c: + Fixed spelling errors in Bob Proulx's name. Sorry, Bob. + +2005-12-10 James Youngman + + * doc/perm.texi: + Aaron Hawley: Updated perm.texi from the coreutils distribution + + * find/parser.c: + Avoid using entries which have the same name as POSIX library + functions (fprintf, printf, exec) as the implementation is allowed to + #define these. That generates hard-to-grok compilation errors. + +2005-12-10 Andreas Metzler + + * ChangeLog, NEWS, configure.in, find/defs.h, find/parser.c: + Applied patch from Andreas Metzler fixing Savannah bug #15181: + implicit declaration of parse_openparen + +2005-12-08 James Youngman + + * doc/find.texi: Typo and spelling corrections from Aaron Hawley + +2005-12-05 James Youngman + + * Released findutils-4.2.27 + +2005-12-05 James Youngman + + * doc/find.texi, find/find.1, locate/locate.1, xargs/xargs.1: + Savannah patch #3775 from Aaron Hawley: reconciling man pages + differences; did not apply the patch, but resolved all the + remaining issues manually by updating the documentation (mostly + the Texinfo documentation, which was missing a number of specific + technical statements about the behaviour of various options) + +2005-12-04 James Youngman + + * doc/find.texi: Document --show-limits + + * xargs/xargs.c: + Correctly display the size of the argument buffer we really allocated. + + * doc/find.texi, find/find.1, find/parser.c, find/pred.c, NEWS: + Savannah bug #14748 (which this change does NOT fix): issue + warning of future changes in the behaviour of -perm /000 + +2005-11-30 James Youngman + + * xargs/xargs.c: + Typo correction from Benno Schulenberg + (trivial change) + +2005-11-29 James Youngman + + * xargs/xargs.c: + Typo "Ilegal"; change to "Invalid" since this is not really illegal! + Bug report by Primoz Peterlin. + + * lib/regexprops.c, xargs/xargs.c: + Prefer the word 'Invalid' or the phrase 'not allowed' over + 'Illegal', as per the GNU coding standards, and as per the + suggestion from Benno Schulenberg + +2005-11-24 James Youngman + + * NEWS, lib/buildcmd.c, lib/buildcmd.h: Merge to trunk from 4.2.x fixes + + * lib/buildcmd.h: + Deleted inaccurate comment about the default value of ctl->args_per_exec. + + * NEWS, lib/buildcmd.c, lib/buildcmd.h: + Be more conservative about the total number of arguments we will + allow (to avoid exec limits on Linux/PPC) + +2005-11-23 James Youngman + + * NEWS: Bug #14921 has been fixed. + + * find/fstype.c: + Savannah bug #14921: when a Linux bind filesystem is in use, find + would expand '-printf %F' to 'none' if a bind mount targetted the same + filesystem as the one containing the file to be described. + + * NEWS: Updated to describe recent changes + + * doc/find.texi, find/find.1: Documented find -printf %M + + * lib/buildcmd.c, xargs/testsuite/Makefile.am, + xargs/testsuite/xargs.posix/arg_max_32bit_linux_bug.exp, + xargs/testsuite/xargs.posix/arg_max_32bit_linux_bug.xo, + xargs/testsuite/xargs.posix/arg_max_64bit_linux_bug.exp, + xargs/testsuite/xargs.posix/arg_max_64bit_linux_bug.xo: + Ensure that the test suite still passes even if the current + system's value of ARG_MAX is different from the development/test + system + + * lib/buildcmd.c: reindent and untabify + + * configure.in: The CVS code is moving on from the previous release. + +2005-11-22 James Youngman + + * ChangeLog: Updated with recent changes. + +2005-11-21 James Youngman + + * locate/testsuite/config/unix.exp: + Even if we expect locate to return a nonzero status, the test should + still fail if updatedb fails! + + * locate/testsuite/locate.gnu/ignore_case2.exp: + Set the current directory for updatedb. This test case is supposed to + fail because the filename is not matched, not because updatedb fails! + + * locate/updatedb.sh: + Check the binaries actually exist in the place we expect. + +2005-11-20 James Youngman + + * locate/locate.1, xargs/xargs.1: Escape '-' as '\-' where appropriate. + + * find/find.1: + Escape '-' as '\-' where appropriate. Fixes last part of bug #14556. + +2005-11-19 James Youngman + + * doc/find.texi, find/find.1: + Applied edited form of Andreas Metzler's -perm /mode documentation + patch resolving Savannah bug #14619. + + * lib/extendbuf.c: + In the success case, extendbuf() should preserve the previous value of + errno. Fixes Savannah bug #14842. + + * xargs/testsuite/Makefile.am: Added new test files + + * find/find.1: + Correctly indicate the default regular expression syntax (fixes + Savannah bug #14836). + + * NEWS, configure.in: Released findutils-4.2.26 + + * ChangeLog, NEWS, lib/buildcmd.c, + xargs/testsuite/inputs/16383-ys.xi, + xargs/testsuite/inputs/32767-ys.xi, + xargs/testsuite/xargs.posix/arg_max_32bit_linux_bug.exp, + xargs/testsuite/xargs.posix/arg_max_32bit_linux_bug.xo, + xargs/testsuite/xargs.posix/arg_max_64bit_linux_bug.exp, + xargs/testsuite/xargs.posix/arg_max_64bit_linux_bug.xo: Applied + bugfix from Jim Meyering (tiny change), where many short arguments + would cause xargs (and probably find -exec .. {} +) to fail + because execve() returns E2BIG, which we should avoid + + * xargs/testsuite/inputs/16383-ys.xi, + xargs/testsuite/inputs/32767-ys.xi, + xargs/testsuite/xargs.posix/arg_max_32bit_linux_bug.exp, + xargs/testsuite/xargs.posix/arg_max_32bit_linux_bug.xo, + xargs/testsuite/xargs.posix/arg_max_64bit_linux_bug.exp, + xargs/testsuite/xargs.posix/arg_max_64bit_linux_bug.xo: New file. + + * po/be.po, ca.po, da.po, de.po, el.po, eo.po, es.po, et.po, fi.po, + findutils.pot, fr.po, ga.po, gl.po, hr.po, hu.po, id.po, it.po, + ja.po, ko.po, lg.po, ms.po, nl.po, pl.po, pt.po, pt_BR.po, ro.po, + ru.po, rw.po, sk.po, sl.po, sr.po, sv.po, tr.po, vi.po, zh_CN.po, + zh_TW.po: Updated Portuguese .po file and did update-po + +2005-11-18 Jim Meyering (tiny change) + + * lib/buildcmd.c (bc_push_arg): When exec'ing, don't exceed + Linux's limit on the maximum number of command line arguments. + +2005-11-11 James Youngman + + * NEWS, find/find.c, find/fstype.c: Savannah bug #14922: if we need the + list of mounted filesystems but it is not available, exit fatally + with a message. If it is not available but we don't need it, + there is no need for an error. + + * po/ro.po, ru.po, rw.po, sk.po, sl.po, sr.po, sv.po, tr.po, vi.po, + zh_CN.po, zh_TW.po, ko.po, lg.po, ms.po, nl.po, pl.po, pt.po, + pt_BR.po, be.po, ca.po, da.po, de.po, el.po, eo.po, es.po, et.po, + fi.po, findutils.pot, fr.po, ga.po, gl.po, hr.po, hu.po, id.po, + it.po, ja.po: Updated Polish translation + +2005-10-31 James Youngman + + * doc/find.texi: + Removed redundant additional description of "--regextype". + +2005-10-08 James Youngman + + * find/find.c, lib/regextype.c: Fixed Savannah bug #14616, which + was that c99 code had crept in and it didn't compile on c89 + compilers + + * doc/find.texi: Savannah patch #4371 from Andreas Metzler; the + argument of -I is mandatory + +2005-09-21 James Youngman + + * xargs/xargs.1, xargs/xargs.c: Clarified the -E option + +2005-09-20 James Youngman + + * NEWS, configure.in, doc/find.texi, xargs/xargs.1, xargs/xargs.c: + Documentation clarification: -L and -I take a mandatory argument; + -l and -i do not + +2005-09-17 James Youngman + + * xargs/xargs.c: + Fixed Savannah bug #14550 - if environment is too large to allow + exec() to work, we cannot even use "xargs --help". + + * find/find.1: + Avoid the use of -perm +mode, using -perm /mode instead. From comment + by Andreas Metzler (though I didn't read the patch). + + * ChangeLog, doc/find.texi, find/find.1, xargs/xargs.1: + Typo fix from A Costa (tiny change) + + * NEWS: Corrections for find manual page - symbolic permissions. + + * find/find.1: + Corrected an inaccuracy in the EXAMPLES section - in symbolic modes, + 'o' stands for 'others' and 'u' stands for 'user' (i.e. the owner). + +2005-09-17 A Costa (tiny change) + + docs/find.texi: Fixed typo + find/find.1: Fixed typo + xargs/xargs.1: Fixed typo + +2005-09-17 James Youngman + + * NEWS: Corrections for find manual page - symbolic permissions. + + * find/find.1: + Corrected an inaccuracy in the EXAMPLES section - in symbolic modes, + 'o' stands for 'others' and 'u' stands for 'user' (i.e. the owner). + +2005-09-06 James Youngman + + * xargs/xargs.c: Typo in "IEEE" in a comment. + +2005-09-04 James Youngman + + * find/defs.h, find/find.c, find/parser.c, find/pred.c, + Work around compilation failure with GCC 4 and AIX 5.1, in which + open is #defined to open64 + + * po/be.po, ca.po, da.po, de.po, el.po, eo.po, es.po, et.po, fi.po, + findutils.pot, fr.po, ga.po, gl.po, hr.po, hu.po, id.po, it.po, + ja.po, ko.po, lg.po, ms.po, nl.po, pl.po, pt.po, pt_BR.po, ro.po, + ru.po, rw.po, sk.po, sl.po, sr.po, sv.po, tr.po, vi.po, zh_CN.po, + zh_TW.po: Work around compilation failure with GCC 4 and AIX 5.1, + in which open is #defined to open64 + +2005-09-03 James Youngman + + * find/testsuite/find.gnu/quit.exp: Fixed Savannah bug#14390, by + avoiding an accidental assumption in quit.exp that directory + entries are returned by readir() in any particular order + + * NEWS, configure.in, doc/find.texi, xargs/testsuite/Makefile.am, + xargs/testsuite/inputs/helloworld.xi, + xargs/testsuite/xargs.gnu/delim-o.exp, + xargs/testsuite/xargs.gnu/delim-o.xo, xargs/xargs.1, + xargs/xargs.c: Added the --delimiter option to xargs, resolving + Savannah support request sr #102914 + + * ChangeLog, NEWS, configure.in: Released findutils-4.2.25 + + * po/sr.po, sv.po, tr.po, vi.po, zh_CN.po, zh_TW.po, sl.po, be.po, + ca.po, da.po, de.po, el.po, eo.po, es.po, et.po, fi.po, + findutils.pot, fr.po, ga.po, gl.po, hr.po, hu.po, id.po, it.po, + ja.po, ko.po, lg.po, ms.po, nl.po, pl.po, pt.po, pt_BR.po, ro.po, + ru.po, rw.po, sk.po: Did update-po + +2005-09-02 James Youngman + + * doc/find.texi, find/find.1: + Improved documentation in response to Savannah bug #14376 + +2005-09-01 James Youngman + + * po/ChangeLog, ChangeLog: Updated with recent changes. + + * locate/locate.c: Removed unused struct stringbuf.soffs. + + * doc/find.texi: Typo fix from Jim Meyering (trivial change) + +2005-09-01 Jim Meyering + + * locate/locate.c (struct stringbuf) [soffs]: Remove unused member. + (locate): Remove initialization, too. + +2005-09-01 James Youngman + + * doc/find.texi: Typo fix from Jim Meyering (trivial change) + +2005-08-30 James Youngman + + * find/defs.h, find/find.c, find/fstype.c, find/pred.c: + Attempted fix for compilation when AFS is #defined + +2005-08-24 James Youngman + + * po/sl.po: Updated from Translation Project + +2005-08-13 James Youngman + + * find/find.1: Remind the user to quote the pattern argument to -iname. + +2005-08-12 James Youngman + + * NEWS: Corrected typo. + +2005-08-11 James Youngman + + * po/fr.po: Updated French translation and added new PO file zh_TW.po + for Chinese (traditional) + +2005-08-09 James Youngman + + * NEWS: Indicate that regexprops.texi is built on Cygin now that + Savannah bug #14025 has been fixed. + + * lib/Makefile.am, lib/regexprops.c: Fixed compilation failure on + Cygwin - Savannah Bug #14025 (tiny change, three lines), reported + and fixed by Eric Blake + + * find/testsuite/Makefile.am, + find/testsuite/find.posix/sv-bug-14070.exp, + find/testsuite/find.posix/sv-bug-14070.xo: Added new test case for + SourceForge bug #14070 + + * find/testsuite/find.posix/sv-bug-14070.exp, + find/testsuite/find.posix/sv-bug-14070.xo: New file. + + * find/defs.h, find/ftsfind.c, find/pred.c, find/util.c: + Ensure we can still build with --enable-debug + + * find/testsuite/config/unix.exp, + find/testsuite/find.gnu/execdir-one.exp, + find/testsuite/find.gnu/execdir-root-only.exp, + find/testsuite/find.gnu/sv-bug-12230.exp: If . is on $PATH, + indicate that the -execdir tests cannot be carried out, as opposed + to indicating that those tests fail + +2005-08-07 James Youngman + + * NEWS: Indicated that some test suite files have been renamed. + + * xargs/testsuite/Makefile.am, xargs/testsuite/inputs/eof.xi, + xargs/testsuite/inputs/eof1.xi, + xargs/testsuite/xargs.sysv/eof.exp, + xargs/testsuite/xargs.sysv/eof.xo, + xargs/testsuite/xargs.sysv/eof1.exp, + xargs/testsuite/xargs.sysv/eof1.xo, + xargs/testsuite/xargs.posix/lc_l2.exp, + xargs/testsuite/xargs.posix/lc_l2.xo, + xargs/testsuite/xargs.sysv/l2.exp, + xargs/testsuite/xargs.sysv/l2.xo, + xargs/testsuite/xargs.sysv/lc_l2.exp, + xargs/testsuite/xargs.sysv/lc_l2.xo, + xargs/testsuite/xargs.posix/L2.exp, + xargs/testsuite/xargs.posix/l2.exp, + xargs/testsuite/xargs.posix/L2.xo, + xargs/testsuite/xargs.posix/l2.xo, + xargs/testsuite/xargs.posix/uc_L2.exp, + xargs/testsuite/xargs.posix/uc_L2.xo: Work around problems with + CVS clients on case-insentitive operating systems + + * debian/Changelog: Removed Changelog file since changelog is the + one we should be using and having both files upsets Cygwin + systems which cannot tell the dirrerence between changelog and + Changelog + + * find/ftsfind.c: + If DEBUG is defined, show the symbolic names fro fts_info values. + + * find/ftsfind.c: Added additional diagnostics. + +2005-08-02 James Youngman + + * po/tr.po, vi.po: + Updated Vietnamese and Turkish translations from Translation Project + + * po/sl.po, sr.po, sv.po, tr.po, vi.po, zh_CN.po, be.po, ca.po, da.po, de.po, el.po, eo.po, es.po, fi.po, findutils.pot, fr.po, ga.po, gl.po, hr.po, hu.po, id.po, it.po, ja.po, ko.po, lg.po, ms.po, pl.po, pt.po, pt_BR.po, ru.po, rw.po: + Did update-po + + * po/et.po, sk.po, ro.po: + Updated Romanian, Slovak and Estonian translations from Translation Project + +2005-08-01 James Youngman + + * ABOUT-NLS, INSTALL, Makefile.am, configure.in, depcomp, + doc/texinfo.tex, install-sh, missing, mkinstalldirs: By adding the + missing AM_GNU_GETTEXT_VERSION call, allowed autopoint to update + those files of which it has updated copies. + + * po/Makevars.template, po/Makefile.in.in, po/findutils.pot: + Using AM_GNU_GETTEXT_VERSION, allowed gettext to update the infrastructure + + * po/Rules-quot, po/boldquot.sed, po/en@boldquot.header, po/en@quot.header, po/insert-header.sin, po/quot.sed: + Files added by autopoint now that we are using AM_GNU_GETTEXT_VERSION + + * find/testsuite/Makefile.am: Added find.gnu./perm-slash.{exp,xo}. + + * po/nl.po: Updated Dutch translation from Translation Project + + * po/ga.po: Updated Irish translation from the Translation Project + + * po/da.po: Updated Danish translation from the Translation Project + + * po/ca.po: Updated Catalan translation from Translation Project + +2005-07-31 James Youngman + + * find/testsuite/excuses.txt: We now have tests for -perm. + + * NEWS, configure.in, find/parser.c, + find/testsuite/find.gnu/perm-slash.exp, + find/testsuite/find.gnu/perm-slash.xo: Fixed bug which caused find + -perm /440 to be treated the same as find -perm 440 + + * find/testsuite/Makefile.am: + Generic tests for -perm -NNN and -perm NNN + + * find/testsuite/excuses.txt: New file - list of test cases that + still need to be written, along with excuses why they haven't been + done yet + + * find/testsuite/find.posix/perm-vanilla.exp, + find/testsuite/find.posix/perm-vanilla.xo: Generic tests for -perm + -NNN and -perm NNN + + * find/testsuite/find.gnu/inum.exp: + Ensure that the test would fail if -inum just always returned true + + * find/testsuite/Makefile.am, find/testsuite/find.gnu/ilname.exp, + find/testsuite/find.gnu/ilname.xo, + find/testsuite/find.gnu/inum.exp, find/testsuite/find.gnu/inum.xo, + find/testsuite/find.gnu/lname.exp, + find/testsuite/find.gnu/lname.xo, + find/testsuite/find.gnu/xtype.exp, + find/testsuite/find.gnu/xtype.xo, + find/testsuite/find.posix/links.exp, + find/testsuite/find.posix/links.xo: New test cases for -ilname, + -inum, -lname, -xtype + + * find/testsuite/Makefile.am, find/testsuite/find.gnu/delete.exp, + find/testsuite/find.gnu/delete.xo, + find/testsuite/find.gnu/iregex1.exp, + find/testsuite/find.gnu/iregex1.xo, + find/testsuite/find.gnu/regex1.exp, + find/testsuite/find.gnu/regex1.xo, + find/testsuite/find.gnu/regex2.exp, + find/testsuite/find.gnu/regex2.xo, + find/testsuite/find.gnu/samefile-copy.exp, + find/testsuite/find.gnu/samefile-copy.xo, + find/testsuite/find.gnu/samefile-link.exp, + find/testsuite/find.gnu/samefile-link.xo, + find/testsuite/find.gnu/samefile-same.exp, + find/testsuite/find.gnu/samefile-same.xo, + find/testsuite/find.gnu/samefile-symlink.exp, + find/testsuite/find.gnu/samefile-symlink.xo: Further test cases + + * find/find.1: Indicate that -delete implies -depth (find.texi + already mentioned this). + + * find/testsuite/Makefile.am: + Brought the list of .exp and .xo files in Makefile.am into sync with + the actual contents of the CVS repository. + + * find/testsuite/Makefile.am, find/testsuite/find.gnu/depth-d.exp, + find/testsuite/find.gnu/depth-d.xo, + find/testsuite/find.gnu/empty.exp, + find/testsuite/find.gnu/empty.xo, + find/testsuite/find.gnu/execdir-one.exp, + find/testsuite/find.gnu/execdir-one.xo, + find/testsuite/find.gnu/false.exp, + find/testsuite/find.gnu/false.xo, + find/testsuite/find.gnu/follow-basic.exp, + find/testsuite/find.gnu/follow-basic.xo, + find/testsuite/find.gnu/gnu-or.exp, + find/testsuite/find.gnu/gnu-or.xo, + find/testsuite/find.gnu/gnuand.exp, + find/testsuite/find.gnu/gnuand.xo, + find/testsuite/find.gnu/gnunot.exp, + find/testsuite/find.gnu/gnunot.xo, + find/testsuite/find.gnu/iname.exp, + find/testsuite/find.gnu/iname.xo, + find/testsuite/find.gnu/ipath.exp, + find/testsuite/find.gnu/ipath.xo, + find/testsuite/find.gnu/iwholename.exp, + find/testsuite/find.gnu/iwholename.xo, + find/testsuite/find.gnu/path.exp, find/testsuite/find.gnu/path.xo, + find/testsuite/find.gnu/print0.exp, + find/testsuite/find.gnu/print0.xo, + find/testsuite/find.gnu/quit.exp, find/testsuite/find.gnu/quit.xo, + find/testsuite/find.gnu/true.exp, find/testsuite/find.gnu/true.xo, + find/testsuite/find.gnu/wholename.exp, + find/testsuite/find.gnu/wholename.xo, + find/testsuite/find.posix/and.exp, + find/testsuite/find.posix/and.xo, + find/testsuite/find.posix/exec-one.exp, + find/testsuite/find.posix/exec-one.xo, + find/testsuite/find.posix/grouping.exp, + find/testsuite/find.posix/grouping.xo, + find/testsuite/find.posix/name.exp, + find/testsuite/find.posix/name.xo, + find/testsuite/find.posix/posixnot.exp, + find/testsuite/find.posix/posixnot.xo, + find/testsuite/find.posix/prune.exp, + find/testsuite/find.posix/prune.xo: Added new test cases for many + of the actions and tests of find + + * find/find.c (default_prints): + not a static function, so do not declare it as one. + + * m4/withfts.m4: Fixed underquoted definition of FIND_WITH_FTS. + [this change is currently on a branch only] + +2005-07-30 James Youngman + + * find/finddata.c, find/ftsfind.c, find/parser.c, find/pred.c, + find/util.c, m4/Makefile.am, m4/withfts.m4: Initial attempt to + convert find to use gnulib's fts() + [this change is currently on a branch only] + + * find/finddata.c, find/ftsfind.c, m4/withfts.m4: New file. + [this change is currently on a branch only] + + * NEWS, configure.in, find/Makefile.am, find/defs.h, find/find.c, + import-gnulib.sh: Initial attempt to convert find to use gnulib's + fts() [this change is currently on a branch only] + +2005-07-29 James Youngman + + * NEWS, configure.in + Prepared for the release of findutils-4.2.24 + + * ChangeLog: Updated with recent changes. + + * NEWS, find/find.1, doc/find.texi: + Indicate that -ok and -okdir redirect stdin from /dev/null. + + * NEWS: Explain the directory link count change more throroughly. + + * NEWS: Fixed bug #13973. + + * find/pred.c (pred_fprintf): Fix Savannah bug #13973: Modify the + handling of -printf %Y so that it no longer modifies stat_buf + + * find/testsuite/find.gnu/printf-symlink.exp, + find/testsuite/find.gnu/printf-symlink.xo: Detect Savannah bug + #13973: pollution of stat_buf by the %Y directive (trivial change + from Andreas Metzler) + + * INSTALL, depcomp, doc/texinfo.tex, install-sh, missing, mkinstalldirs: + Updated auxilliary files from the automake-1.9 distribution + + * configure.in: + Introduce new Automake conditional, CROSS_COMPILING, true when we are corss compiling + + * find/find.c: + If we decline to follow a symbolic link due to the safety check, issue a more self-explanatory warning message + + * lib/Makefile.am: Don't build regexprops if we are cross compiling + + * doc/Makefile.am: + Depend on the regex.h file rather than the 'regexprops' binary, + because the header file will always exist even if we are doing "make + dist". Otherwise "make distcheck" fails because it tries to rebuild + find.info while the source-directory is read-only. + +2005-07-28 James Youngman + + * find/find.1: + Say "other users" rather than "rest of the world" when talking about + Unix permissions. Fixes Savannah bug #4246. + +2005-07-27 James Youngman + + * xargs/testsuite/Makefile.am: Added new test case 'childfail.exp'. + + * doc/find.texi: + Updated the description of the safe-dir-change operation to reflect + what find now does on systems that lack O_NOFOLLOW. + + * NEWS, find/parser.c: Indicate in the output of find --version if + the leaf optimisation is enabled or not + + * find/find.c: Fixed typo. + + * find/find.c: If the link count of a directory starts off less + than two, disable the leaf optimisation for this directory. + +2005-07-26 James Youngman + + * lib/regexprops.c: Further small corrections from Karl. + + * doc/find.texi: + Reordered the sections in the manual to put the "Common Tasks" and + "Worked Examples" chapters together. + + * configure.in, find/find.c: Allow the leaf optimisation to be + disabled by default with the configure option + --disable-leaf-optimisation + + * find/find.c: Removed old code for antuqie version of savedir(). + + * lib/regextype.c: Put the syntaxes in alphabetical order. + + * lib/regexprops.c: Karl made some more readability suggestions. + +2005-07-24 James Youngman + + * doc/Makefile.am: If the regexprops program has changed we should + re-run it, since it will probably now produce different output + + * lib/regextype.h: + Allow the caller to detect if one regex type is identical to another. + + * configure.in: + Define the preprocessor macro FINDUTILS for that code int he lib/ + directory can be slightly more reusable. + + * lib/regextype.c: + Allow the caller to detect if one regex type is identical to another. + + * lib/regexprops.c: + Made Texinfo style corrections suggested by Karl Berry. + +2005-07-22 James Youngman + + * xargs/testsuite/xargs.posix/childfail.exp, xargs/xargs.c: Fix + Savannah bug #13878, in which xargs deals incorrectly with child + failure, returning 0 when it should return 123 + +2005-07-17 James Youngman + + * find/find.1: (tiny change) Corrections by Greg Wooledge + +2005-07-16 James Youngman + + * doc/find.texi: Updates following comments by Dave Gilbert. + + * NEWS: Corrected a typo. + + * doc/find.texi: + Added in the example about updating an aggregate timestamp file. + +2005-07-15 James Youngman + + * po/da.po: Updated Danish translation from translation project + +2005-07-14 James Youngman + + * NEWS, doc/Makefile.am, doc/find.texi, lib/Makefile.am, + lib/regexprops.c, lib/regextype.c, lib/regextype.h: Added + --regextype and -regextype options to locate and find + respectively, and documented these + + * doc/find.texi: We use GNU Emacs regexps by default now. + + * doc/find.texi: + We require GNU sort in order for locate to handle newlines correctly, + not just GNU find. + +2005-07-10 James Youngman + + * doc/find.texi: + Applied several documentation improvement patches from Aaron Hawley + + * ChangeLog, NEWS: Updated with recent changes. + + * NEWS: Recent gnulib changed have fixed -iregex + + * doc/find.texi, xargs/xargs.1: + Tiny patch from Andreas Metzler: xargs -I is like xargs -i, but the latter is deprecated + +2005-07-06 James Youngman + + * find/defs.h, find/find.c, find/parser.c, find/pred.c: + Fixed Savannah bug #13650; programs run by -exec cannot read stdin + +2005-07-04 James Youngman + + * NEWS: *** empty log message *** + + * doc/find.texi: + Added a "Worked Examples" section. It currently only contains a + (long) example about deleting files. + + * .cvsignore: Some extra stuff to ignore. + +2005-07-03 James Youngman + + * find/Makefile.am: Don't need regexprops.c really... + + * lib/regextype.c, lib/regextype.h: + New files for selecting regex type based on a keyword + + * locate/locate.1: Documented the fact that we now use Emacs-style + regexps, not POSIX EREs, for compatibility with find -regex. + + * lib/Makefile.am, locate/locate.c, doc/find.texi, + find/Makefile.am, find/defs.h, find/find.1, find/find.c, + find/parser.c: Fixed Savannah bug #13495: find now uses + Emacs-style regexps by default + +2005-07-02 James Youngman + + * configure.in, find/defs.h, find/fstype.c, find/parser.c, + intl/dcigettext.c, lib/buildcmd.c, lib/listfile.c, + lib/savedirinfo.c, locate/locate.c, xargs/xargs.c: Assume unistd.h + is present - avoid using HAVE_UNISTD_H + +2005-07-01 Jim Meyering + + With `-fprint F' or `-fprintf F', don't write diagnostics + to F when stderr is closed. + + * find/parser.c: Include "stdio-safer.h". + (open_output_file): Use fopen_safer, not fopen. + * import-gnulib.sh (findutils_modules): Add stdio-safer. + +2005-07-01 James Youngman + + * doc/find.texi: + Aaron pointed out a potentially-confusing sentence. I fixed it. + + * find/defs.h, find/find.1, find/find.c, find/parser.c, + find/pred.c, find/util.c: Allow consistency-checking of the + predicates, checking for example that actions all have side + effects + +2005-06-29 James Youngman + + * doc/find.texi: Applied patch from Aaron Hawley (Savannah patch + #3751: Typos and small suggestions to find.texi) + +2005-06-27 James Youngman + + * ChangeLog, locate/locate.c: Applied patch from Bas Van Gompel to + move match counting into a (new) visitor function + + * NEWS, configure.in: No longer 4.2.23, as we're moving on now + +2005-06-24 Bas van Gompel + + * locate/locate.c (visit_count, visit_limit): New functions. + (locate): Use visit_limit or visit_count. Simplify main loop. + (main) Bail out early when limit is reached. + +2005-06-20 James Youngman + + * xargs/xargs.c: + Removed some code which had already been disabled via the preprocessor. + +2005-06-19 Dmitry V. Levin + + * lib/savedirinfo.c: Fix two compilation warnings (which would + prevent compilation if "-Wall -Werror" is in effect). + +2005-06-19 James Youngman + + * ChangeLog: Indicate that we made (are making) a release. + + * ChangeLog, NEWS, configure.in: Preparing to release 4.2.23 + + * doc/find.texi: Fixed Texinfo syntax error in previous change + + * doc/find.texi, xargs/xargs.1: + Document the fact that the -i and -L options are currently + incompatible (Savannah bug 13041). + + * locate/updatedb.1, locate/updatedb.sh: Fix Savannah bug 13411 - + reject trailing slashes in updatedb's --prunepaths, bacsue these + will never be matched + + * NEWS: Released findutils-4.2.23. + + * doc/find.texi, xargs/xargs.1: + Document the fact that the -i and -L options are currently + incompatible (Savannah bug 13041). + + * locate/updatedb.1, locate/updatedb.sh: Fix Savannah bug 13411 - + reject trailing slashes in updatedb's --prunepaths, because these + will never be matched. + +2005-06-18 James Youngman + + * po/ga.po, tr.po: Updated Irish and Turkish translations. + + * po/pl.po: Did update-po + + * po/pl.po: + Updated Polish translation file from the Translation Project + + * po/ca.po, da.po, de.po, el.po, eo.po, es.po, et.po, fi.po, findutils.pot, fr.po, ga.po, gl.po, hr.po, hu.po, id.po, it.po, ja.po, ko.po, lg.po, ms.po, nl.po, pl.po, pt.po, pt_BR.po, ro.po, ru.po, rw.po, sk.po, sl.po, sr.po, sv.po, tr.po, vi.po, zh_CN.po, be.po: + Did update-po + +2005-06-18 Martin Buchholz (trivial patch applied by James Youngman) + + * find/defs.h, find/find.c, find/parser.c, doc/find.texi: Fix + typos/spelling errors (mostly in source code comments). + +2005-06-18 Dmitry V. Levin + + Additional documentation tweaks for -execdir/-okdir actions. + * find/parser.c (parse_help): Mention -execdir and -ordir options. + * doc/find.texi, find/find.1: Additionally document new options. + +2005-06-12 Bas van Gompel + + * locate/locate.c: Implement --all (-A). + + * NEWS, doc/find.texi, locate/locate.1: Document locate --all (-A) + +2005-06-12 James Youngman + + * find/find.c, NEWS: + Savannah bug #13381 (Debian bug 313081): if we have O_NOFOLLOW, + safely_chdir() does not need to call stat(). However, process_dir() + used to rely on using that stat information. To work around this + problem, there is now an output parameter in safely_chdir() which + indicates if the stat buffer is valid. + This bug has possible security implications. + + * find/find.1, doc/find.texi: + Applied patch from Andreas Metzler, improving the wording for the + documentation of the %k and %b format directives. This patch does + not require a copyright assignment as it consists of several + copies of the same small wording change. + +2005-06-11 James Youngman + + * find/find.1: Corrected spelling error 'writeable' to 'writable'. + + * find/find.1, locate/locate.1: + Fixed Savannah bug #13363, typos in manpages (trivial change) + +2005-06-10 James Youngman + + * find/find.c, lib/savedirinfo.c, lib/savedirinfo.h: Switch to a + new scheme for saving directory entry data which is extensible to + allow additional data to be saved. + +2005-06-09 James Youngman + + * locate/testsuite/config/unix.exp: + Use the new normalize_dir procedure throughout. + + * locate/testsuite/config/unix.exp: Move the normalisation into a + procedure. Don't rely on the "file normalize" command being + available (it's new in Tcl 8.4). + +2005-06-08 James Youngman + + * ChangeLog, NEWS, configure.in: Updated for recent changes + + * doc/find.texi: + Explain that you should put the argument of -name in quotes. + + * find/find.1: + Added a new "NON-BUGS" section pointing out things that look like bugs + but are caused by mistakes or misunderstandings. + + * doc/find.texi, locate/locate.1: Applied Bas van Gompel's patch + which allows the database to be read from stdin. + + * locate/locate.c: + Read the database in by using the "visitor" pattern. Modified file + header comment to indicate that we no longer use the efficient + algorith described in ;login:. Emit an error message if the + LOCATE_PATH variable implies that we should read stdin twice. + Most of this code is from Bas van Gompel. + + * AUTHORS: Credit Bas van Gompel for his work on locate. + + * lib/printquoted.h: Appled patch from Bas - fixing compiler warning. + +2005-06-07 James Youngman + + * ChangeLog, NEWS, configure.in: Updates prior to release + + * config.rpath: Added file required for 'make dist' + + * po/be.po, po/ca.po, po/da.po, po/de.po, po/el.po, po/eo.po, + po/es.po, po/et.po, po/fi.po, po/findutils.pot, po/fr.po, + po/ga.po, po/gl.po, po/hr.po, po/hu.po, po/id.po, po/it.po, + po/ja.po, po/ko.po, po/lg.po, po/ms.po, po/nl.po, po/pl.po, + po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/rw.po, po/sk.po, + po/sl.po, po/sr.po, po/sv.po, po/tr.po, po/vi.po, po/zh_CN.po: + updated the po files for release + + * xargs/testsuite/Makefile.am: + Added in all the test files from Dmitry V. Levin. + +2005-06-08 Bas van Gompel + + * NEWS, locate/locate.1, doc/find.texi: Document usage of `-' + to refer to stdin in database-path for locate. + * locate/locate.c: Change prototype for visitors and processors + throughout. Move reading the database and generating base_name + into visitors. Allow `-' to refer to stdin in database-path. + + * lib/printquoted.h: Include stdio.h. + +2005-06-07 James Youngman + + * COPYING, debian/copyright, depcomp, doc/texinfo.tex, + find/defs.h, find/find.c, find/fstype.c, find/parser.c, + find/pred.c, find/testsuite/config/unix.exp, find/tree.c, + find/util.c, import-gnulib.sh, intl/Makefile.in, + intl/bindtextdom.c, intl/config.charset, intl/dcgettext.c, + intl/dcigettext.c, intl/dcngettext.c, intl/dgettext.c, + intl/dngettext.c, intl/explodename.c, intl/finddomain.c, + intl/gettext.c, intl/gettext.h, intl/gettextP.h, + intl/hash-string.h, intl/intl-compat.c, intl/l10nflist.c, + intl/libgettext.h, intl/libgnuintl.h, intl/loadinfo.h, + intl/loadmsgcat.c, intl/localcharset.c, intl/locale.alias, + intl/localealias.c, intl/ngettext.c, intl/plural.c, intl/plural.y, + intl/ref-add.sin, intl/ref-del.sin, intl/textdomain.c, + lib/buildcmd.c, lib/buildcmd.h, lib/extendbuf.c, lib/extendbuf.h, + lib/forcefindlib.c, lib/listfile.c, lib/listfile.h, + lib/modetype.h, lib/nextelem.c, lib/nextelem.h, lib/printquoted.c, + lib/printquoted.h, lib/qmark.c, lib/savedirinfo.c, + lib/savedirinfo.h, lib/strspn.c, lib/wait.h, lib/waitpid.c, + locate/bigram.c, locate/code.c, locate/frcode.c, locate/locate.c, + locate/locatedb.h, locate/testsuite/config/unix.exp, + locate/updatedb.sh, missing, po/fetch-po-files, + xargs/testsuite/config/unix.exp, xargs/xargs.c: + Updated the FSF's postal address + + * ChangeLog: Corrected Bas's email address. + + * locate/locate.c: Updated copyright years. + +2005-06-07 Bas van Gompel + + * locate/locate.c: Fold case once, only when needed. + +2005-06-07 James Youngman + + * NEWS: Updated with recent changes. + + * mdate-sh: Use the mdate-sh from automake + + * find/parser.c, find/pred.c, find/tree.c, find/util.c, + lib/Makefile.am, lib/forcefindlib.c, lib/listfile.c, + lib/listfile.h, locate/code.c, locate/locate.c, find/defs.h, + find/find.c: Fix Savannah bug #13324: Fix compiler warnings for + GCC-3.4 + + * locate/locate.c: + Fixed Savannah bug #13325: Quoting of output filenames in locate + should match find. + + * find/parser.c: + Fixed Savannah bug #13319: C9X-ism in parser.c (declaration after + statements). + + * find/pred.c, lib/Makefile.am, lib/listfile.c, lib/nextelem.c, + lib/printquoted.c, lib/printquoted.h, lib/qmark.c, NEWS, + doc/find.texi, find/defs.h, find/find.1, find/parser.c: Fixed + Savannah bug #13303, find should filter out non-printable + characters if outputting to tty + +2005-05-30 James Youngman + + * locate/locate.c: rename new_locate() to locate() since + old_locate() has gone the way of the dodo. + +2005-05-29 Bas van Gompel + + Add a ``--print'' (``-p'') option. (to cancel side-effects of -c/-S) + Allow ``--statistics'' in combination with non-options. + * doc/find.texi: Add documentation for locate --print (-p), and the + use of non-options with --statistics. + * locate/locate.1: ditto. + * locate/locate.c: Read each database only once. + +2005-05-23 Paul Eggert + + Adjust to recent gnulib changes. + * import-gnulib.sh: Get config.rpath from gnulib/build-aux, + not gnulib/config. + * find/parser.c (parse_perm): Ignore umask when parsing + symbolic permissions. Adjust to new modechange API. + +2005-05-16 James Youngman + + * find/find.c, find/parser.c, find/pred.c, find/tree.c: + Trivial change: don't use i18n support for debug-only messages + + * ChangeLog: Added ChangeLog entry crediting Dmitry + +2005-05-09 James Youngman + + * find/parser.c: + The previous change fixed Savannah bug #12999. This change doesn't do + anything, it's only intended to be a place to record the Savannah bug + ID we've just fixed. + + * find/parser.c: + Oops. Initialise the variable which indicates which regex syntax to + use. We use POSIX basic regular expressions. + + * find/parser.c: + Suggestion by Ed Avis: point out that "-name foo/bar" will almost + always evaluate to false. Suggest to the user what alternatives they + might find useful. + +2005-05-02 James Youngman + + * AUTHORS: + Added Dimitry (his new test suite contribution required a copyright + assignment). + +2005-05-03 Dmitry V. Levin + + * Added xargs test suite tests by Dmitry V. Levin, together with + bugfixes which ensure that the tests pass. + +2005-04-18 James Youngman + + * Added test suite tests for Bas van Gompel's changes. + +2005-04-18 Bas van Gompel + + * doc/find.texi: Document locate --non-existing (-E). + * locate/locate.1: Ditto. + * locate/locate.c: Implement --non-existing (-E). + +2005-04-04 James Youngman + + * configure.in, import-gnulib.sh: + We no longer need gnulib/m4/Makefile.am + + * po/vi.po: Updated Vietnamese translation + + * locate/updatedb.sh: + Savannah bug #12491: Only use the "-s" option to "su" if it is + supported. + +2005-04-01 James Youngman + + * locate/locate.1, locate/updatedb.1, xargs/xargs.1: Trivial + change from A Costa , fixing typos in manual + pages for xargs, locate and updatedb; fixes Savannah bug #12500, + Debian bug #301934 + +2005-03-22 James Youngman + + * import-gnulib.sh: Include the new gnulib module stat-macros + + * configure.in: + CVS code is (will shortly be) no longer identical to the 4.2.20 release + +2005-03-17 James Youngman + + * configure.in: Preprare for release of 4.2.20. + + * NEWS: Updated prior to release of 4.2.20. + + * ChangeLog: Updated with recent changes. + + * THANKS: Thank Bas van Gompel, but only once. + + * THANKS: Thank Bas van Gompel and Aaron S. Hawley. + + * po/vi.po: Updated Vietnamese PO file + +2005-03-10 James Youngman + + * po/nl.po: Updated Dutch PO file + +2005-03-08 Bas van Gompel + + * import-gnulib.sh: Re-enable creation of gnulib/m4/Makefile.am. + +2005-03-07 James Youngman + + * Released findutils-4.2.19. + + * find/testsuite/find.posix/sizes.exp: + Use 2>/dev/null instead of 2>&1, because Tcl understands the former + but not the latter. + + * find/testsuite/Makefile.am: Also distribute sv-bug-12181.xo. + + * find/testsuite/Makefile.am: Distribute sv-bug-12181. + + * find/testsuite/Makefile.am: Distribute sv-bug-12230. + + * NEWS: Updated with new news. + + * ChangeLog: Brought up to date. + + * lib/buildcmd.c, find/testsuite/find.gnu/sv-bug-12230.exp: Fixed + Savannah bug #12230, in which '-exec echo == {} +' is always run, + even if there were no matched files. + +2005-03-06 James Youngman + + * ChangeLog: Added latest changes. + + * po/pt.po, configure.in: Added Portuguese translation + +2005-03-04 James Youngman + + * configure.in: Modernized the way we call AC_INIT and + AM_INIT_AUTOMAKE + + * locate/locate.c, find/pred.c, find/find.c: + Eliminated some compiler warnings + + * find/pred.c: Clarified the meaning of a comment. + + * find/testsuite/Makefile.am: Added sizes.exp, sizes.xo. + + * find/testsuite/find.posix/sizes.xo, + find/testsuite/find.posix/sizes.exp: Added tests for -size + predicate + +2005-03-03 James Youngman + + * find/find.c: + safely_chdir_lstat(): if we didn't end up in the right place, and then + fchdir() fails, we can't return to the directory we started in. + Therefore, issue a fatal error message and exit. + +2005-03-01 James Youngman + + * find/find.c, find/testsuite/find.posix/sv-bug-12181.exp, + find/testsuite/find.posix/sv-bug-12181.xo: Fixed SourceForge bug + 12181 (find -H symlink-to-dir reports 'Too many Symbolic links') + and bug 12044 (find still hangs on dead NFS filesystems on + Solaris) + +2005-02-28 James Youngman + + * doc/find.texi: Typo: O_NOFOLLOW, not O_FOLLOW + + * import-gnulib.sh: + Suggestion from Martin Buchholz; unset CDPATH to prevent "cd" echoing + the new directory. + +2005-02-27 James Youngman + + * README: Indicate how the reader can verify the release. + +2005-02-26 James Youngman + + * po/sk.po, po/sl.po, po/sr.po, po/sv.po, po/tr.po, po/vi.po, + po/zh_CN.po, po/be.po, po/ca.po, po/da.po, po/de.po, po/el.po, + po/eo.po, po/es.po, po/et.po, po/fi.po, po/findutils.pot, + po/fr.po, po/gl.po, po/hr.po, po/hu.po, po/id.po, po/it.po, + po/ja.po, po/ko.po, po/lg.po, po/ms.po, po/nl.po, po/pl.po, + po/pt_BR.po, po/ro.po, po/ru.po: Added new Vietnamese translation + + * configure.in: Added new Vietnamese translation. + +2005-02-25 James Youngman + + * po/ga.po: Updated Irish po file + +2005-02-23 James Youngman + + * Makefile.am: Fix Savannah bug #12064 - 'make distclean' deletes + regex.c but should not. + + * find/testsuite/Makefile.am, + find/testsuite/find.gnu/printf-h.exp, + find/testsuite/find.gnu/printf-h.xo: Added test case for Savannah + bug #12085 (-printf %h). + + * NEWS, doc/find.texi, find/find.1, find/pred.c: + %h now expands to '.' instead of nothing. + +2005-02-22 James Youngman + + * find/find.c: + Fixed Savannah bug #12099 (misinterpretation of system versions + leading to possible incorrect disabling of O_NOFOLLOW). Reported by + Dmitry V. Levin. + + * find/pred.c: + For the %h format, don't bail out early as the format might contain + something else too. + +2005-02-21 James Youngman + + * find/find.c: Fixed accidental C99 dependency. + +2005-02-20 James Youngman + + * po/be.po, po/ca.po, po/da.po, po/de.po, po/el.po, po/eo.po, + po/es.po, po/et.po, po/fi.po, po/findutils.pot, po/fr.po, + po/ga.po, po/gl.po, po/hr.po, po/hu.po, po/id.po, po/it.po, + po/ja.po, po/ko.po, po/lg.po, po/ms.po, po/nl.po, po/pl.po, + po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sl.po, po/sr.po, + po/sv.po, po/tr.po, po/zh_CN.po: Updated italian translation + + * doc/find.texi: Corrected a typo. + + * find/find.c: + Read the mounted device list afer parsing the command line, so that + for example "find --version" still works (in response to Savannah bug + #12044). + + * configure.in: We've moved on from findutils-4.2.18. + +2005-02-19 James Youngman + + * NEWS: Corrected the summary of the "find -depth" bug. + +2005-02-16 James Youngman + + * NEWS, configure.in: Prepared for release of 4.2.18. + + * ChangeLog: Updated prior to release of 4.2.18. + + * find/testsuite/Makefile.am: + Distribute the test cases for the recent "find -depth" bug. + + * find/testsuite/find.posix/depth1.exp, find/testsuite/find.posix/depth1.xo: + Added test case for find -depth bug reported by Joseph S. Myers + + * find/find.c: + If -depth is in effect, processing of the subdirectories invalidates + the information in 'state'. Therefore once we get around to + processing the predicates, restore the information that we keep in + 'state' and in 'stat_buf'. + +2005-02-15 James Youngman + + * ChangeLog: Updated with recent changes + + * find/find.1: + Emphasise that -L causes find to recurse into subdirectories pointed + to by symbolic links. + + * find/find.1: + Patch to find.1 from Aaron Hawley : + + * Notes about -H actually apply to -L. + * Said paragraph is duplicated two paragraphs later. + * Typos: nno, ibmue, surrpounding + +2005-02-15 Aaron Hawley + + * find/find.1: Notes about -H actually apply to -L. Said + paragraph is duplicated two paragraphs later. Also typos: nno, + ibmue, surrpounding + +2005-02-13 James Youngman + + * find/find.1: Miscellaneous small clarifications and improvements. + + * doc/find.texi: Added Info nodes and menus under "Changing the + Current Working Directory" so that it doesn't generate such a huge + Info page. + + * find/find.c: Parenthesise #if defined(...). + +2005-02-13 Dmitry V. Levin + + * find/find.c: remove test code snippet (time(NULL) was used to + place a marker for spotting with strace(), but was not actually + needed). + + * find/find.c (safely_chdir_nofollow): must not fall back on + safely_chdir_lstat() because that will expose it to race condition + exploits, making it pointless. + + * find/find.c (safely_chdir_lstat): Move + complete_pending_execdirs() up into safely_chdir(), because we + need to do that in either case. + +2005-02-12 James Youngman + + * configure.in, doc/find.texi, find/defs.h, find/find.c, + find/parser.c: Fix for Savannah bug #11879, that + init_mounted_dev_list() causes find to hang on systems which are + clients to dead NFS servers + +2005-02-10 James Youngman + + * doc/find.texi: Talk about the problem where find will not work + if you have a filesystem mounted from an unresponsive NFS server. + +2005-02-09 James Youngman + + * find/find.1: Indicate that $TZ affects from printf-format + results, and add extra cross-references in the SEE ALSO section. + +2005-02-08 James Youngman + + * xargs/testsuite/Makefile.am: Distribute the .xe files also. + + * Makefile.am: Check that we have the right number of .xe files in + the distribution also. + + * ChangeLog, NEWS, configure.in + Preparing to release findutils-4.2.17 + +2005-02-07 James Youngman + + * find/testsuite/config/unix.exp: Re-sort the .xo file using the + calling user's locale, because our 'pre-sorted' .so output file + may not be sorted with the same collating order as 'sort' used to + order the output of "find. Bug spotted by Vin Shelton and Dimitry + V. Levin. + + * find/testsuite/Makefile.am: + New test, find/testsuite/find.gnu/follow-arg-parent-symlink.exp. + + * find/testsuite/find.gnu/follow-arg-parent-symlink.exp, + find/testsuite/find.gnu/follow-arg-parent-symlink.xo, find/find.c: + Fix for starting point /foo/bar/baz where bar is a symlink but baz + is not - we should chdir into bar there even if it is a symbolic + link + +2005-02-07 James Youngman + + * find/testsuite/Makefile.am: + New test, find/testsuite/find.gnu/follow-arg-parent-symlink.exp. + + * find/testsuite/find.gnu/follow-arg-parent-symlink.exp, + find/testsuite/find.gnu/follow-arg-parent-symlink.xo, find/find.c: + Fix for starting point /foo/bar/baz where bar is a symlink but baz + is not - we should chdir into bar there even if it is a symbolic + link + +2005-02-06 James Youngman + + * doc/find.texi: + -size: Clarification - -size gives a result consistent with 'wc -c' + for example. + + * Makefile.am, find/testsuite/Makefile.am, + find/testsuite/find.gnu/execdir-root-only.exp, + find/testsuite/find.gnu/execdir-root-only.xo, + locate/testsuite/Makefile.am, xargs/testsuite/Makefile.am: + dist-hook: Ensure that we distribute all the .po files and all the + testsuite files + + * po/pl.po: Updated Polish translation from TP website + +2005-02-05 Dmitry V. Levin + + * find/parser.c, find/pred.c: Additional tweaks for + -execdir/-okdir actions. + + * find/parser.c (new_insert_exec_ok): Disable ignore_readdir_race + for -execdir/-okdir. + + * find/pred.c (pred_execdir, pred_okdir): Use state.rel_pathname + instead of basename(pathname). Do not add "./" prefix for + absolute pathnames. + + * find/find.c (process_top_path): Treat "/" similarly to ".". + + * xargs/testsuite/xargs.posix/savannah-11865.exp, + xargs/testsuite/xargs.posix/savannah-11865.xo, xargs/xargs.c: + Fixed Savannah bug #11866 (not resetting number of used chars in + the command buffer) - reported by Dimitry V. Levin + +2005-02-05 James Youngman + + * THANKS: + Added thanks for Dimitry - has produced many patches, bugfixes and + suggestions. + + * find/pred.c: + Fixed Savannah bug #11866: typo in pred_okdir() renders it useless + + * find/pred.c: + Savannah bug #11861: undefined symbol 'basename' on IRIX 5.3 + + * NEWS, configure.in, po/be.po, po/ca.po, po/el.po, po/eo.po, + po/fi.po, po/ga.po, po/hr.po, po/hu.po, po/ja.po, po/lg.po, + po/ms.po, po/ro.po, po/sl.po, po/sr.po, po/zh_CN.po: Added new + translations + + * ChangeLog: Updated from CVS prior to release of 4.2.16. + + * po/ChangeLog: Updated from CVS. + + * NEWS, configure.in: Preparing to release 4.2.16 + + * po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, + po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, + po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sl.po, po/sv.po, + po/tr.po: make update-po prior to 'make distcheck' + + * po/fetch-po-files: This is the first version we actually used. + + * find/find.c: process_top_path() fixed compilation warning. + + * find/find.c: process_top_path(): avoid processing this item if + we can't chdir to the basename of the named file. + + * lib/Makefile.am: Always build forcefindlib.c + + * locate/locate.c: Say 'base name' rather than 'basename' in comments + + * find/pred.c, find/find.c: process_top_path(): Proper bugfix for + correct handling of items at depth 0 (i.e. specified on the + command line) - do an extra chdir to ensure that we're in the + directory containing the item before calling process_path(). + Hnece also undo the previous 'quick fix' for the same problem + + * doc/find.texi: + -execdir no longer has to treat anything as special, even at depth 0. + +2005-02-03 James Youngman + + * doc/find.texi, find/pred.c: When state.curdepth is 0, our + working directory is not the directory containing the file we are + processing. + +2005-02-02 James Youngman + + * find/pred.c: + To allow compilation on cygwin, use base_name(), not basename(). + + * po/tr.po: Updated Turkish translation from TP + + * po/ro.po: Updated Romanian translation from TP + + * po/da.po, po/et.po: Updated translations from MT project website + +2005-02-01 James Youngman + + * ChangeLog: Updated from CVS log. + +2005-01-31 James Youngman + + * find/find.c, lib/nextelem.c, lib/nextelem.h, locate/code.c, + locate/frcode.c, locate/testsuite/config/unix.exp, + xargs/testsuite/config/unix.exp, xargs/xargs.c: Updated/corrected + the email address for David MacKenzie, one of the original authors + of findutils + + * doc/Makefile.am: The HTML version of the manual generated for + the GNU project website has each node in a separate file, not each + chapter in a separate file; adjust filenames accordingly + + * find/parser.c, find/pred.c, lib/savedirinfo.c: + Removed some unused variables (patch from Dmitry V. Levin) + + * find/find.c: + Patch from Dmitry V. Levin : Add subfs to the list + of filesystems which are likely to be automounted. + + * m4/findlib.m4: Corrected typo (pointed out by Dmitry V. Levin). + + * find/testsuite/config/unix.exp, + find/testsuite/find.gnu/name-period.xo, + find/testsuite/find.gnu/posix-dflt.xo, + find/testsuite/find.gnu/posix-h.xo, + find/testsuite/find.gnu/posix-l.xo, + find/testsuite/find.gnu/printf.exp, + find/testsuite/find.gnu/printf.xo: Systems differ in the order in + which filenames are returned by readdir. Hence sort the output of + 'find' before comparing against the expected-output file. We + therefore also have the lines in the .xo files ready-sorted. + + * po/ca.po: Updated from Translation Project + + * po/ChangeLog: Updated from CVS logs. + + * po/de.po, es.po, et.po, fr.po, gl.po, id.po, it.po, ko.po, nl.po, + pl.po, pt_BR.po, ru.po, sk.po, sv.po, tr.po, da.po: Ran update-po + + * po/be.po, ca.po, el.po, eo.po, fi.po, hr.po, hu.po, ja.po, lg.po, + ms.po, ro.po, sl.po, sr.po, zh_CN.po: Added new translation files + from the Translation Project web site + + * po/da.po, de.po, es.po, et.po, fr.po, ga.po, gl.po, id.po, it.po, + ko.po, nl.po, pl.po, pt_BR.po, ru.po, sk.po, sv.po, tr.po: Updated + .po files from the Translation Project site + +2005-01-30 James Youngman + + * doc/Makefile.am: + Added rules for extra targets that we buld to update the web site. + +2005-01-29 James Youngman + + * configure.in: No longer version 4.2.15 - we've changed the manual. + + * doc/find.texi: + Clarified the txt about adding extra tests with post-processing via + xargs, and recommend -execdir instead for security reasons. + + * doc/find.texi: Patch from Karl Berry: + - more entries for the dir file + - use @copying so the copyright ends up in the HTML etc. output. + (This is the only really important change.) + - put @contents after the title page, for conventional toc location. + - use @ifnottex to wrap the Top node instead of @ifinfo, for the sake of + HTML output, etc. + + * NEWS, configure.in, po/da.po, po/de.po, po/es.po, po/et.po, + po/findutils.pot, po/fr.po, po/gl.po, po/id.po, po/it.po, + po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, + po/sv.po, po/tr.po: Prepared to release findutils-4.2.15 + + * ChangeLog: Updated from CVS log. + +2005-01-28 James Youngman + + * configure.in: + Make --enable-d_type-optimization and --enable-d_type-optimisation + both work. + + * configure.in: Assume --enable-d_type-optimisation by default + + * find/parser.c: Indicate which features are enabled/disabled + + * locate/testsuite/config/unix.exp: + Clean up the files left behind by the locate_textonly test + +2005-01-27 James Youngman + + * doc/find.texi: Documented --regex. + + * NEWS, locate/locate.1, locate/locate.c, locate/testsuite/Makefile.am, locate/testsuite/config/unix.exp, locate/testsuite/locate.gnu/regex1.exp: + Implemented locate --regex - but needs documenting in Texinfo manual. + +2005-01-25 James Youngman + + * configure.in: Bumped version no. + + * doc/find.texi: + Document --mmap and --stdio as being synonyms of -m and -s. + + * locate/locate.1: + Document --mmap and --stdio as synonyms of -m and -s. + + * locate/locate.c: + Document -m and -s (both no-ops) in the usage message. + + * doc/find.texi, locate/locate.1: Document -m and -s as no-ops. + + * ChangeLog: Updated for release of findutils-4.2.14. + + * NEWS, configure.in, po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po: + Preparing to release findutils-4.2.14 + +2005-01-25 James Youngman + + * NEWS, configure.in, po/da.po, po/de.po, po/es.po, po/et.po, + po/findutils.pot, po/fr.po, po/gl.po, po/id.po, po/it.po, + po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, + po/sv.po, po/tr.po: Preparing to release findutils-4.2.14 + +2005-01-24 James Youngman + + * Makefile.am: Work around the fact that automake-1.7 actually + works, and correctly distributes regex.c; hence dist-hook should + only copy gnulib/lib/regex.c if this has not already been done. + + * find/defs.h, find/find.c, find/pred.c, + find/testsuite/Makefile.am, + find/testsuite/find.gnu/printf-symlink.exp, + find/testsuite/find.gnu/printf-symlink.xo, + find/testsuite/find.gnu/xtype-symlink.exp, + find/testsuite/find.gnu/xtype-symlink.xo: Fixes for -xtype and + -printf %Y, which had been the wrong way around. + + * NEWS: Avoid including the find.gnu subdirectory in the + distributed file more than once + + * locate/locate.c: + Move the printing of the statistics into a new function, print_stats() + + * find/testsuite/Makefile.am: Avoid including the find.gnu + subdirectory in the distributed file more than once + + * import-gnulib.sh: + We need the regex module anyway, to allow compilation on Solaris + +2005-01-23 James Youngman + + * configure.in: + Invoke gl_INCLUDED_REGEX directly to ensure successful compilation on + systems like Solaris, which lacks those functions in libc (fixes GNU + Savannah bug #11710). + + * locate/locate.1: -S is a synonym for --statistics + + * doc/find.texi: Documented the new -H, -L and -P options. + + * locate/locate.1, locate/locate.c: Implement options -L + (default), -H and -P, which mean the same things as for find, + except for the fact that the default is -L rather than -P + + * find/find.1: Corrected definition of the exit status for -quit. + + * find/find.c, find/pred.c: If DEBUG_STAT is set, issue a debug + message when we call chdir() so that we can figure out what is + actually being stat()ed + + * locate/updatedb.sh: + Removed spurious newline from help message (bug report from Karl + Berry). + + * po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, + po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, + po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, + Makefile.am, NEWS, configure.in, find/defs.h, find/find.c, + find/parser.c, find/pred.c, find/tree.c, find/util.c, + import-gnulib.sh, lib/savedirinfo.c: Merged the d_type + optimisation code; this is disabled by default, and can be enabled + with 'configure --enable-d_type-optimisation' + + * NEWS: + Updated optimisation NEWS item to indicate the effect on runtime. + +2005-01-22 James Youngman + + * NEWS, configure.in: Prepare for release of findutils-4.2.12 + + * ChangeLog: Brought up to date with recent changes. + + * Makefile.am, import-gnulib.sh, po/Makefile.in.in, po/Makevars, + po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, + po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, + po/pl.po, po/pt_BR.po, po/remove-potcdate.sin, po/ru.po, po/sk.po, + po/sv.po, po/tr.po: Switch to using the gnulib gettext module, to + ensure that 'make distcheck' works with current xgettext, + autoconf, etc. + + * find/testsuite/config/unix.exp: + Oops, we do need to clean up after all. + +2005-01-21 James Youngman + + * xargs/testsuite/Makefile.am: Added name of missing input file. + + * find/testsuite/Makefile.am: + Distribute a few files that we had forgotten about + + * xargs/testsuite/Makefile.am: Added some missing files. + + * lib/Makefile.am: Also need buildcmd.h. + + * xargs/testsuite/Makefile.am: Fixed a typo. + + * NEWS: Indicate the d_type performance improvement + +2005-01-18 James Youngman + + * lib/savedirinfo.h: Added on d_type_optimisation also + + * lib/savedirinfo.c: Added on branch d_type_optimisation also. + + * find/pred.c: Added assert that we actually know the file type by + the time pred_type() is called + + * find/find.c: Always initialise state.have_stat = false when + starting to work with a new file + +2005-01-17 James Youngman + + * ChangeLog: Brought up to date with recent changes. + + * NEWS: Documented the changes so far. + + * find/testsuite/find.gnu/exec-many-rtn-success.xo: + Expected output for exec-many-rtn-success.exp + + * find/find.1: + Indicate that -quit still ensures that pending commands are invoked + + * doc/find.texi: + Indicate that -quit still causes partial command lines to be invoked, + but there are some types of fatal error which leave such commands + uninvoked. + + * find/defs.h, find/find.c, find/pred.c, find/testsuite/Makefile.am, find/testsuite/config/unix.exp: + Fixed savannah bug #11625 Wrong return status for -exec ... \; when command fails; also execute any pending commands when doing -quit + + * find/testsuite/find.gnu/exec-many-rtn-failure.exp, find/testsuite/find.gnu/exec-many-rtn-failure.xo, find/testsuite/find.gnu/exec-many-rtn-success.exp, find/testsuite/find.gnu/exec-one-rtn-fail.exp, find/testsuite/find.gnu/exec-one-rtn-fail.xo, find/testsuite/find.gnu/exec-one-rtn-success.exp, find/testsuite/find.gnu/exec-one-rtn-success.xo: + Various test cases for succeeding and failing forms of -exec \; and -exec {} + + + * find/pred.c: "-exec ... {} +" always returns "true". + + * configure.in, find/defs.h, find/find.c, find/parser.c, find/pred.c, find/tree.c, find/util.c: + Implemented d_type optimisation but not working correctly, so currently disabled + + * lib/savedirinfo.h, lib/savedirinfo.c: + Initial implementation (temporarily disabled). + + * lib/Makefile.am: Resolved merge conflict. + + * lib/Makefile.am: + Make sure nextelem.h is included in the list of sources. + + * find/parser.c, lib/nextelem.c, lib/nextelem.h, locate/locate.c: + Use prototypes for next_element() to make sure it is called correctly. + +2005-01-16 James Youngman + + * find/find.c, find/pred.c: + When completing incomplete multiple execs, use 'eval_tree' not 'predicates' + + * lib/buildcmd.c: + Oops, initialise state->cmd_initial_argv_chars to zero. + + * find/find.1: + Document the way that -execdir and -okdir will refuse to wqork if ">" + is on $PATH. Also document -okdir in the manpage. + + * find/parser.c: + -execdir and -okdir are insecure if $PATH includes the current + directory, and so they refuse to work if the user has done that. + + * find/pred.c: + Oops; for -exec ... {} +, pass arguments to bc_push_arg() in the right + order. Problem spotted by Geoff Clare. + + * TODO: Removed items which have now been done. + + * lib/buildcmd.c: Tidied up formatting of arg list for bc_do_insert + +2005-01-15 James Youngman + + * find/testsuite/find.gnu/printf.exp, find/testsuite/find.gnu/printf.xo: + Added extra tests for more printf formats; patch by Andreas Metzler + + * locate/locate.c: + Ensure that the new long options have a relevang short option too. + Also bring usage message into line with the options actually + supported. Thanks to Bas van Gompel for noticing this defect. + + * locate/locate.1: + Escape "-" in SYNOPSIS. Thanks to Bas van Gompel for noticing this + defect. + + * ChangeLog: Fixed typos. + + * doc/find.texi: + Documented -execdir, and the "+" variants of -exec and -execdir. + + * find/find.1: Documented -execdir. + + * xargs/xargs.c: + Updated to bring into line with bc_*() interface changes + + * ChangeLog: Updated with recent changes. + + * find/defs.h, find/parser.c, find/pred.c, lib/buildcmd.c, lib/buildcmd.h: + Implemented -execdir and -okdir + + * find/defs.h, find/find.c, find/fstype.c, find/parser.c, find/pred.c, lib/buildcmd.c, lib/buildcmd.h, xargs/xargs.c: + First working version of -exec ...+ + +2005-01-09 James Youngman + + * find/defs.h, find/find.c, find/parser.c, find/pred.c, lib/buildcmd.c, lib/buildcmd.h, xargs/xargs.c: + Initial implementation of -exec ..{} +, but currently disabled since not yet working + +2005-01-08 James Youngman + + * find/find.c: Fixed typo in comment. + + * find/defs.h, find/find.c, find/parser.c, find/pred.c: + We now understand but do not implement -execdir (a *BSD invention, and a very useful security enhancement) and -okdir (the obvious companion to it) + + * locate/bigram.c, locate/code.c, locate/frcode.c, locate/locate.c, xargs/xargs.c: + The GNU coding standard requires a space between the function name and + its parenthesised argument list. + + * find/defs.h: + Understand the -exec ... {} \+ construction (for multiple + replacement). No support yet. + + * locate/locate.1: + Indicate that empty elements in the dbpath are treated as synonyms for + the default database. + + * locate/locate.c: + Support empty elements in the dbpath as synonyms for the default + database. These colons can be leading, trailing or in the middle of + the string. We no longer com,plain if the user does this. + + * lib/nextelem.c: + If curdir_ok is 0 and an element is empty, return "" instead of NULL + so that the caller knows to keep calling us. + + * find/find.c, find/pred.c, import-gnulib.sh, locate/bigram.c, locate/code.c, locate/frcode.c, locate/locate.c, xargs/xargs.c: + Savannah bug 11517: find, xargs, locate, etc. should not hide write failures; patch from Jim Meyering + + * po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po: + changed .pot creation date + + * THANKS, AUTHORS: Take into account the FSF copyright-assignments list + + * doc/find.texi: + If -quit is used, the exit value can be nonzero if errors have occurred. + + * find/find.1: + Removed incorrect comment about -H, -P and -follow in HISTORY. + +2005-01-07 James Youngman + + * lib/Makefile.am, lib/buildcmd.c, lib/buildcmd.h, xargs/xargs.c: + Refactored xargs to use an external library function from the new file buildcmd.c + + * configure.in: no longer the same as the released 4.2.11 version + +2005-01-06 James Youngman + + * xargs/testsuite/inputs/lines.xi, xargs/testsuite/xargs.posix/l2.exp, xargs/testsuite/Makefile.am: + Tests for the -L option + + * xargs/testsuite/config/unix.exp: When a test fails, show the diffs + + * xargs/testsuite/xargs.posix/l2.exp, xargs/testsuite/xargs.posix/l2.xo: + tests for the -l option + + * xargs/testsuite/Makefile.am: Added extra test files + + * xargs/testsuite/xargs.sysv/trace.exp, xargs/testsuite/xargs.sysv/trace.xe, xargs/testsuite/xargs.sysv/trace.xo: + Added tests for the -t option + + * xargs/testsuite/config/unix.exp, xargs/testsuite/inputs/foobar.xi, xargs/testsuite/xargs.gnu/r.exp, xargs/testsuite/xargs.gnu/r.xo, xargs/xargs.1: + Use a blanks-only input file for cases where there is supposed to be no output + + * xargs/testsuite/inputs/blank.xi: Initial version. + + * xargs/xargs.1: + Corrected a typo; also indicate that it's impossible to use xargs + securely due to the race condition. + +2005-01-05 James Youngman + + * find/parser.c: + Fixed Savannah bug 11495: fallthrough from -printf format processing + from 'n' case to 'd' case. + +2005-01-03 James Youngman + + * doc/find.texi: + Oops. Had duplicated an entire section. Fortunately this was after + @bye, so there was no adverse effect. + + * NEWS: locate -b. + + * doc/find.texi, locate/locate.1: document locate -S + + * configure.in, doc/find.texi, locate/locate.1, locate/locate.c: + Support locate -b as a synonym for locate --basename + + * po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po: + distcheck + + * find/testsuite/config/unix.exp: + Clean up (delete) find.out at at the end of the test. + + * NEWS, doc/find.texi, find/defs.h, find/find.1, find/find.c, find/parser.c, find/pred.c: + Implemented the -samefile test for find + +2005-01-02 James Youngman + + * ChangeLog: Updated with recent changes. + + * NEWS: + Bas van Gompel: two-line patch to locate.c to make locate's -i and -w + options work if -e is in use. + + * THANKS: Added Bas van Gompel. + + * locate/locate.c: + Bas van Gompel: (visit_exists) when testing for the existence of the + file, check the real filename [printname], not the case-converted + filename [testname]. Really these argument names are badly chosen. + + * find/find.1, doc/find.texi: + Improved the documentation for -perm, with plenty of examples, + following a comment by Dan Jacobson that the comment "Symbolic modes + use mode 0 as a point of departure" is baffling and unhelpful. + + * locate/locate.c: + Suggestion and patch from Bas van Gompel: (new_locate): Fix display of + negative compression ratios. + +2004-12-31 James Youngman + + * NEWS: Brought up to date with recent changes + + * doc/find.texi: + Don't need to nest the "race conditions with..." sections so deeply. + + * doc/find.texi: Corrected some spelling errors. + + * doc/find.texi: Added new "Security Considerations" chapter. + +2004-12-23 James Youngman + + * locate/locate.c: + Applied bugfixes from Bas van Gompel . + (lc_strcpy): Zero-terminate result. + (add_visitor): Update lastinspector. + (visit_substring_match_casefold): fix off-by-one error. + (new_locate): Move visit_exists down to improve performance. + (new_locate): Don't fold case when getting stats. + +2004-12-19 James Youngman + + * doc/find.texi: + Indicate that "cd /; find tmp -wholename /tmp" will never match anything. + + * doc/find.texi: Documented locate --statistics. + + * locate/locate.1: Documented the --statistics option. + + * locate/locate.c: Added support for the -S option. + +2004-12-12 James Youngman + + * NEWS: Added a summary of the changes so far. + + * find/tree.c: Made some of the error messages more self-explanatory + + * find/pred.c: Print pointers with %p, not %x. + + * find/find.c: Moved option data into struct options. + + * find/find.1: clarifications + + * find/testsuite/find.gnu/comma.exp: + Limit the amount of searching with maxdepth. + + * doc/find.texi: clearer description of how -prune works + + * ChangeLog: Removed duplicate entry. + + * configure.in, find/defs.h, find/find.c, find/fstype.c, find/parser.c, find/pred.c, find/tree.c, find/util.c: + Separated ariables representing current state from variable representing option information + +2004-12-11 James Youngman + + * find/parser.c: Readability improvement to the usage message. + + * find/find.c: Oops. Fixed unmatched #endif. + + * find/testsuite/find.gnu/printf.exp, find/testsuite/find.gnu/printf.xo, THANKS, configure.in, find/testsuite/Makefile.am, find/testsuite/config/unix.exp: + Fixed Savannah bug #11280 + + * find/find.c: + Remember to set path_length and curdepth in process_top_path(). + +2004-12-07 James Youngman + + * find/fstype.c: Use xstat() not stat() to examine things. + + * find/find.c: Explain why #ifdef EOVERFLOW. + + * find/find.c: EOVERFLOW is not defined on UNICOS. + + * NEWS: Corrected typo. + +2004-12-06 James Youngman + + * ChangeLog: Brought up to date. + + * NEWS, configure.in: releasing 4.2.10 + + * po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po: + distcheck + + * ChangeLog: Updated prior to release of finsutils-4.2.10. + + * import-gnulib.sh, find/fstype.c: + Use gnulib's mountlist module instead of grokking it ourselves. + + * configure.in: + Removed all the out-of-date cruft for grokking getmntent(). + + * xargs/xargs.c: + Added the -I and -L options; also -E takes an argument which is not optional. + +2004-12-05 James Youngman + + * README, configure.in, find/defs.h, find/find.c, find/parser.c, find/pred.c, find/tree.c: + Allow debug output to be turned on or off by saying --enable-debug on the configure command line + + * README: + Removed disparaging (it is now, it probably wasn't then) comment about + the production-readiness of Automake. + + * README: Qualify remarks about POSIX compliance. + + * NEWS, configure.in: Preparation for release 4.2.9 + + * po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po: + distcheck + + * ChangeLog: Brought up to date. + + * find/find.c: + Avoid duplicate error message when we cannot chdir() into a subdirectory. + + * THANKS: Added recent thankees. + + * NEWS: + Brought up to date with respect to the current set of fixed bugs. + + * NEWS, xargs/xargs.1, xargs/xargs.c: + Implemented POSIX options -L, -I and -E + +2004-12-03 James Youngman + + * find/parser.c: + -xdev is an option, not a test. Fixes Savannah bug 11192. + + * find/find.1, xargs/xargs.1: + Escape dashes with a backslash (for fix Savannah bug 11189). + +2004-11-27 James Youngman + + * find/find.c: + More use of safely_chdir(). Also bugfix: -L should imply -noleaf. Be more careful about when xstat should fall back on lstat() when stat() fails. + + * find/find.1: "necessary" only has one "C". + + * find/find.1: + If stat() fails with ELOOP, we issue a diagnostic message. + +2004-11-26 James Youngman + + * find/find.c: Removed some unused code. + + * Makefile.am: Don't do anything in the 'intl' subdirectory + + * find/find.c: + Enhanced safely_chdir() to the point where the test suite passes, and report infinite loops in the directory hierarchy + + * find/defs.h: + belt and braces; ensure that SYMLINK_NEVER_DEREF has value zero + + * find/find.1: + Describe our strategy for detecting and reporting infinite loops + +2004-11-24 James Youngman + + * doc/find.texi: + Updated the discussion of th error messages for findutils-4.2.8. + + * configure.in: Next version will be 4.2.9... + + * find/find.c: + Don't issue a warning if we notice the mounting of a filesystem that's + likely just to be an automounter. + + * doc/find.texi, find/find.1: + Explain how rounding is performed for -atime and friends. + + * xargs/xargs.c: + Once we collect enough arguments (for the value specified by the -n + option) to do an exec(), do it immediaely instead of waiting for the + next one to arrive. This fixes Savannah bug #7340. + + * ChangeLog, configure.in, NEWS: Prepare to release 4.2.8. + + * NEWS: Updates for 4.2.8. + + * configure.in: check for sys/types.h + + * find/find.c: + If wd_sanity_check() discovers that the mount table has changed, remember the updated device number and inode so that we also consider these to be valid on the way back up. + + * find/defs.h: + Declarations of xmalloc() and friends belong in xalloc.h, not in defs.h + + * find/parser.c: avoid signed/unsigned warning, and #include xalloc.h + + * find/fstype.c: + Changed to alloc get_mounted_devices() to compile on Solaris + + * README-CVS: + Automake requires GNU m4, so point out that the reader needs that. + + * find/defs.h, find/find.c, find/fstype.c: + When wd_sanity_check() fails, enumerate the mounted devices, rather than the mounted filesystem names + + * NEWS: prepare for 4.2.8 + + * configure.in: + Look for some Solaris headers which are used by get_mounted_devices() + + * lib/Makefile.am: don't build savedirtypes yet + + * po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po: + updated po files + + * m4/nullsort.m4: + Avoid suprious output of the test data when the tests fail. + +2004-11-21 James Youngman + + * po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po: + Messages changed again + + * ChangeLog, configure.in: Preparing to release 4.2.7. + + * NEWS: Updated for release of 4.2.7. + + * import-gnulib.sh: Also need canonicalize module. + + * find/find.c: + When checking to see if a filesystem has changed state, use an + absolute pathname. + + * configure.in: + No need to pause to allow James to view his handiwork, it (allegedly) + works now. + + * configure.in: + Oops. Check for setlocale() to re-enable the i18n support which was + accidentally disabled in 4.2.5. + + * find/find.c: + Check to see if the new directory is a transitioned mount point by + using its ABSOLUTE name, if we can figure it out. + + * doc/find.texi: + Added guidance on some of the error messages. Not the most common + ones, but the ones where the user might most benefit from some handy + hints or an explanation of what is going on. + + * find/pred.c: + Actually emit an error message if we fail to stat a symlink (for + reasons other than nonexistence of the link and infinite loop). + + * doc/texinfo.tex: Updated texinfo.tex + + * NEWS, configure.in, find/find.c, find/fstype.c: + Enable the 'Warning: filesystem XXX has recently been mounted' check on Solaris, which prevents it exiting fatally when traversing an automount mount point + + * po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po: + messages changed again + + * NEWS: Implemented xargs --arg-file. + + * doc/find.texi, xargs/xargs.1, xargs/xargs.c, NEWS: + Implemented xargs --arg-file + + * find/find.c: + Where a filesystem was recently (un)mounted, try togive its full name + + * configure.in: + Try to avoid requesting -lsun if we don't seem to need it (e.g. on + UNICOS where it is not present and trying to link against it produces + a warning). + + * find/defs.h, lib/modetype.h: Guard against multiple inclusion + + * find/fstype.c: + We now need even if we are not using getmntent() to figure + out the type of a filesystem, because wd_sanity_check() needs to + enumerate the system mount points. + + * configure.in: Next release will be 4.2.7. + + * find/fstype.c: + get_mounted_filesystems() should use getmntent() if that function is + present, rather than just if configure didn't find anything better for + filesystem_type_uncached() to use than that. + + * find/parser.c: + If -delete is the only action on a file, don't assume the default + -print action too. + + * ChangeLog, configure.in, po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po: + Preparation to release findutils-4.2.6. + + * find/Makefile.am, xargs/Makefile.am: + Enable checking of support for --version and --help + + * locate/Makefile.am: + Con't check command-line options for frcode, code or bigram + + * locate/code.c: Support --version and --help. + + * ChangeLog: *** empty log message *** + + * find/defs.h, find/find.c, find/fstype.c, lib/Makefile.am, lib/extendbuf.c, lib/extendbuf.h, NEWS: + Avoid fatal error if automount mounts a filesystem on a directory because we chdir()ed into it + + * configure.in: Next release will be 4.2.6. + + * find/find.1: + Indicate that the '-' flag does work for most fields. Also provide + an example of using the comma operator to traverse the filesystem just + once but search for more than one thing. + + * doc/find.texi: Indicate that the '-' flag does work for most fields. + +2004-11-19 James Youngman + + * configure.in: releaseing findutils-4.2.5 + + * find/testsuite/Makefile.am, locate/testsuite/Makefile.am, xargs/testsuite/Makefile.am: + If a directory has no Makefile.am, omit it from the parent's DIST_SUBDIRS - automake-1.9 requires this + + * po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po: + updated by make distcheck + + * ChangeLog, NEWS: Updated for release 4.2.5. + + * find/find.1, doc/find.texi: + Tell the reader that format flags may not work as they expect. + + * configure.in: + Use the correct name for the macro gl_AC_TYPE_LONG_LONG (not + jm_AC_TYPE_LONG_LONG). + +2004-11-15 James Youngman + + * import-gnulib.sh: + Avoid test -e because not all systems are POSIX-compliant (bug + #11005). Also don't need regex module any more if we're not building + in intl. + + * Makefile.am, configure.in: + These days gnulib likes to include 'libintl.h' which our very old intl/ directory lacks. For the moment, disable use of the internal intl/ directory + + * doc/find.texi: + Use @ref not @xref for a reference at the beginning of a sentence. + + * intl/Makefile.in: + Make sure gnulib.lib is on the #include path (Savannah bug #11002) + + * locate/locate.c: + Use base_name instead of basename - fixes Savannah bug 11003. + + * configure.in, find/defs.h, find/find.c, find/parser.c, find/pred.c, locate/bigram.c, locate/locate.c: + Don't need banner to emphasise the location of the call to jy_SORTZ + +2004-11-12 James Youngman + + * NEWS, doc/find.texi, find/defs.h, find/find.1, find/find.c, find/parser.c, find/pred.c, find/testsuite/find.gnu/posix-dflt.exp, find/testsuite/find.gnu/posix-dflt.xo, find/testsuite/find.gnu/posix-h.exp, find/testsuite/find.gnu/posix-h.xo, find/testsuite/find.gnu/posix-l.exp, find/testsuite/find.gnu/posix-l.xo, find/util.c: + Implemented BSD option -P and also the correct default behaviour of find with respect to symlinks if neither -L nor -H is specified [i.e. same as -P] + +2004-11-11 James Youngman + + * NEWS, doc/find.texi, find/defs.h, find/find.1, find/find.c, find/parser.c: + Implemented -H and -L options. + + * find/util.c: Added in the -H and -L options on the usage message. + +2004-11-10 James Youngman + + * doc/find.texi, find/find.1, find/parser.c, find/pred.c: + Implemented %M and %A+ format specifiers + + * doc/find.texi, find/find.1, find/parser.c, find/pred.c: + Documented the fact that only %d and %m format specifiers honour the various formatting flags + + * xargs/xargs.c: + Get the right number of bytes in a Kilobyte (hint: it's not 1048; that + was a typo, honest :) + + * po/pl.po: Applied Polish translations + +2004-11-08 James Youngman + + * po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po: + distcheck changed the po files again + + * locate/Makefile.am: + Make install-data-hook honour the setting of DESTDIR so that "make + DESTDIR=/tmp/foo install" works and puts localstater in the right + place. + + * configure.in: We're now working on findutils-4.2.5. + + * doc/find.texi, xargs/xargs.1: + Point out that xargs -i only splits input items at newlines + + * ChangeLog: Indicate that we released 4.2.4. + + * ChangeLog: Updated for release 4.2.4 + + * NEWS, configure.in: Prepare for release of 4.2.4. + + * NEWS: Brought up to date with latest changes. + + * NEWS, doc/find.texi, find/defs.h, find/find.1, find/find.c, find/parser.c, po/da.po, po/de.po, po/es.po, po/findutils.pot, po/gl.po, po/id.po, po/ko.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sv.po: + Turn warning messages off by default if stdin is not a tty; allow these to be controlled explicitly by options -warn and -nowarn + + * po/et.po, po/it.po: Updated translation files + + * po/sk.po: New translation file + + * po/fr.po, po/nl.po, po/tr.po: Updated translation files + + * configure.in: Added Slovak (sk) language. + + * xargs/xargs.c: + Enforcing a lower limit on the value specified by -s makes the test + suite fail. Removed that lower limit. + + * locate/Makefile.am: Oops, multilocate doesn't exist yet. + + * NEWS: *** empty log message *** + + * doc/find.texi, locate/updatedb.1, locate/updatedb.sh: + Added option --findoptions to updatedb + + * locate/Makefile.am, locate/locatedb.5, locate/updatedb.1, xargs/xargs.1: + Fixed section numbers in manpage titles and cross-references + + * NEWS, doc/find.texi, xargs/xargs.1, xargs/xargs.c: + Increased the default argument length and improved POSIX compliance of the handling of out-of-range values for the -s option + +2004-11-07 James Youngman + + * m4/Makefile.am: + Added in the extra files we need to distribute, nullsort.m4 + order-bad.bin order-good.bin + + * doc/find.texi: Documented locate's --limit option + + * locate/locate.1, locate/locate.c: + Implmented --limit and corrected the implementation of the -i option. + +2004-11-06 James Youngman + + * NEWS, doc/find.texi, locate/locate.1: + Documented --wholename and --basename and updated the NEWS file + + * README-CVS: + Give the autogen commands in a form that you can usefully cut and paste into a shell + + * NEWS: Options --null and --count) for locate + + * lib/nextelem.c: + Don't return '.' for an empty path element, because the path we are splitting may not be intended to contain directories + + * configure.in: we're working on findutils-4.2.4 now + + * locate/Makefile.am: Substitute @SORT_SUPPORTS_Z@ + + * doc/find.texi: + Documented new locate option --null and newline handling + + * locate/locate.1, locate/locate.c: + New locate options --null, --wholename, --basename, --count + + * locate/frcode.c, locate/updatedb.1, locate/updatedb.sh: + correctly handle newlines in the file names + + * configure.in: Determine if sort -z works + + * m4/nullsort.m4, m4/order-bad.bin, m4/order-good.bin: + jy_SORTZ: a macro to determine if the system has a sort command with a working -z option + +2004-11-01 James Youngman + + * NEWS: Fixed "find -printf '%H\n'". + + * find/find.c: + Avoid segfault if -printf %H is used where the matched file was the default, unspecified starting point, the current directory + +2004-10-31 James Youngman + + * find/find.1, find/parser.c: NetBSD also supports -d. + + * find/find.1, doc/find.texi: + Documented the behaviour of -daystart and -follow in more detail + + * find/parser.c: Corrected the usage message. + + * find/parser.c: + When deciding whether to issue a warning about options following + non-options, ignore any options whose position affects the tests + (i.e. -daystart and -follow). + + * find/parser.c: -daystart is a positional option like -follow. + + * find/parser.c: + Issue a warning message if an option is specified after a test or an + action (because the user might have believed that the behaviour of the + option is in some way conditional on the preceding tests). + + * locate/updatedb.sh: + Oops; removed some test code that I shouldn't have checked in. + + * locate/updatedb.sh: + Indicate that the old locate database format will shortly be unsupported. + + * doc/find.texi: + Use @direntry instead of hard-coding START-INFO-DIR-ENTRY inside @ifinfo. + + * locate/updatedb.1: Updated default location of locatedb file. + + * README-alpha: + Updated to give correct FTP location and to not talk about "test" + versions of automake, which are no longer required. + + * locate/updatedb.sh: + Incorporated the default list of filesystems to avoid from the Debian + package. Also added /afs and /sfs to the default pruned paths. + + * configure.in: Released findutils 4.2.3 + + * po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sv.po, po/tr.po: + did make distcheck, which updates these files + + * find/defs.h, find/fstype.c: + Use const qualifier in arguments to filesystem_type() to allow callers with const variables to use them + + * ChangeLog: Updated. + + * NEWS: Added new news. + + * find/find.c: + Extra diagnositcs for the case where we have the error "%s changed + during execution of %s" - that is when we chdir back to the parent + directory only to find that it has changed. + +2004-10-30 James Youngman + + * .cvsignore, NEWS, doc/find.texi, find/defs.h, find/find.1, find/parser.c, find/pred.c: + Implemented the -quit action + + * NEWS, doc/find.texi, find/find.1, find/parser.c, find/pred.c: + Refactored time handling routines in preparation for support of absolute timestamp comparison predicates + + * locate/locate.c: + Applied Savannah patch #2952 ("getline off-by-one bugfix"). + + * NEWS, doc/find.texi, find/defs.h, find/find.1, find/parser.c, find/pred.c: + Added -delete action (Savannah patch #3454 with additions) + + * locate/locate.c: + Applied Savannah patch #2692 (allowing get_short to process negative integers). + + * find/find.c: + If we are iossuing an error message because $FIND_BLOCK_SIZE is set, + ignore the setting of errno. + + * find/parser.c: More fixes for pedantic compiler warnings + + * NEWS, find/parser.c, find/tree.c: Eliminated some compiler warnings + + * find/find.c, find/parser.c, find/pred.c: + Various fixes for compiler warninga sbout unreachable code or unused function arguments + + * intl/plural.y: Silence compiler warning about unused argument. + + * locate/testsuite/Makefile.am: + Subdirectory "inputs" does not exist, so remove it from DIST_SUBDIRS. + + * locate/locate.c: + Corrected the explanation of why we have to use no parentheses around + the String argument to the N_ macro in its expansion. + + * configure.in: Nextr release is 4.2.3. + + * configure.in: IOndicate this is no longer the pristine release. + + * NEWS: + Oops, comments for release 4.2.0 should have said 20480 bytes, not 2480. + + * lib/listfile.c: + The -ls predicate should not truncate usernames. Fixes Savannah bug #10800. + + * find/fstype.c, locate/locate.c: + Fixes for Savannah bug #3727 (Intel icc compilation errors). + +2004-10-25 James Youngman + + * doc/find.texi, find/find.1, find/parser.c, find/pred.c: + Support -printf %D, which prints the device number of the containing filesystem + + * locate/updatedb.sh: + Avoid confusion between James Woods and James Youngman, by using the + disambiguating surname. + + * find/parser.c: Use RE_ICASE instead of re->translate. + + * configure.in, find/parser.c, find/pred.c, xargs/xargs.c: + No need to #define _GNU_SOURCE if we use gl_INIT. + +2004-10-24 James Youngman + + * ChangeLog: Prepared to release findutils-4.2.2. + + * ChangeLog, NEWS, po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sv.po, po/tr.po: + Updates prior to release of 4.2.2 + + * NEWS: Updated with news for findutils-4.2.2. + + * find/testsuite/config/unix.exp, lib/forcefindlib.c, lib/listfile.c, lib/modetype.h, lib/nextelem.c, locate/bigram.c, locate/code.c, locate/frcode.c, locate/locate.c, locate/locatedb.h, locate/testsuite/config/unix.exp, locate/updatedb.sh, xargs/testsuite/config/unix.exp, xargs/xargs.c, NEWS, find/defs.h, find/find.c, find/fstype.c, find/parser.c, find/pred.c, find/tree.c, find/util.c, import-gnulib.sh: + Corrected typo in the address of the FSF office + + * lib/strspn.c: Updated FSF address. + + * m4/.cvsignore: 'cvs status' should ignore Makefile.in + + * m4/Makefile.am, Makefile.am, NEWS, README-CVS, configure.in, doc/texinfo.tex, find/defs.h, find/fstype.c, find/parser.c, find/pred.c, import-gnulib.sh, intl/bindtextdom.c, intl/dcgettext.c, intl/dcigettext.c, intl/dcngettext.c, intl/dgettext.c, intl/dngettext.c, intl/explodename.c, intl/finddomain.c, intl/gettext.c, intl/intl-compat.c, intl/l10nflist.c, intl/loadmsgcat.c, intl/localcharset.c, intl/localealias.c, intl/ngettext.c, intl/plural.y, intl/textdomain.c, lib/Makefile.am, lib/forcefindlib.c, lib/listfile.c, lib/nextelem.c, lib/strspn.c, lib/waitpid.c, locate/bigram.c, locate/code.c, locate/frcode.c, locate/locate.c, m4/findlib.m4, po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sv.po, po/tr.po, xargs/xargs.c: + Use gnulib-tool --import to import the gnulib code, rather than the odd way we were doing it before + + * find/find.c, find/fstype.c, find/parser.c, find/pred.c, find/tree.c, find/util.c, locate/code.c, locate/locate.c, xargs/xargs.c: + Work round an apparent compiler bug in HP-UX 11.23 for + ia64 + + * locate/locate.c: + Work around what appears to be a C compiler bug in HP-UX 11.23 for + ia64. + + * INSTALL, depcomp, install-sh, missing, mkinstalldirs: + Updated from automake + + * locate/bigram.c, locate/code.c, locate/frcode.c, locate/locate.c, xargs/xargs.c, find/find.c: + Avoid use of exit() within main, to silence warnings about unreachable code + +2004-10-22 James Youngman + + * doc/find.texi: Syntax corrections. + + * doc/find.texi: Indicate that "-exec {}+" is not yet supported. + + * find/find.1: Indicate that "{}+" is not yet supported. + + * find/testsuite/find.gnu/name-period.xo, find/testsuite/find.gnu/name-period.exp, find/find.1, doc/find.texi: + The -name predicate must allow '*' to match '.foo' as demanded by IEEE + Std 1003.2-1992 Interpretation #126. + + * find/pred.c: + Remove use of FNM_PERIOD for -name as demanded by IEEE Std 1003.2-1992 + Interpretation #126 + + * find/parser.c: Fix for compilation (on AIX 4.3) with GCC 2.x. + + * xargs/xargs.c: + Changed the erorr message issued when there is an unmatched quote to + point out that the user might have wanted to use the -0 option instead. + +2004-10-17 James Youngman + + * configure.in: + Define intmax_t if it is not already defined - allows parser.c to compile on AIX 4.3 + + * configure.in: + Adjust version number to indicate that this s/w has moved on since the + 4.2.1 release. + + * configure.in: preparing to release 4.2.1 + + * ChangeLog: updated with current changes + + * README-CVS: Updated to go with newer version of gnulib. + + * po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sv.po, po/tr.po: + preparation for release + + * NEWS: Mention the changes to "trap". + + * NEWS: Brought up to date. + + * import-gnulib.sh: + Use xalloc-die module from gnulib, since that has now been split out + + * find/parser.c: + Check fnmatch() when other predicates that rely on fnmatch() are used. + + * find/parser.c: bug #10701: find needs fnmatch sanitycheck on startup + +2004-10-16 James Youngman + + * import-gnulib.sh: + Switch to requirement for GNU fnmatch because it supports FNM_CASEFOLD. + + * locate/updatedb.sh: + Bug #9465: use of signal numbers for 'trap' is deprecated. Should use + names instead. See + http://www.opengroup.org/onlinepubs/009695399/utilities/trap.html, + which indicates that support for signal numbers is optional, while + support for signal names is mandatory. + + * configure.in: + Indicate that this is the CVS version (once again) now that findutils + 4.2.0 has been released. + + * ChangeLog, configure.in, po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sv.po, po/tr.po: + findutils 4.1.20 check-in for tagging + +2004-10-02 James Youngman + + * po/Makefile.in.in: + Search in $(top_srcdir) for mkinstalldirs, since that's where we keep it. + + * NEWS: Brought up to date, organised more clearly, and tidied up. + + * NEWS: brought up to date with recent changes + + * locate/testsuite/config/unix.exp, locate/testsuite/locate.gnu/ignore_case1.exp, locate/testsuite/locate.gnu/ignore_case3.exp, locate/updatedb.sh: + Added new option --changecwd to updatedb so that the 'cd /' which it does can be compatible with the requirements of the test suite. Specifically, the test suite relies on being able to use relative pathnames + + * find/pred.c: + Fixed usage of human_readable() in '%k' format specifier to fix a bug + reported by Dmitry V. Levin (arguments to human_readable() were + specified in the wrong order, which resulted in a floating-point + error). + +2004-08-08 James Youngman + + * locate/updatedb.sh: + cd to / to avoid inability to examine the current directory if we're + invoked via cron (and hence in root's home directory for example). + + * doc/find.texi, find/find.1: + Deprecate -path and -ipath in favour of -wholename and -iwholename + + * find/parser.c: + As per RMS's suggestion, deprecate -path and -ipath in favour of + -wholename and -iwholename. + + * locate/locate.c: + Fixed Savannah bug #9923, in which get_short() returns large positive + ints when it should be returning negative shorts. + + * xargs/xargs.1: + Applied documentation improvements suggested by Dan Jacobson + . + + * xargs/xargs.c: + Don't check size_of_environment against arg_max since that causes the + test suite to fail. + + * xargs/xargs.1, xargs/xargs.c: Better documentation for the -i option + +2004-05-03 James Youngman + + * find/find.1: + document the various suffixes for -size and also the new + option -ignore_readdir_race + + * locate/locate.c: + Fixes Savannah bug #8623 (failure to check consistency of data + read from locate database) + + * locate/updatedb.sh: + Resolves Savannah bug 4380, that updatedb generates an empty + database if one of the commands fails + + * NEWS: Talk about -ignore_readdir_race + + * doc/find.texi: + Documented -ignore_readdir_race and -noignore_readdir_race + + * find/find.c: + -ignore_readdir_race should have no effect if the reason for the + failure of stat(2) was anything other than ENOENT. + + * find/defs.h, find/find.c, find/parser.c: + Fixed Savannah bug 4391 (readdir race condition leading to + spurious error messages) + +2004-04-24 James Youngman + + * README-CVS: Corrected the instructions for getting gnulib via CVS. + +2004-04-13 James Youngman + + * doc/find.texi: + Actioned Savannah bug #8558 (find complains when it tries to recurse + into directories that it had removed). + +2004-03-13 James Youngman + + * ChangeLog: Updated from checkin comments. + + * find/find.c: + Oops, there is no access to the predicate name table if DEBUG is + not #defined. + + * find/parser.c: + Detect arithmetic overflow (poorly) in insert_time(), which diagnoses + the failure to handle large arguments to -mtime. The existing code + does careful computation and then bungs the value into a time_t, which + ruins all our careful effort. The new code is not a great + improvement. We just check the result to detect overflow, rather than + actually avoiding the overflow. + + * find/find.c: + Fixed Debian bug #185202 by checking for any trailing predicates after + the top-level invocation of get_expr() has done its work. + + * locate/locate.1, xargs/xargs.1: + Fixed Debian bug 175372, inappropriate 'L' suffixes on manual + page section indicators + + * find/find.1: + Removed "L" suffixes from manual page section indicators, to fix + Debian bug 175372. + + * debian/updatedb.conf: + Updated with list of filesystems from current Debian release. This + includes devfs, for example. + + * xargs/xargs.1: + Modified documentation of "-s" option to take into account the fix for + Debian bug #176201. + + * xargs/xargs.c: + Fixed Debian bug #176201, "xargs enviroment size limited to 20k", by + reading a patch offered by Bob Proulx and implementing something + substantially similar myself. + +2004-01-03 James Youngman + + * xargs/xargs.c: + Indicate that prep_child_for_exec() fixes Savannah bug #3992. + + * xargs/xargs.c: + Attach the stdin of xargs' child process to /dev/null so that if it + tries to read from its stdin it doesn't consume any of the list of + files that xargs is trying to use. + + * find/find.1: + Documented that the -regex option follows Gnulib's re_match() + implementation. + + * NEWS, locate/locate.c: Applied Savannah patch 2108 + + * xargs/xargs.c: Applied Savannah patch 1500 + + * find/find.1, doc/find.texi: + Improved the documentation for the %k and %b format specifiers to + -printf (Savannah bug #5034). Also pointed out that this handling is + different to that used by the "b" and "k" suffixes with "-size". + + * find/find.1: Improved the documentation for %k (Savannah bug #5034). + + * find/find.1: + Improved the documentation for -print0 in the manpage, fixing Debian + bug 111143. + + * README-CVS, find/pred.c, lib/listfile.c: + Brought up-to-date with change in gnulib's human.c - we no longer + use human_readable_inexact(), because it is no longer provided. + +2003-08-08 James Youngman + + * find/find.1: + Documented the fact that -printf also supports the '\0' escape code. + Added "STANDARDS CONFORMANCE" section. + +2003-08-02 James Youngman + + * find/find.1: + Explain that braces are not special when performing filename matching + with -name. + + * find/find.1: + added example of the use of -exec to the EXAMPLES section + + * find/fstype.c, locate/locate.c: + Savannah bug #4295 - implicit declarations of ctype.h functions + + * locate/locate.c: + Savannah bug #4279 - missing newline on locate help message + + * find/find.1, xargs/xargs.1: + Improved discussion of the -print0 option of find and the -0 option of xargs + +2003-06-26 James Youngman + + * import-gnulib.sh: + Remove reference to nonexistent module "basename" ("dirname" exists + and we already use that). + +2003-06-21 James Youngman + + * doc/find.texi: + Indicate that xargs stops immediately if a command exits with status 255 + + * xargs/xargs.1: + Document the fact that xargs exits immediately with an error message + if the command it executes exits with a status of 255. + +2003-06-18 James Youngman + + * find/find.1: + Indicate that -fls and friends always create their output file + +2003-06-16 James Youngman + + * ChangeLog, find/find.1, locate/locate.1, locate/locatedb.5, locate/updatedb.1, xargs/xargs.1: + Added BUGS section to manual pages. This section includes information about known bugs and how to report new bugs. + + * AUTHORS: Identify the current maintainer. + + * TODO: Removed the TODO items which have now been done. + + * THANKS: Added Bruno Haible and Bob Proulx. + + * xargs/xargs.c: xargs/xargs.c (DO_MULTIBYTE): New macro. + (mbstrstr): New function. + (do_insert): Use it instead of strstr. + + * config.guess, config.sub: + Use config.guess and config.sub from automake + + * find/fstype.c: + Bruno Haible: (fstype_to_string) Don't define this function if + HAVE_F_FSTYPENAME_IN_STATFS is defined. + + * configure.in: + Bruno Haible: Prefer the 4.4BSD API (if present) to the 4.3BSD API, + because some 4.4BSD systems have but no /etc/mtab file. + + * doc/find.texi, find/find.1: + Applied patch 1498 (documenting the backslash escape sequence) + + * locate/updatedb.sh: Applied (my own version of) Savannah patch 1601. + + * doc/find.texi: + Applied Savannah patch #1547 (document the fact that printf + field-width specifiers are supported). + + * xargs/xargs.c: + Applied Savannah patch #1499 (adds final newline to usage message). + +2003-06-14 James Youngman + + * NEWS, configure.in: + Updated version number to 4.2.0-CVS [not ready for release yet] + + * configure.in, doc/.cvsignore, doc/Makefile.in, find/.cvsignore, find/Makefile.am, find/Makefile.in, find/defs.h, find/find.c, find/fstype.c, find/parser.c, find/pred.c, find/testsuite/.cvsignore, find/testsuite/Makefile.in, find/testsuite/config/unix.exp, find/tree.c, find/util.c, import-gnulib.sh, intl/bindtextdom.c, intl/dcgettext.c, intl/dcigettext.c, intl/dcngettext.c, intl/dgettext.c, intl/dngettext.c, intl/explodename.c, intl/finddomain.c, intl/gettext.c, intl/intl-compat.c, intl/l10nflist.c, intl/loadmsgcat.c, intl/localcharset.c, intl/localealias.c, intl/ngettext.c, intl/plural.y, intl/textdomain.c, lib/.cvsignore + also need stpcpy (e.g. for Solaris) + + * intl/dcigettext.c: + plural_lookup: don't use a variable called "index", because we may + have done "#define strchr index", in which case using a variable + called index will prevent us calling strchr(p, ch) in the same scope. + + * find/defs.h, find/find.c, find/fstype.c, find/parser.c, find/pred.c, find/testsuite/config/unix.exp, find/tree.c, find/util.c, import-gnulib.sh, lib/Makefile.am, lib/listfile.c, lib/modetype.h, lib/nextelem.c, locate/bigram.c, locate/code.c, locate/frcode.c, locate/locate.c, locate/locatedb.h, locate/testsuite/config/unix.exp, locate/updatedb.sh, xargs/testsuite/config/unix.exp, xargs/xargs.c: + Updated copyright years and the address of the FSF + + * aclocal.m4, config.h.in, configure: + Removed files that are generated from other files (e.g. configure) + + * NEWS: Updated NEWS file for 4.1.20. + + * configure.in, lib/Makefile.am, po/POTFILES.in, po/da.po, po/de.po, po/es.po, po/et.po, po/findutils.pot, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sv.po, po/tr.po: + Updates to the i18n files to ensure that 'make dist' succeeds + + * lib/posix/.cvsignore, lib/posix/Makefile.am, + lib/posix/Makefile.in, lib/posix/regex.h, lib/strftime.c, + lib/strncasecmp.c, lib/strspn.c, lib/strstr.c, lib/strtol.c, + lib/strtoul.c, lib/strtoull.c, lib/strtoumax.c, lib/wait.h, + lib/waitpid.c, lib/xalloc.h, lib/xgetcwd.c, lib/xmalloc.c, + lib/xstat.in, lib/xstrdup.c, lib/xstrtol.c, lib/xstrtol.h, + lib/xstrtoul.c, lib/xstrtoul.h, lib/xstrtoumax.c, lib/yesno.c, + locate/Makefile.am, locate/Makefile.in, locate/locate.c, + locate/testsuite/Makefile.in, m4/.cvsignore, m4/ChangeLog, + m4/Makefile.am, m4/Makefile.am.in, m4/Makefile.in, m4/README, + m4/afs.m4, m4/assert.m4, m4/c-bs-a.m4, m4/check-decl.m4, + m4/codeset.m4, m4/d-ino.m4, m4/d-type.m4, m4/error.m4, + m4/fnmatch.m4, m4/fnmatchcase.m4, m4/fstypename.m4, m4/getline.m4, + m4/gettext.m4, m4/glibc.m4, m4/glibc21.m4, m4/iconv.m4, + m4/inttypes_h.m4, m4/isc-posix.m4, m4/jm-glibc-io.m4, + m4/jm-macros.m4, m4/jm-mktime.m4, m4/lcmessage.m4, m4/libintl.m4, + m4/link-follow.m4, m4/ls-mntd-fs.m4, m4/lstat-slash.m4, + m4/lstat.m4, m4/malloc.m4, m4/mbstate_t.m4, m4/memcmp.m4, + m4/prereq.m4, m4/progtest.m4, m4/readdir.m4, m4/realloc.m4, + m4/regex.m4, m4/st_dm_mode.m4, m4/st_mtim.m4, m4/stat.m4, + m4/strerror_r.m4, m4/strftime.m4, m4/timespec.m4, m4/uintmax_t.m4, + m4/ulonglong.m4, m4/xstrtoumax.m4, xargs/Makefile.am, + xargs/Makefile.in, xargs/testsuite/Makefile.in, + find/testsuite/Makefile.in, lib/.cvsignore, lib/Makefile.am, + lib/Makefile.in, lib/alloca.c, lib/ansi2knr.1, lib/ansi2knr.c, + lib/argmatch.c, lib/argmatch.h, lib/basename.c, lib/basename.h, + lib/dirname.c, lib/dirname.h, lib/error.c, lib/error.h, + lib/fileblocks.c, lib/filemode.c, lib/filemode.h, lib/fnmatch.c, + lib/fnmatch.h, lib/getline.c, lib/getline.h, lib/getopt.c, + lib/getopt.h, lib/getopt1.c, lib/human.c, lib/human.h, + lib/idcache.c, lib/malloc.c, lib/memcmp.c, lib/memcpy.c, + lib/memset.c, lib/mktime.c, lib/modechange.c, lib/modechange.h, + lib/pathmax.h, lib/quotearg.c, lib/quotearg.h, lib/realloc.c, + lib/regex.c, lib/regex.h, lib/rpmatch.c, lib/savedir.c, + lib/savedir.h, lib/stpcpy.c, lib/strcasecmp.c, lib/strdup.c, + find/Makefile.am, find/Makefile.in, find/find.c, find/pred.c: + Updated to work with current version of gnulib + + * import-gnulib.sh: New file. + + * config.h.in, configure, configure.in, doc/Makefile.in, import-gnulib.sh: + Updated to work with current version of gnulib + + * README-CVS: New file. + + * Makefile.am, Makefile.in, README-CVS, aclocal.m4: + Updated to work with current version of gnulib + +2003-05-26 James Youngman + + * po/pl.po, pt_BR.po, ru.po, sv.po, tr.po, da.po, de.po, es.po, + et.po, findutils.pot, fr.po, gl.po, id.po, it.po, ko.po, nl.po: + Changes to allow compilation on non-GNU systems (i.e. for the + macros that gnulib decides to #define to be effective) + +2003-05-24 James Youngman + + * po/da.po, de.po, es.po, et.po, findutils.pot, fr.po, gl.po, + id.po, it.po, ko.po, nl.po, pl.po, pt_BR.po, ru.po, sv.po, tr.po: + also need stpcpy (e.g. for Solaris) + + * po/POTFILES.in, da.po, de.po, es.po, et.po, findutils.pot, fr.po, + gl.po, id.po, it.po, ko.po, nl.po, pl.po, pt_BR.po, ru.po, sv.po, + tr.po: Updates to the i18n files to ensure that 'make dist' + succeeds + +2001-06-09 Kevin Dalley + + * intl/plural.c: + Changes the location of bison.simple after running bison on local + machine + + * ChangeLog: *** empty log message *** + + * Makefile.in, aclocal.m4, config.h.in, configure, + doc/Makefile.in, find/Makefile.in, find/testsuite/Makefile.in, + lib/Makefile.in, lib/posix/Makefile.in, locate/Makefile.in, + locate/testsuite/Makefile.in, m4/Makefile.in, xargs/Makefile.in, + xargs/testsuite/Makefile.in: Updates mostly from gettext-0.10.38 + + * ABOUT-NLS: * ABOUT-NLS: updated from gettext-0.10.38. + + * configure.in: * configure.in: add tr to ALL_LINGUAS. + + * intl/config.charset, intl/dcigettext.c, intl/dcngettext.c, + intl/dngettext.c, intl/libgnuintl.h, intl/localcharset.c, + intl/locale.alias, intl/ngettext.c, intl/plural.y, + intl/ref-add.sin, intl/ref-del.sin: updated from gettext-0.10.38 + + * intl/cat-compat.c, intl/linux-msg.sed, intl/po2tbl.sed.in, + intl/xopen-msg.sed, m4/ChangeLog: *** empty log message *** + + * m4/jm-macros.m4: + * jm-macros.m4 (jm_MACROS): remove jm_ICONV, which is replaced by + AM_ICONV, which is imported from gettext-0.10.38. removed + jm_GLIBC21, which is required in AM_GNU_GETTEXT, which is + imported from gettext-0.10.38. + + * po/stamp-cat-id: * stamp-cat-id: Remove file. + + * po/Makefile.in.in: * Makefile.in.in: Upgrade to gettext-0.10.38. + + * po/ChangeLog: * cat-id-tbl.c: Remove file. + + * po/de.po, po/es.po, po/et.po, po/fr.po: + * fr.po, et.po, es.po, de.po: updated translations to + findutils-4.1.7. + + * po/tr.po: * tr.po: New Turkish translation. + + * m4/ChangeLog: *** empty log message *** + + * intl/dgettext.c, intl/explodename.c, intl/finddomain.c, + intl/gettext.c, intl/gettext.h, intl/gettextP.h, + intl/hash-string.h, intl/intl-compat.c, intl/l10nflist.c, + intl/libgettext.h, intl/loadinfo.h, intl/loadmsgcat.c, + intl/localealias.c, intl/plural.c, intl/textdomain.c, + intl/ChangeLog, intl/Makefile.in, intl/VERSION, + intl/bindtextdom.c, intl/dcgettext.c: Updated from gettext-0.10.38 + + * m4/Makefile.am: + reflects addition of codeset.m4 from gettext-0.10.38, automatically + generated. + + * m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, + m4/isc-posix.m4, m4/lcmessage.m4, m4/progtest.m4: * + progtest.m4, lcmessage.m4, isc-posix.m4, iconv.m4, + glibc21.m4, gettext.m4, codeset.m4: updated from + gettext-0.10.38. + + * ChangeLog: *** empty log message *** + + * THANKS: added "Gerrit P. Haase" + + * m4/ChangeLog, locate/testsuite/.cvsignore, + xargs/testsuite/.cvsignore, config.h.in, configure, aclocal.m4, + doc/.cvsignore: *** empty log message *** + + * m4/jm-macros.m4: * jm-macros.m4 (jm_MACROS): add jm_FSTYPENAME + + * doc/Makefile.in: *** empty log message *** + + * doc/Makefile.am: + * doc/Makefile.am (MOSTLYCLEANFILES): add find.cps, which is + created by dvips. This should be taken care of by automake, but + the code is commented out. + +2001-06-09 Kevin Dalley + + * ABOUT-NLS: updated from gettext-0.10.38. + + * configure.in: add tr to ALL_LINGUAS. + + * doc/Makefile.am (MOSTLYCLEANFILES): add find.cps, which is + created by dvips. This should be taken care of by automake, but + the code is commented out. + + * po/stamp-cat-id: * stamp-cat-id: Remove file. + + * po/Makefile.in.in: * Makefile.in.in: Upgrade to gettext-0.10.38. + + * po/ChangeLog: * cat-id-tbl.c: Remove file. + + * po/de.po, es.po, et.po, fr.po: + * po/fr.po, et.po, es.po, de.po: updated translations to + findutils-4.1.7. + + * po/tr.po: * tr.po: New Turkish translation. + +2001-06-05 Kevin Dalley + + * locate/updatedb.sh: replace "whoami" with "id -u" when testing + for root. + +2001-06-04 Kevin Dalley + + * locate/testsuite/Makefile.am (DIST_SUBDIRS): remove second + instance of DIST_SUBDIRS. + + * locate/Makefile.am (install-data-hook): changed install target + to install-data-hook, which still installs other files. + + * doc/Makefile.am (MOSTLYCLEANFILES): added find.cps, which should + probably be handled by automake. + + * doc/mdate-sh: removed file in doc directory. It now exists only + in top_srcdir, but this changed required a patch to automake. + +2001-06-01 gettextize + + * Makefile.in.in: Upgrade to gettext-0.10.38. + * cat-id-tbl.c: Remove file. + * stamp-cat-id: Remove file. + +2001-05-20 Kevin Dalley + + * Version 4.1.7 + + * lib/Makefile.am (EXTRA_DIST): add strcasecmp.c + + * find/testsuite/Makefile.am (EXTRA_DIST): new tests: + find.gnu/name-opt.exp find.gnu/perm.exp find.gnu/perm.xo + find.gnu/prune-default-print.exp find.gnu/prune-default-print.xo + + * configure.in: update to 4.1.7 + + * config.sub, config.guess: upgraded to recent versions of + config.sub and config.guess. + + * locate/updatedb.sh: Add space to "#! /bin/sh" + + * configure.in: Add id to ALL_LINGUAS + + * lib/Makefile.am (EXTRA_DIST): getline.[ch] added + (libfind_a_SOURCES): getline.[ch] removed since getline.c is not + always needed. + + * po/da.po, de.po, es.po, et.po, fr.po, gl.po, id.po, it.po, ko.po, + nl.po, pl.po, pt_BR.po, ru.po, sv.po: updated to reflect changes + in source code. + + * po/id.po: New translation for Indonesia. + +2001-05-20 Lionel CONS + + * find/find.c: Fixed security holes. 1. There is a race + condition between the lstat() to detect a symbolic link and the + actual chdir(). 2. An attacker can move directories while find + is _inside_ so that chdir(..) goes out of the intended file tree. + + * lib/modetype.h: support for Solaris door files is added. + + * lib/filemode.c: S_ISDOOR is undef'ed if STAT_MACROS_BROKEN + + * find/pred.c (pred_type): -D option (for Solaris door files) is + added. + + * find/parser.c (insert_type): -D option (for Solaris door files) + is added. + + * find/find.1: -D option (for Solaris door files) is documented + + * doc/find.texi (Type): -D option (for Solaris door files) is + documented + +2001-05-02 Kevin Dalley + + * configure.in: Change AC_CHECK_MEMBERS to conform to new + autoconf. Add Danish. + +2001-04-28 Kevin Dalley + + * po/sv.po, ru.po, pt_BR.po, pl.po, nl.po, ko.po, it.po, gl.po, + fr.po, et.po, es.po, de.po, findutils.pot: new translations, and + new source code to translate. + + * po/da.po: new Danish translation. + +2001-01-20 Kevin Dalley + + * doc/find.texi (Adding Tests): Place space in "#! /bin/sh". + + * find/testsuite/find.gnu/prune-default-print.xo, + find/testsuite/find.gnu/prune-default-print.exp: test for "find + . -prune" which passes after changes. Also see name-opt.exp. + + * find/util.c (get_new_pred): + * find/tree.c (set_new_parent): + * find/parser.c (various parse functions): + * find/find.c (main): + (default_prints): new function + * find/defs.h (struct predicate): added no_default_print + side_effects are no separated from no_default_print. predicates + which cause side effects should not be reordered (optimized). + predicates which cause printing should have printing turned off. + Printing statements also cause side effects. + +2000-10-29 Bruno Haible + + * locate/code.c (main), doc/find.texi: improve handling of + non-ASCII characters used old format. + +2000-10-21 Paul Eggert + + If open + fchdir fails, fall back on xgetcwd + chdir. + The old code tested for this at compile-time, + but SunOS 4.1.4 fchdir can fail at run-time. + + * find/defs.h (fchdir): Define to -1 if not available. + * find/defs.h (starting_dir, starting_desc): + Always declare. starting_dir now points to const. + * find/find.c (starting_dir, starting_desc): Likewise. + * find/find.c (starting_dir): + Now "." if starting_desc is nonnegative, for benefit of diagnostics. + (main, process_top_path, process_dir): + If open + fchdir fails, fall back on xgetcwd + chdir. + * find/pred.c (launch): Likewise. + +2000-10-20 Kevin Dalley + + * xargs/xargs.c, locate/updatedb.sh, locate/locate.c (usage), + find/parser.c (parse_help): add bug reporting address to help + +2000-10-13 Kevin Dalley + + * depcomp, lib/depcomp: depcomp moved from lib to . + + * po/sv.po, ru.po, pt_BR.po, pl.po, nl.po, ko.po, it.po, gl.po, + fr.po, findutils.pot, et.po, es.po, de.po: updated after addition + of lib/rpmatch.c + +2000-10-11 Kevin Dalley + + * Version 4.1.6 + + * locate/testsuite/config/unix.exp: set PRUNEFS to "" for the + testsuite. + +2000-10-10 Bruno Haible + + * lib/Makefile.am (libfind_a_SOURCES): added yesno.c + + * lib/yesno.c, lib/rpmatch.c: new files. + + * find/pred.c: use function yesno(). + +2000-10-10 Kevin Dalley + + * locate/testsuite/Makefile.am: Added missing \ at end of + EXTRA_DIST lines. + + * locate/testsuite/locate.gnu/ignore_case3.xo, + locate/testsuite/locate.gnu/ignore_case3.exp, + locate/testsuite/locate.gnu/ignore_case2.exp, + locate/testsuite/locate.gnu/ignore_case1.xo, + locate/testsuite/locate.gnu/ignore_case1.exp: place locatedb + inside tmp directory, add subdir directory under tmp. + + * locate/testsuite/config/unix.exp: clean up tmp after test is + finished. + +2000-10-10 Kevin Dalley + + * locate/testsuite/config/unix.exp (Repository): + + * po/POTFILES.in: added lib/rpmatch.c + +2000-10-09 Kevin Dalley + + * lib/fnmatch.c, lib/fnmatch.h: reverted to older version of + fnmatch which works with Solaris. + + * locate/testsuite/config/unix.exp: dejagnu unix.exp + + * xargs/testsuite/config/unix.exp: remove temporary file + + * xargs/xargs.c: spelling correction + + * m4/prereq.m4: updated and changed some macros + + * m4/jm-macros.m4: replaced jm_FUNC_FNMATCH with + kd_FUNC_FNMATCH_CASE_REPL + + * m4/timespec.m4, m4/strerror_r.m4, m4/mbstate_t.m4, + m4/largefile.m4, m4/gettext.m4, m4/fnmatchcase.m4, m4/d-type.m4, + m4/d-ino.m4, m4/c-bs-a.m4: new m4 macros. + + * m4/Makefile.am: add fnmatchcase.m4 and mbstate_t.m4 + + * locate/testsuite/locate.gnu/ignore_case3.xo, + locate/testsuite/locate.gnu/ignore_case3.exp, + locate/testsuite/locate.gnu/ignore_case2.xo, + locate/testsuite/locate.gnu/ignore_case2.exp, + locate/testsuite/locate.gnu/ignore_case1.xo, + locate/testsuite/locate.gnu/ignore_case1.exp, + locate/testsuite/config/unix.exp: tests related to "--ignore-case" + option. + + * locate/testsuite/locate.gnu: testsuite directory + + * locate/testsuite/Makefile.am (Repository): + + * locate/testsuite: add directory for locate testsuite + + * po/findutils.pot: updated file + + * po/sv.po, po/ru.po, po/pt_BR.po, po/pl.po, po/nl.po, po/ko.po, + po/it.po, po/gl.po, po/fr.po, po/et.po, po/es.po, po/de.po: + updated various po files. + + * locate/updatedb.sh: export TMPDIR, which is used by child + processes. + + * locate/locate.1, locate/locate.c: add "--ignore-case" option. + + * locate/Makefile.am: add testsuite subdirectory + + * find/testsuite/find.gnu/perm.xo, + find/testsuite/find.gnu/perm.exp, + find/testsuite/find.gnu/name-opt.xo, + find/testsuite/find.gnu/name-opt.exp: added test suites + + * configure.in: add locate/testsuite/Makefile + + * doc/find.info*: removed from repository + + * doc/find.texi: add documentation for "-i" option. + + * aclocal.m4: removed from repository, as it is generated. + + * find/pred.c: fixes problem with "find -perm -0100". + + * lib/lstat.c, lib/stat.c: removed from repository. These files + are generated from lib/xstat.in. + +2000-08-24 Kevin Dalley + + * doc/find.texi (Invoking xargs): changed @var{-s} to @samp{-s}. + +2000-05-13 Kevin Dalley + + * find/tree.c (opt_expr): move iname and ipath to the front of the + list of arguments. + + * doc/find.texi (Directories): changed wording for "-prune". + + * find/parser.c (parse_prune): set side_effects to true, to + prevent prune from being moved in opt_expr. + +2000-04-12 Kevin Dalley + + * doc/find.texi, doc/permi.texi: fix spellings, add LocalWords. + + * lib/Makefile.am: put getline.c back into libfind_a_SOURCES, + since getstr is needed. + + * Version 4.1.5 + + * po/POTFILES.in: updated list of files, updated po files. + + +2000-04-02 Paul Eggert + + Add support for large files, and port to Solaris 8 and earlier + versions. + + * lib/human.c (getenv): Depend on NEED_GETENV_DECL, not + HAVE_DECL_GETENV. + + * lib/strftime.c (my_strftime): Make sure we call the system + strftime, not ourselves, when invoking the underlying strftime. + + * m4/check-decl.m4 (jm_CHECK_DECLS): Remove memchr, nanosleep. + + * m4/jm-macros.m4 (jm_MACROS): Don't check for utime.h. Do not + require jm_BISON, jm_CHECK_TYPE_STRUCT_UTIMBUF, jm_FUNC_LCHOWN, + jm_FUNC_CHOWN, jm_FUNC_NANOSLEEP, jm_FUNC_GROUP_MEMBER, + jm_FUNC_PUTENV, jm_FUNC_GETGROUPS, AM_FUNC_GETLOADAVG, + jm_SYS_PROC_UPTIME, jm_FUNC_FTRUNCATE, jm_FUNC_UTIME. Do not + replace strcasecmp, dup2, gethostname, getusershell, stime, + strcspn, strpbrk, euidaccess, mkdir, rmdir, rpmatch, strndup, + strverscmp, memchr, memmove. Do not check for declaration of + lchown. Remove invocations of AM_FUNC_OBSTACK, AM_FUNC_STRTOD, + POW_LIBM, jm_LANGINFO_CODESET, jm_ICONV. Remove df tests. + (jm_CHECK_ALL_TYPES): Include when checking for + struct stat.st_blksize. + + * m4/strftime.m4 (jm_FUNC_GNU_STRFTIME): Set environment variable + in shell rather than using putenv, which isn't portable. + + * COPYING, lib/alloca.c, lib/dirname.c, lib/error.c, + lib/savedir.c, lib/strstr.c, m4/check-decl.m4, m4/d-ino.m4, + m4/d-type.m4, m4/getline.m4, m4/jm-glibc-io.m4, m4/jm-macros.m4, + m4/jm-mktime.m4, m4/ls-mntd-fs.m4, m4/memcmp.m4, m4/prereq.m4, + m4/readdir.m4, m4/regex.m4, m4/strftime.m4, m4/uintmax_t.m4: Sync + to latest version from sh-utils-2.0g. + + * config.guess, config.sub, lib/argmatch.c, lib/argmatch.h, + lib/human.c, lib/human.h, lib/memcpy.c, lib/quotearg.c, + lib/quotearg.h, lib/strtoull.c, lib/strtoumax.c, + lib/xstrtoumax.c, m4/c-bs-a.m4, m4/gettext.m4, + m4/largefile.m4, m4/lcmessage.m4, m4/link-follow.m4, + m4/progtest.m4, m4/strerror_r.m4, m4/timespec.m4, + m4/xstrtoumax.m4: New files, taken from sh-utils-2.0g. + + * lib/ansi2knr.1, lib/ansi2knr.c, lib/basename.c, lib/getopt.h, + lib/fnmatch.c, lib/fnmatch.h, lib/modechange.c: Sync to latest + unreleased version of GNU tar (between 1.13.17 and 1.13.18). + + * lib/basename.h, lib/waitpid.c: New files, taken from same + version of GNU tar. + + * lib/regex.c, lib/regex.h: Sync to GNU grep 2.4.2. + + * lib/posix/Makefile.am, lib/posix/regex.h: New files, taken from + GNU grep 2.4.2. + + * lib/strftime.c: Sync to textutils 2.0e. + + * acconfig.h, depcomp, lib/strcasecmp.c, m4/check-type.m4, + m4/const.m4, m4/decl.m4, m4/lfs.m4, m4/mktime.m4, m4/perl.m4, + m4/putenv.m4, m4/uptime.m4, m4/utimbuf.m4, m4/utime.m4, + m4/utimes.m4: Remove these files; no longer needed. + + * configure.in (AC_CANONICAL_HOST, AC_SYS_LARGEFILE, + jm_AC_TYPE_UINTMAX_T): Add. + (CACHE_IDS, FSTYPE_STATVFS, FSTYPE_USG_STATFS, FSTYPE_AIX_STATFS, + FSTYPE_MNTENT, FSTYPE_STATFS, FSTYPE_GETMNT): Add comment, so that + we don't need acconfig.h. + (AC_CHECK_TYPE): Add ssize_t. + (AC_REPLACE_FUNCS): Add waitpid. + (AC_CHECK_FUNCS): Remove basename. + (AC_FUNC_MKTIME): Remove. + (LIBOBJS): Add no-ops to work around automake 1.4 bug. + (AC_OUTPUT): Add lib/posix/Makefile. + + * find/defs.h: Include , , , + , , . All includers changed to not + include these files, and to include "defs.h" first (since config.h + must be included first). + (CHAR_BIT, S_ISUID, S_ISGID, S_ISVTX, S_IRUSR, S_IWUSR, S_IXUSR, + S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH, MOD_WXUSR, + MODE_R, MODE_RW, MODE_RWX, MODE_ALL): New macros. + (enum permissions_type): New enum. + (struct long_val.negative): New member. + (struct long_val.l_val): Now uintmax_t, not unsigned long. + (struct size_val.size): Likewise. + (struct perm_val): New type. + (struct predicate.perm): Now struct perm_val, not unsigned long. + (struct predicate.type): Now mode_t, not unsigned long. + (list_file): New parameters current_time, output_block_size. + All callers changed. + (savedir, basename): Remove decls. + (output_block_size, start_time): New extern vars. + + * find/find.c: Include , . + (output_block_size, start_time): New vars. + (main): Initialize them. No need to check for negative st_size, + since savedir now does it for us. + + * find/fstype.c: Include "dirname.h". + (xatoi): Remove. + (filesystem_type_uncached): Use xstrtoumax instead of xatoi. + + * find/parser.c: Include "xstrtol.h". + (get_num_days, get_num, parse_amin, parse_cmin, parse_mmin, + parse_size, parse_used, insert_time, insert_num): Compute using + uintmax_t, not unsigned long. + (parse_amin, parse_cmin, parse_mmin, parse_used, insert_time): + Keep track of whether time was negative before converting it to an + unsigned type. + (parse_daystart): Don't assume that localtime succeeds; e.g. it + can fail with 64-bit time_t and 32-bit tm_year. + (parse_perm, insert_type): Compute using mode_t, not unsigned + long. + (insert_type): Use symbolic constants like MODE_ALL instead of + traditional ones like 07777. Set new kind member to indicate + permissions type, instead of using unportable magic numbers. + (make_segment): We will use human_readable to convert most numeric + values, so simplify the cases. + (get_num_days): Write in terms of get_num, to avoid duplicated + code. + (insert_time, insert_num): When debugging, convert large values to + uintmax_t and output with %ju. + (get_num): Use xstrtoumax to do the real work. + + * find/pred.c: Include "basename.h", "human.h". + (DEV_BSIZE, ST_BLKSIZE, ST_NBLOCKSIZE): New macros, taken from + fileutils. + (ST_NBLOCKS): Replace with fileutils defn. + (MAX): New macro. + (ctime_format): New function. + (pred_fprintf, format_date): Use human_readable to output large + numbers portably. + (pred_fprintf): Use ctime_format to output ctime-style dates. Use + base_name to compute the base name of a path. With %m, output the + mode portably using traditional numbers, even if the host uses + some other numbering scheme. + (pred_iname, pred_name): basename -> base_name. + (pred_perm): Use new kind member to deduce permissions type, + instead of relying on magic numbers. + (pred_size): Compute using uintmax_t, not unsigned long. Avoid + overflow if file size is near the maximum. + (pred_type): Compute using mode_t, not unsigned long. + (launch): Use waitpid, not wait. Check for EINTR. + (format_date): Don't assume that localtime succeeds. + + * find/util.c (basename): Remove; we now use base_name. + + * lib/Makefile.am (SUBDIRS): New macro. + (libfind_a_SOURCES): Add argmatch.h, argmatch.c, basename.h, + basename.c, human.c, human.h, quotearg.c, quotearg.h, xstrtoumax.c. + Remove error.h, error.c, getline.c. + (EXTRA_DIST): Add mktime.c, regex.c. + + * lib/listfile.c: Include "human.h". + (alloca): Declare, or include appropriate files to declare. + (DEV_BSIZE, ST_NBLKSIZE, ST_NBLOCKS, ST_NBLOCKSIZE): New macros. + (convert_blocks): Remove. + (list_file): New current_time and output_block_size args. + Revamp quite a bit, to handle large numbers correctly + and to match GNU ls behavior more closely. + + * m4/Makefile.am (EXTRA_DIST): Add c-bs-a.m4, gettext.m4, + largefile.m4, lcmessage.m4, link-follow.m4, progtest.m4, + strerror_r.m4, xstrtoumax.m4. Remove check-type.m4, const.m4, + decl.m4, lfs.m4, mktime.m4, perl.m4, putenv.m4, timespec.m4, + uptime.m4, utimbuf.m4, utime.m4, utimes.m4. + + * xargs/xargs.c (wait_for_proc): Retry wait if it fails with + errno == EINTR. + +2000-04-05 Kevin Dalley + + * xargs/Makefile.am: add ansi2knr + + * xargs/xargs.c: add macros PARAMS rather than P_. Add + prototypes. + + * po/POTFILES: new file listing all POFILES. + + * m4/gl.po, m4/et.po: new files + + * m4/Makefile.am.in: updated file + + * m4: update directory + + * locate/Makefile.am: create updatedb from updatedb.sh + + * locate/updatedb.sh, locate/updatedb.in: removed file. Replaced + by updatedb.sh + + * locate/frcode.c, locate/code.c, locate/bigram.c: add macros + PARAMS rather than P_. Add prototypes. + + * lib/xstat.in: new file + + * lib/Makefile.am: update to latest versions of library files. + + * find/testsuite/Makefile.am: add CLEANFILES + + * find/util.c: remove definition of basename + + * find/util.c, find/tree.c, find/pred.c, find/parser.c, + find/fstype.c, find/find.c, find/defs.h: add macros PARAMS rather + than P_, for consistency, change to prototypes + + * find/Makefile.am: Add prototypes and ansi2knr + + * configure.in: add Galition and Estonian languages. + Miscellaneous other fixes. + + +2000-03-11 Kevin Dalley + + * lib/basename.c: Add file from libit. + * lib/Makefile.am (libfind_a_SOURCES): add basename.c since it is + no longer replaceable. + + * find/util.c: Remove definition of basename, which is now in + lib/basename.c (as base_name). + * find/pred.c: Use base_name, not basename. + * find/defs.h: Likewise. + + * configure.in : Don't replace basename. Now we use only + base_name. + +2000-02-26 Kevin Dalley + + * Version 4.1.4 + + * lib/strtoul.c: added to distribution + + * configure.in: added strtoul to AC_REPLACE_FUNCS + + * configure.in: added jm_CHECK_ALL_TYPE + +2000-02-23 Kevin Dalley + + * po/ChangeLog: removed, merged with top-level ChangeLog. + + * po/de.po: new version of German file. + + * po/gl.po, po/et.po: new languages, Estonian and Galician. + + * locate/updatedb.sh (PRUNEFS): enclose paths in quotes + +2000-02-17 Kevin Dalley + + * po/it.po: new version of Italian file. + + * locate/updatedb.sh (prunefs_exp): have sed statement use '*' + rather than the often unsupported '+'. + +2000-02-13 Kevin Dalley + + * configure.in: removed AC_ARG_PROGRAM, which is already in + AM_INIT_AUTOMAKE. + + * locate/Makefile.am (updatedb), locate/updatedb.sh: add + transforms of find, frcode, bigram, and code back into + updatedb.sh, which were accidentally removed. + +2000-02-12 Kevin Dalley + + * lib/wait.h: updated address. + +2000-01-26 Kevin Dalley + + * Version 4.1.3 + + * acconfig.h: added internationalization. + + * intl/*: copied from tar-1.13.17. + + * locate/Makefile.am, locate/locate.c, locate/code.c: + internationalized file. + + * locate/frcode.c, locate/bigram.c: include headers from ../lib + directory. + + * xargs/Makefile.am, xargs/xargs.c: internationalized directory. + +2000-01-26 Kevin Dalley + + * po/POTFILES.in: added list of files with translatable strings. + + * de.po, es.po, fr.po, it.po, ko.po, nl.po, pl.po, pt_BR.po, + ru.po, sv.po: New, slightly out of date, files imported from the + Translation Project: http://www.iro.umontreal.ca/contrib/po/HTML/, + German, Spanish, French, Italian, Korean, Dutch, Polish, Brazilian + Portuguese. + + +2000-01-24 Kevin Dalley + + * lib/xmalloc.c, lib/regex.c, lib/getopt.c: internationalization + works with current version of gettext. + + * lib/getline.h : added declaration of getstr. + * lib/Makefile.am (libfind_a_SOURCES): added getline.[ch] to + standard compilation. Added internationalization. + * find/Makefile.am (INCLUDES): corrected -I options for building + in other directories. + (LDADD): changes for internationalization. + + * configure.in (ALL_LINGUAS): added internationalization. + getline.c is always compiled and linked, because of getstr. + AM_GNU_GETTEXT + + * Makefile.am: + (DISTCLEANFILES): added intl/libintl.h + (AUTOMAKE_OPTIONS): added gnits to AUTOMAKE_OPTIONS + (SUBDIRS): added intl and po + + * acconfig.h: added internationalization values + + * THANKS: added thanks file for gnits compatibility. + +2000-01-22 Kevin Dalley + + * added intl directory. + * created po directory and added existing po files from + http://www.iro.umontreal.ca/contrib/po/HTML + + * Added internationalization, only with slightly out of date po + files for many locales. + +2000-01-18 Kevin Dalley + + * Version 4.1.2 + + * locate/Makefile.am: remove creation of updatedb, since it is now + made by configure + + * configure.in: updatedb is now created by configure. + + * xargs/Makefile.am: added testsuite to xargs directory + + * locate/updatedb.in: updatedb is now created by configure + + * locate/frcode.c, locate/code.c, locate/bigram.c: change return + from main to int. Replace getstr with getline, where possible. + + * locate/Makefile.am: place frcode, code, bigram in + libexec_PROGRAMS + + * lib/xstrdup.c, lib/xmalloc.c, lib/xgetcwd.c, lib/xalloc.h, + lib/strtol.c, lib/strstr.c, lib/strftime.c, lib/strdup.c, + lib/stpcpy.c, lib/stat.c, lib/savedir.h, lib/savedir.c, + lib/regex.h, lib/regex.c, lib/realloc.c, lib/pathmax.h, + lib/modechange.h, lib/modechange.c, lib/mktime.c, lib/memset.c, + lib/memcmp.c, lib/malloc.c, lib/lstat.c, lib/idcache.c, + lib/getopt1.c, lib/getopt.c, lib/getopt.h, lib/getline.c, + lib/getline.h, lib/fnmatch.c, lib/fnmatch.h, lib/filemode.c, + lib/filemode.h, lib/fileblocks.c, lib/error.c, lib/error.h, + lib/dirname.c, lib/alloca.c: updated to newer version of file from + fileutils. + + * find/version.c: version number is now automatically generated by + configure. + + * find/fstype.c (filesystem_type_uncached): fixes bug described as + follows: When 'find' looks for a fstype, it parses the /etc/mtab + until it finds the good line. But, if there is, before the good + line, a line whose mountpoint is unreachable, it fails. + + * doc/texinfo.tex: updated to newer version + + * doc/find.texi: added version.texi, fixed a few documentation bugs. + + * configure.in: new m4 features. + + * Makefile.am: moved testsuite to below corresponding directories + find and xargs. + + * acconfig.h: updated to match new m4 files. + + * m4: added m4 directory, largely borrowed from Jim Meyering's + fileutils. + +2000-01-17 Kevin Dalley + + * doc/find.texi (Multiple Files): placed missing xargs in examples + + * find/testsuite/find.gnu/depth.exp: added find tests to test + "-depth" bug. + + * doc/find.texi: include version.texi for automatic determination + of version number, update bug report email address to + bug-findutils@gnu.org. + (Combining Primaries With Operators): add indices for " ,", "()", + "-a", "-o", etc. + +2000-01-17 Andreas Schwab + + * find/tree.c (opt_expr): Never rearrange the arguments of the + comma operator, since it is not commutative. Remove useless + assignment.2 + +2000-01-17 Jonathan R. Ferro + + * find/find.c (process_path): fix problem with "-depth" which is + tested in depth.exp test. + +1999-08-15 Kevin Dalley > + + * find/fstype.c (filesystem_type_uncached): a stat failure with + EACCESS will ignore this file system keep on looking. Patch + suggested by Vincent Danjean . + +1999-08-15 Mark Kettenis + + * xargs/xargs.c (LONG_MAX): Define if necessary. + (main): If ARG_MAX is -1 (that is sysconf + (_SC_ARG_MAX) returns -1) the system does not impose a limit. In + that case, use LONG_MAX as the limit. + +1999-08-15 Kevin Dalley + + * find/version.c: version string is now set by config.h + +1999-08-08 Kevin Dalley + + * Version 4.1.1 + + * README-alpha: added alpha README file + + * find/defs.h: move lstat declarations into defs.h + + * xargs/Makefile.am, testsuite/Makefile.am, locate/Makefile.am, + lib/Makefile.am, find/Makefile.am, doc/Makefile.am, configure.in, + Makefile.am: update for automake-1.4 + +1999-08-02 Kevin Dalley + + * AUTHORS: added file listing AUTHORS + + * lib/Makefile.am: modified code for EXTRA sources + +1999-01-30 Kevin Dalley + + * added const to declaration of basename, which should satisfy + Linux as well as Hurd (fixes bug #31325). + +1998-12-04 Kevin Dalley + + * lib/nextelem.c: removed declaration of strdup and free, which + meets GNU coding standards and allows compilation on more + platforms. + + * find.texi: corrected explanation of -amin option which described + hours instead of minutes + +1998-09-26 Kevin Dalley + + * lib/getline.c: fix getstr so that it correctly handles long file + paths + +1998-09-20 Kevin Dalley + + * removed more function declarations to meet GNU coding standards + +1998-08-30 Kevin Dalley + + * lib/nextelem.c: removed declaration of strdup and free, which + meets GNU coding standards and allow compilation on sparc + + * corrected explanation of -amin option which described hours + instead of minutes + +1998-02-27 Kevin Dalley + + * locate/locate.c: add --existing option to locate, which only + prints the names of files which still exist + +1998-02-08 Kevin Dalley + + * locate/locate.c: corrected get_short so that it correctly + returns negative numbers. + + * remove declarations of various string functions. Removing the + declarations almost matches the GNU Coding Standards. + +1997-03-03 Kevin Dalley + + * xargs/xargs.c: xargs fixed to prevent occasional core dumping. + +1997-01-11 Kevin Dalley + + * locate/updatedb.sh: add --localuser option to updatedb, which + allows find to be run as nobody, while allowing database file to + be created as root, change suggested by + + +1996-12-28 Kevin Dalley + * added PRUNEFS as variable in updatedb and --prunefs as option to + updatedb + +1996-05-27 Kevin Dalley + + * updatedb.sh: when NETPATHS is used, only su to NETUSER if whoami + is root +1996-04-27 Kevin Dalley + + * lib/getline.c (getstr): verify that nchars_avail is *really* + greater than 0; set *n to a large enough number, stops some core + dumping + +Thu Nov 3 09:23:33 1994 David J. MacKenzie + + * Version 4.1. + + * locate/Makefile.am: Move updatedb from LIBSCRIPTS to SCRIPTS. + + * Makefile.am (distname): Change distribution name from find to + findutils. + + * testsuite/config/unix.exp: Don't abuse xfail; simulate it correctly. + + * locate/Makefile.am (CLEANFILES): Fix typo. + +Wed Nov 2 15:11:52 1994 David J. MacKenzie + + * The big 4 0. + + * lib/listfile.c find/defs.h (list_file): Take a stream arg. + * find/pred.c (pred_ls): pass it. + * find/parser.c pred.c defs.h (parse_fls, pred_fls): New functions. + +Tue Oct 25 16:09:04 1994 David J. MacKenzie + + * find/pred.c (pred_fprintf): Flush output after \c. From Chapman + Flack. + + * find/parser.c (insert_fprintf): Warn about unrecognized \ and % + sequences. + +Tue Oct 18 00:03:10 1994 David J. MacKenzie + + * find/defs.h parser.c pred.c tree.c util.c: Globally change + "victim" to "primary". + + * find/parser.c (insert_fprintf): For 'c' format, don't lose the + need_stat information. From Chapman Flack. + + * doc/find.texi perm.texi: New files. + * configure.in: Configure the doc directory. + + * find/pred.c (pred_regex): Check that the regex matched the whole + file name. + +Wed Oct 12 17:13:47 1994 David J. MacKenzie (djm@duality.gnu.ai.mit.edu) + + * find/find.c (main): Tell what the invalid arg is. + From Kaveh Ghazi. + +Fri Oct 7 12:33:24 1994 David MacKenzie + + * find/parser.c: Add -mount as an alias for -xdev. + From Klaus.Steinberger@physik.uni-muenchen.de (Klaus Steinberger). + + * lib/modechange.c: Make umask_value unsigned short. + + * xargs/xargs.c: Use symbolic constants in longopts. + From Chapman Flack. + +Wed Oct 5 11:23:09 1994 David MacKenzie + + * xargs/xargs.c (main, read_line, read_string, do_exec): Pass + along the lengths of the args. + (main): Calculate length of replace_pat. + (push_arg, do_insert): Use those lengths instead of calculating + them. + +Tue Oct 4 10:02:05 1994 David MacKenzie + + * locate/updatedb.sh Makefile.in: Add substitutions to get + the transformed program names. + + * xargs/xargs.c: Put back the global variables for now. + Rename some variables. Increase default args_per_exec. + Use boolean where applicable. + (main): Reduce default arg_max by 2048 for POSIX.2. + (read_string): Don't check EOF string. + (read_line, read_string): Take initial args size into account. + +Sat Oct 1 17:43:13 1994 David MacKenzie + + * find/pred.c (launch): Use pid_t. + + * xargs/xargs.c (EOF_STR): Define and use. + [__STDC__]: Declare xrealloc and xmalloc using void *. + * find/defs.h: Likewise. + + * find/defs.h: Only declare stpcpy if !HAVE_STPCPY. + + * xargs/xargs.c: Replace most global variables with structure + pointers passed as arguments. Use pid_t. + * lib/wait.h: Include sys/wait.h if HAVE_SYS_WAIT_H. + * configure.in: Call AC_TYPE_MODE_T and AC_HEADER_SYS_WAIT. + + * xargs/xargs.c: Improve paging performance and memory + fragmentation by building command arguments in a pre-allocated + buffer and re-implementing the child pid list as an expandable + array. From tsi@gpu.srv.ualberta.ca (Marc Aurele La France). + +Thu Sep 29 11:38:07 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu) + + * xargs/xargs.c [__STDC__]: Prototype declarations. + +Wed Sep 28 11:25:53 1994 David J. MacKenzie (djm@duality.gnu.ai.mit.edu) + + * find/fstype.c [AFS, __STDC__]: Fix definition of _VICEIOCTL. + +Tue Sep 27 08:14:27 1994 David MacKenzie + + * find/fstype.c (fstype_to_string): Add more cases. Use + INITMOUNTNAMES if defined. + * find/defs.h: Change boolean typedef from char to int. + * configure.in: Check for mktime. + +Tue Sep 27 01:20:28 1994 Kaveh R. Ghazi (ghazi@noc.rutgers.edu) + + * configure.in: Add AC_HEADER_STAT. + * lib/listfile.c, lib/modetype.h: Add STAT_MACROS_BROKEN. + + * find/pred.c: Move the inclusion of defs.h ahead of the first + test of _POSIX_VERSION. + + * lib/xgetcwd.c: Remove _POSIX_VERSION, rely only on HAVE_GETCWD. + +Mon Sep 26 16:43:01 1994 David MacKenzie + + * configure.in: Add AC_CONFIG_HEADER. + * find/*.c locate/*.c xargs/*.c: Include config.h. + * locate/updatedb.sh: Add --version; --old -> --old-format. + +Sun Sep 25 23:43:37 1994 David MacKenzie + + * find/* [__STDC__]: Prototype declarations. + + * locate/updatedb.sh: Account for renaming code and frcode. + + * find/find.c (process_path): Store dev and ino of directories in + current branch to avoid symlink loops. From DJ Delorie + . + (process_dir): If following symlinks, don't cd to ..; instead, + cd to the starting directory and then to the parent directory. + (main) [HAVE_FCHDIR]: Save the dev, ino of the starting directory. + (process_top_path) [HAVE_FCHDIR]: Use it. + * find/pred.c (launch) [HAVE_FCHDIR]: Likewise. + * defs.h [HAVE_FCHDIR]: Declare starting_desc instead of starting_dir. + * configure.in: Check for dev_t, ino_t, fchdir, fcntl.h. + +Fri Sep 23 11:55:38 1994 David MacKenzie + + * lib/listfile.c: Change #ifdef S_IFLNK to #ifdef S_ISLNK. + From Andreas Luik . + +Thu Sep 22 11:42:40 1994 David MacKenzie + + * locate/locate.c (last_literal_end): Dynamically allocate enough + memory for the subpattern. + +Wed Sep 21 06:12:56 1994 David MacKenzie + + * locate/locate.c (locate): Warn if database is >8 days old. + From Ian Lance Taylor. + + * xargs/xargs.c (do_exec), find/pred.c (launch): Set SIGCHLD to + default. From tsi@gpu.srv.ualberta.ca (Marc Aurele La France). + * find/find.c pred.c util.c lib/listfile.c: Remove fflush(stdout) + calls before error. error does it, and doesn't trash errno. + From tsi@gpu.srv.ualberta.ca (Marc Aurele La France). + + * find/fstype.c (filesystem_type_uncached): Don't trust mtab dev + number on HPUX. From Andreas Luik . + (filesystem_type_uncached): Don't cache unknown file system + types. From casper@fwi.uva.nl (Casper Dik). + + * locate/updatedb.sh: Collect results in temp file and rename it + atomically. From Andreas Luik . + + * xargs/xargs.c (parse_num): Print a long using %ld. From Jim + Meyering. + + * find/defs.h find.c parser.c pred.c util.c, lib/nextelem.c: + Emulate strchr and strrchr with index and rindex, not vice versa. + + Remove man directory; move man pages to the directories of the + programs they document. + + * locate/frcode.c: Renamed from code.c. + * locate/frcode.c (put_short): Renamed from puthalfword. + * locate/locate.c (get_short): Renamed from gethalfword. + (last_literal_end): Renamed from patprep. + (locate): Recognize old-format databases too. + * locate/locatedb.h: Add defines for old-format databases. + * locate/bigram.c locate/code.c: Put back programs to create + old-format databases. + * locate/updatedb.sh: Take --old option to use them. + +Tue Sep 20 15:41:11 1994 David MacKenzie + + * configure.in: Update for Autoconf v2. + * find/pred.c lib/savedir.c: Use new symbols for dir header. + * locate/updatedb.sh: Add --help option. + +Sun Feb 13 11:21:58 1994 Jim Meyering (meyering@comco.com) + + * man/Makefile.in [man1ext, man5ext]: Set man5ext (not man1ext) to 5. + +Sun Aug 1 22:30:55 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu) + + * bigram.c: File removed. + * getline.c, memcmp.c, locatedb.h, updatedb.1, locatedb.5: New files. + * updatedb.sh: Take command line options. + Don't do bigram compression. + * code.c, locate.c: Don't do bigram compression. + Write and read counts in network byte order. + Handle arbitrarily long paths. + Use a magic number at the start of the databases. + +Thu Jul 29 20:44:53 1993 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu) + + * Makefile.in (config.status): Run config.status --recheck, not + configure, to get the right args passed. + +Thu Jul 22 12:53:12 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu) + + * listfile.c (list_file): Print inode as a long. + +Wed Jul 14 14:14:45 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu) + + * fstype.c [STDC_HEADERS]: Include stdlib.h. + + * Move unistd.h include from parser.c and pred.c to defs.h. + +Wed Jun 30 14:14:47 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu) + + * updatedb.sh: Construct PRUNEREGEX from PRUNEPATHS with sed. + Prune /afs. Change NFSUSER to NETUSER and NFSPATHS to NETPATHS. + +Tue Jun 29 12:19:58 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu) + + * pred.c (pred_fprintf): Abort in switch if `c' is not A, C, or T. + +Mon Jun 28 00:18:52 1993 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu) + + * fstype.c (in_afs) [AFS]: New function, derived from code by + Sanjay Ramamurthy . + (filesystem_type_uncached) [AFS]: Call it if the fs type is + otherwise unknown. + + * parser.c (parse_size): Recognize b and w suffixes for dd + compatibility. + + * code.c (puthalfword): New function. + (main): Call it. + * locate.c (gethalfword): New function. + (locate): Call it. + From ifado!wb@germany.eu.net (Wilhelm B. Kloke). + + * listfile.c: Include pathmax.h. + (get_link_name): Always allocate PATH_MAX + 1 bytes for + readlink buffers. + * pred.c (pred_fprintf, insert_lname): Call get_link_name. + + * fstype.c (filesystem_type, filesystem_type_uncached), + listfile.c (list_file): Take an arg for the path to access. + * pred.c (pred_ls, pred_fstype, pred_fprintf): Pass it. + + * find.c (process_dir): Renamed from scan_directory. + + Changes from jrs@world.std.com (Rick Sladkey) to chdir into + subdirectories instead of using string concatenation, for speed: + * find.c (process_top_path): New function. + (main): Call it, and xgetcwd. + (process_path, scan_directory): Take new arg, the pathname + relative to ".". Use it and pass it on. + * pred.c (pred_and, pred_comma, pred_negate, pred_or, + pred_xtype, pred_fprintf, pred_empty, insert_lname): + access rel_pathname instead of pathname. + (launch): chdir to starting_dir. + * defs.h: Declare rel_pathname and starting_dir. + * find.c: Define them. + + * xgetcwd.c: New file. + + * updatedb.sh: Recognize -fstype NFS as well as nfs. + * locate.c (patprep): Skip trailing character classes correctly. + From luik@pharao.stgt.sub.org (Andreas Luik). + + * parser.c (parse_group): Make gid a gid_t, not short or int. + (parse_nogroup): Cast gid to unsigned when using it as an array index. + (parse_user, parse_nouser): Similar changes for uid. + * defs.h: Use uid_t and gid_t. + + * parser.c (parse_help): New function. + (parse_table): Add --version, -help, and --help options. + Rename struct parser_table_t to struct parser_table. + (parse_version): Exit after printing message, on + stdout not stderr. + + * xargs.c, locate.c (main, usage): Add --version and --help + options. + +Wed Mar 31 22:39:57 1993 Jim Meyering (meyering@comco.com) + + * parser.c: Define isascii macro to be 1 also if STDC_HEADERS. + * xargs.c: Ditto. + +Wed Mar 31 16:04:07 1993 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu) + + * pred.c (pred_fprintf): If curdepth is 0, don't nuke + segment->text; nuke cp. + +Mon Mar 29 15:57:20 1993 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu) + + * Version 3.8. + +Fri Mar 26 16:36:59 1993 David J. MacKenzie (djm@hal.gnu.ai.mit.edu) + + * pred.c (pred_ilname, pred_iname, pred_ipath): New functions. + (pred_table): Add them. + (insert_lname): New function. + (pred_lname): Call it. + * parser.c (parse_ilname, parse_iname, parse_ipath, + parse_iregex): New functions. + (parse_table): Add them. + (insert_regex): New function. + (parse_regex): Call it. + + * fstype.c (filesystem_type): Cache previous result. + (filesystem_type_uncached): New function. + pred.c (pred_fstype, pred_fprintf): Adjust callers to not cache. + + * parser.c: Don't define const. + + * fstype.c [FSTYPE_STATFS] (fstype_to_string): #ifdef + MOUNT_PC for 386bsd. + +Thu Mar 25 18:32:24 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu) + + * parser.c (parse_regex): If ignore_case, set up a translate + table for the regex. + + * defs.h: Include string.h or strings.h. + * find.c fstype.c parser.c pred.c util.c: Don't. + + * nextelem.c [index]: Don't redefine. + +Wed Mar 24 17:47:10 1993 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu) + + * xargs.c (wait_for_proc): Exit with a nonrunnable command's exit + status, not the wait status value. From + Andreas Schwab . + + * parser.c (make_segment, insert_fprintf), pred.c + (pred_fprintf): Add '%F' to print filesystem type. + + * parser.c (parse_fprintf): Check if second arg is missing. + +Tue Mar 23 13:18:08 1993 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu) + + * pred.c (pred_fprintf): For %P, don't move past an assumed + slash if the ARGV element ends with one, because in that case + we didn't add one. + + * parser.c (parse_printf): Check for missing arg. + From smj@cats.com (Steve James). + + * parser.c: Add #ifdef around atol decl for Linux. + +Fri Dec 11 08:17:07 1992 Jim Meyering (meyering@comco.com) + + * defs.h: Remove dcl of process_path. + * find.c: Put dcl of p + + * pred.c (pred_fprintf): Don't print "\n" unless it's in the + format string. + +Mon Oct 21 22:30:35 1991 David J. MacKenzie (djm at wookumz.gnu.ai.mit.edu) + + * defs.h, parser.c, pred.c: Rename some types that conflict + with reserved POSIX.1 namespace (ended in _t). + + + +Thu Oct 17 22:39:06 1991 David J. MacKenzie (djm at wookumz.gnu.ai.mit.edu) + + * xargs.c: Don't determine memory.h based on POSIX, which + doesn't mention it. + +Sat Oct 5 16:11:05 1991 Jim Meyering (meyering at churchy.gnu.ai.mit.edu) + + * parser.c (parse_perm): Parse new `-perm +mode' notation. + * pred.c (pred_perm): Interpret same. + +Fri Sep 13 14:58:27 1991 David J. MacKenzie (djm at churchy.gnu.ai.mit.edu) + + * xargs.c [POSIX]: Always use sysconf to get ARG_MAX. + +Thu Sep 5 23:57:06 1991 David J. MacKenzie (djm at apple-gunkies) + + * bigram.c, code.c (main): Make path_max int, not unsigned. + * locate.c (main): Check for pathconf failure. + +Thu Sep 5 11:54:44 1991 Jim Meyering (meyering at churchy.gnu.ai.mit.edu) + + * parser.c (insert_fprintf): Add `\\' escape and fixed `%%' + interpretation. + * pred.c (pred_fprintf): fixed off-by-one indexing problem + when handling [gGuU] printf formats. + +Wed Aug 28 20:53:57 1991 David J. MacKenzie (djm at wookumz.gnu.ai.mit.edu) + + * Version 3.2. + +Mon Aug 26 18:57:32 1991 David J. MacKenzie (djm at pogo.gnu.ai.mit.edu) + + * bigram.c, code.c: Fix handling of PATH_MAX. + Check for anomalous input line lengths. + From Bruce Evans. + +Fri Aug 23 11:00:18 1991 David J. MacKenzie (djm at apple-gunkies) + + * pred.c (pred_fprintf): Round block number up to get K. + +Thu Aug 22 10:46:30 1991 David J. MacKenzie (djm at apple-gunkies) + + * pred.c (pred_fprintf, pred_lname) [_AIX]: Allocate PATH_MAX + byte for link object since st_size is wrong. + + * listfile.c (list_file): Don't convert blocks to kilobytes if + env. var POSIX_ME_HARDER is defined. + + * fstype.c [FS_AIX_STATFS]: New case. + + * configure: Make sure the sys/mount.h is the 4.4BSD version + with grep instead of just testing whether it exists. + + * listfile.c (list_file): Add 1 to number of 512-byte blocks + before dividing to get 1K blocks (so we round up, not down). + +Wed Aug 21 13:02:46 1991 David J. MacKenzie (djm at wookumz.gnu.ai.mit.edu) + + * Version 3.1. + + * parser.c (parse_fprintf), pred.c (pred_fprintf): Add %k + conversion to print 1K blocks. + + * listfile.c: Print counts of 1K blocks, for consistency with + new fileutils release. Bad timing, there. + + * Version 3.0. + + * pred.c [VOID_CLOSEDIR]: Fake a return value for closedir, + which returns void on some systems, like Sequents. + * configure: Check sys/dir.h for 'void closedir'. + +Thu Aug 15 16:07:46 1991 David J. MacKenzie (djm at frob) + + * modetype.h: Define POSIX.1 stat stuff if missing. + * pred.c, parser.c, find.c, fstype.c: Don't define it. + * updatedb.sh: Use a variable substitution method like configure's. + * Makefile.in: Add datadir variable to separate programs from + data file. + + * parser.c, pred.c: Rename -fulldays to -daystart. + + * defs.h, find.c, parser.c, pred.c: Add many new predicates + from Jay Plett (jay@princeton.edu). + +Wed Aug 14 14:37:06 1991 David J. MacKenzie (djm at bleen) + + * parser.c (parse_size), pred.c (pred_size), defs.h (struct + size_t): Allow `k' to follow number to measure size in Kbytes. + * parser.c (parse_size, get_num, insert_num), defs.h (struct + size_t): Use enum comparison_type instead of short. + +Fri Aug 9 00:49:32 1991 David J. MacKenzie (djm at wookumz.gnu.ai.mit.edu) + + * xargs.c (read_line): Use isblank, to support POSIX locales. + + * fstype [FS_STATVFS]: New code for SVR4, from slootman@dri.nl + (Paul Slootman). + * configure: Figure out when to use it. + + * configure: Check for st_blocks in struct stat. + * listfile.c (ST_NBLOCKS): New macro. + (list_file): Print file's block count. + Use S_ISLNK instead of S_IFLNK. + * fileblocks.c: New file, from fileutils. + +Thu Aug 8 17:20:19 1991 David J. MacKenzie (djm at wookumz.gnu.ai.mit.edu) + + * parser.c, pred.c [CACHE_IDS]: Optional code to turn uid and + gid lookups into table lookups. + +Wed Aug 7 00:22:29 1991 David J. MacKenzie (djm at wheat-chex) + + * configure, Makefile.in's: Support +srcdir option via VPATH. + Clean up clean targets. + +Sat Jul 20 01:11:51 1991 David J. MacKenzie (djm at apple-gunkies) + + * configure: Filter /etc and /usr/etc from path. + + * xargs.c (wait_for_proc): Fix handling of child exit status. + (main): Exit with a nonzero status if any child did. + + * pred.c (launch): Flush stdout and stderr before forking. + + * fstype.c (filesystem_type) [FS_MNTENT]: Skip entries of + type "ignore". + +Fri Jul 19 22:53:42 1991 David J. MacKenzie (djm at bleen) + + * pred.c, locate.c: Use fnmatch instead of glob_match. + * fnmatch.c, fnmatch.h: New files. + + * Many files: Use string.h if STDC_HEADERS, as well as if USG. + + * locate.c, code.c, bigram.c: Possibly use pathconf to get + PATH_MAX. Use malloc to allocate path arrays. + + * xargs.c: Possibly use sysconf to get ARG_MAX. + (env_size): Make definition unconditional. + (main): Do arg_max adjustment that can't be done with + preprocessor now that ARG_MAX might be a function call. + (do_exec): Exit with status 126 or 127 after failed exec, for + POSIX.2 draft 11.1. + + * xargs.c, pred.c, listfile.c: Use POSIX, not UNISTD_MISSING. + * wait.h: Use POSIX, not WAIT_MACROS_MISSING. + + * COPYING: Use version 2. Update all files. + + * Replace Makefile and lib/Makefile with Makefile.in, + lib/Makefile.in and configure. Update README. + +Fri Apr 5 12:49:09 1991 David J. MacKenzie (djm at apple-gunkies) + + * Version 2.2. + +Fri Mar 15 20:44:45 1991 David J. MacKenzie (djm at geech.ai.mit.edu) + + * xargs.c (main): Always run the command if some args are left over. + Rename some variables. + +Fri Jan 18 03:35:57 1991 David J. MacKenzie (djm at geech.ai.mit.edu) + + * bigram.c, code.c, locate.c: Use LIMITS_MISSING, not + _POSIX_SOURCE, to decide whether to include limits.h. + + * parser.c, pred.c, listfile.c: Use POSIX, not _POSIX_SOURCE, + to decide whether to declare getpwuid and getgrgid. + + * xargs.c: Use POSIX, not _POSIX_SOURCE, to determine whether + to include memory.h. + +Sat Jan 12 04:12:34 1991 David J. MacKenzie (djm at wookumz.ai.mit.edu) + + * defs.h, find.c, parser.c, pred.c: Remove -permmask option. + +Thu Jan 10 04:32:52 1991 David J. MacKenzie (djm at albert.ai.mit.edu) + + * wait.h: Include sys/types.h to get pid_t. + + * xargs.c [USG && !STDC_HEADERS]: Only include memory.h if not + _POSIX_SOURCE. + +Tue Jan 1 23:53:32 1991 David J. MacKenzie (djm at albert.ai.mit.edu) + + * Version 2.1. + +Wed Dec 26 03:25:51 1990 David J. MacKenzie (djm at apple-gunkies) + + * locate.c, bigram.c, code.c: Attempt to get max. path length + on more kinds of systems, incl. POSIX. + + * pred.c, listfile.c, xargs.c: Get some decls from unistd.h, + if available. + + * find.c, defs.h: Make `cur_day_start' a time_t, not long. + +Fri Dec 21 01:49:12 1990 David J. MacKenzie (djm at egypt) + + * defs.h, parser.c: Remove unused field from `struct exec_t'. + + * xargs.c: Add +no-run-if-empty option to cause the command to + not be run if the input is empty. + + * defs.h (struct exec_t): Change the array of offsets into an + array of `struct path_arg'. + * parser.c (insert_exec_ok): Fill in new fields, to allow "{}" + to be substituted (multiple times) anywhere in an arg to -exec + or -ok. + * pred.c (pred_exec): Add code to substitute "{}" within args. + (pred_ok): After prompting, just run pred_exec. + +Thu Dec 20 02:32:09 1990 David J. MacKenzie (djm at egypt) + + * fstype.c (filesystem_type) [FS_MNTENT]: Allow for optional + "0x" at front of "dev=" mount option, which amd puts there but + Sun automounter doesn't. + +Sat Dec 15 19:01:12 1990 David J. MacKenzie (djm at egypt) + + * find.c (main), util.c (usage): Make directory args optional, + defaulting to ".". + +Sat Dec 15 18:36:29 1990 David J. MacKenzie (djm at apple-gunkies) + + * listfile.c: Define major and minor if not defined (as in POSIX). + +Mon Dec 3 01:04:35 1990 David J. MacKenzie (djm at alborz) + + * find.c, fstype.c, parser.c, pred.c, util.c: Flush stdout before + writing to stderr, in case they have been redirected to the + same file descriptor. + + * pred.c (launch): Use POSIX wait macros from wait.h. + + * xargs.c (print_xargs): Read from tty_stream, not stdin. + +Tue Nov 20 16:48:24 1990 David J. MacKenzie (djm at apple-gunkies) + + * Version 2.0. + + * fstype.c [FS_USG_STATFS]: New code. + [FS_STATFS]: For symlinks, statfs the directory the link is in + instead of the link. + * Various files: Conditionalize some declarations on + STDC_HEADERS or _POSIX_SOURCE. + +Fri Nov 16 12:24:43 1990 David J. MacKenzie (djm at egypt) + + * modetype.h: New file. + parser.c, pred.c: Use it. + +Thu Nov 15 18:05:54 1990 David J. MacKenzie (djm at apple-gunkies) + + * xmalloc.c: New file from fileutils. + + * fstype.c (fstype_to_string): Add case for MFS. + (filesystem_type): Take a pathname as a second arg. + [FS_STATFS] return "unknown" instead of exiting if statfs + fails because of ENOENT. + * pred.c (pred_fstype): Pass the pathname. Set current_dev. + * find.c (process_path): Make root_dev local again. + +Mon Nov 12 02:54:00 1990 David J. MacKenzie (djm at apple-gunkies) + + * pred.c (pred_fstype): Free old fs type. + + * fstype.c, pred.c (pred_fstype), parser.c (parse_fstype): + Reread the file system type info. every time a filesystem + mount point is crossed, to allow for automounting. + + * xstrdup.c: New file from fileutils. + + * find.c (process_path): Rename root_dev to current_dev and + make it global, for -fstype. + + * wait.h: New file taken from xargs.c. + + * xargs.c: Make limits.h vs. sys/param.h conditional on + LIMITS_MISSING instead of USG, to accomodate SVR2. + +Thu Nov 8 11:52:22 1990 David J. MacKenzie (djm at apple-gunkies) + + * parser.c, pred.c, listfile.c: If not _POSIX_SOURCE, declare + getpwuid and getgrgid. Use them. + + * listfile.c: If not _POSIX_SOURCE, define S_ISDIR and + S_ISBLK. Use them. + + * find.c: Use S_ISDIR instead of S_IFDIR, and define if not + _POSIX_SOURCE. + + * Makefile: Define AR and RANLIB and pass to child makes. + lib/Makefile: Use them. + + * xargs.c (WIFSIGNALED): Redefine so it works. + +Mon Nov 5 00:02:01 1990 David J. MacKenzie (djm at apple-gunkies) + + * find.c (process_path): For -xdev, process filesystem + mountpoints (but don't descend them), instead of skipping them + entirely. + + * find.c, parser.c, defs.h: Add -follow predicate. + + * xargs.c: Change ifdefs to support STDC POSIX systems. + +Sat Nov 3 20:18:05 1990 David J. MacKenzie (djm at apple-gunkies) + + * xargs.c (do_exec): Child process exits with status 255, not + 127, if command can't be run. + +Fri Nov 2 02:11:42 1990 David J. MacKenzie (djm at apple-gunkies) + + * xargs.c: Exit with status 127 if running commmand fails, as + required by POSIX. + + * fstype.c: Support -fstype for Ultrix (-DFS_GETMNT). + Sun/BSD code is now -DFS_MNTENT. + +Thu Nov 1 13:06:01 1990 David J. MacKenzie (djm at egypt) + + * Reorganize into subdirectories and add xargs. Rewrite Makefiles. + + * find.c (process_path, main): Allow a maxdepth of 0, meaning + only process command line args. + + * parser.c, pred.c: Add -print0 predicate. + + * xargs.c: Add -0 option and long options. Move standard + library functions into separate files. Use error instead of + fatal and fprintf/perror. Use POSIX macros for examining exit + status from wait. + (read_string): New function. + +Fri Sep 21 10:21:09 1990 David J. MacKenzie (djm at apple-gunkies) + + * find.c (process_path): Take DEPTH as an arg instead of ROOT, + and change callers. + +Thu Sep 20 23:58:47 1990 David J. MacKenzie (djm at apple-gunkies) + + * parser.c (parse_maxdepth): New function. + * find.c (process_path): If -maxdepth was given, don't go + more than that many levels deep. + * defs.h: Declare maxdepth. + +Wed Sep 12 02:12:31 1990 David J. MacKenzie (djm at apple-gunkies) + + * parser.c: Add -not as synonym for !. + +Sun Aug 26 06:16:08 1990 Jim Kingdon (kingdon at pogo.ai.mit.edu) + + * Makefile (TAGS): New target. + +Sun Aug 12 00:32:01 1990 David J. MacKenzie (djm at albert.ai.mit.edu) + + * xargs.c (main): Tell getopt to not permute. + +Sat Aug 4 21:43:45 1990 David J. MacKenzie (djm at pogo.ai.mit.edu) + + * parser.c (parse_perm), pred.c (pred_perm): Always compare + bits 07777. + + * locate.c, Makefile: Rename 'fastfind' program to 'locate', + following comment in POSIX.2 draft 10 rationale for find. + +Wed Jul 25 18:45:03 1990 David J. MacKenzie (djm at albert.ai.mit.edu) + + * listfile.c (getuser, getgroup): Make uid and gid unsigned + short, not int. + +Mon Jul 16 13:40:13 1990 David J. MacKenzie (djm at albert.ai.mit.edu) + + * defs.h: Don't declare fprintf and printf, in case they have + prototypes in stdio.h (important for functions that use stdarg). + +Sun Jul 15 23:39:39 1990 David J. MacKenzie (djm at albert.ai.mit.edu) + + * parser.c (parse_and): New function, for compatibility. + +Wed Jul 4 00:17:57 1990 David J. MacKenzie (djm at apple-gunkies) + + * find.c (main): Only enclose expressions that produce no side + effects within `( ... )'. + +Tue Jul 3 01:59:39 1990 David J. MacKenzie (djm at apple-gunkies) + + * parser.c (strspn): Stop when end of string reached. + + * Version 1.2. + + * Move version number from Makefile to new file version.c. + * parser.c: Recognize new -version predicate. + + * find.c (main): If no predicates that produce output are + given, default to -print if the entire expression is true, not + just the last part of an alternation. + * Print the names of predicates with invalid arguments. + +Mon Jul 2 23:48:17 1990 David J. MacKenzie (djm at apple-gunkies) + + * pred.c: Don't check for invalid comparison types in numeric + predicate functions. + +Thu Jun 28 00:34:57 1990 David J. MacKenzie (djm at apple-gunkies) + + * parser.c (parse_regex): Set fastmap and translate before + compiling regex. + +Mon Jun 25 18:08:59 1990 David J. MacKenzie (djm at albert.ai.mit.edu) + + * fastfind.c (fastfind): Initialize count to 0. + + * lib/updatedb.sh: Only do regex comparison on directories, + for speed. + + * listfile.c (list_file): Truncate user and group name to 8 chars. + +Sun Jun 24 13:51:27 1990 David J. MacKenzie (djm at albert.ai.mit.edu) + + * Version 1.1. + + * Makefile [DISTFILES]: Add COPYING. + +Fri Jun 22 03:54:27 1990 David J. MacKenzie (djm at albert.ai.mit.edu) + + * Version 1.0. + +Tue Jun 19 03:55:28 1990 David J. MacKenzie (djm at albert.ai.mit.edu) + + * lib/updatedb.sh: Prune entries that match PRUNEREGEX. + Split up finding files from computing bigrams. + Use redirection instead of nonportable grep -s to detect sort + failure. Optionally search network filesystems as well as + local ones. + + * pred.c (pred_regex): Match against full pathname instead of + just last element. + * util.c (basename): Return "/", not "", if given "/". + + * find.c (process_path): Fix error in handling "/" directory. + +Mon Jun 18 01:49:16 1990 David J. MacKenzie (djm at apple-gunkies) + + * parser.c [STRSPN_MISSING] (strspn): New function. + +Sun Jun 17 13:54:09 1990 David J. MacKenzie (djm at apple-gunkies) + + * listfile.c: New file. + * parser.c (parse_ls): New function. + * pred.c (pred_ls): New function. + + * find.c (main): Remove interface to fastfind, to prevent + conflict with POSIX syntax. + * util.c (usage): Remove fastfind syntax from message. + * fastfind.c (main): New function. + * Makefile: Make fastfind a separate program. + + * find.c (main): Print correct message if a predicate arg is + missing. + + * parser.c (insert_exec_ok): Make args that start with a ';' but + contain other characters not terminate the command. + +Fri Jun 15 00:33:45 1990 David J. MacKenzie (djm at albert.ai.mit.edu) + + * fstype.c: If MOUNTED isn't defined but MNT_MNTTAB is, use it + instead. True for HP/UX, at least. + +Thu Jun 14 10:10:25 1990 David J. MacKenzie (djm at albert.ai.mit.edu) + + * savedir.c: New file; now find won't run out of file + descriptors in deep trees. + * find.c (process_path): Use savedir. + +Sat Jun 9 03:15:21 1990 David J. MacKenzie (djm at albert.ai.mit.edu) + + * parser.c (parse_permmask): Allow symbolic mode masks. + (parse_perm): Free 'struct change' when done with it. + (get_oct): Function removed. + + * find.c (process_path): Allow arbitrarily-long filenames. + More efficient string copying. Initialize perm_mask to 07777 + instead of -1. + +Thu Jun 7 04:22:42 1990 David J. MacKenzie (djm at albert.ai.mit.edu) + + * Makefile, find.c: Use DIRENT to control whether + is used. + +Thu May 31 04:46:11 1990 David J. MacKenzie (djm at albert.ai.mit.edu) + + * parser.c (parse_regex): New function. + * pred.c (pred_regex): New function. + + * fstype.c (read_mtab): If mtab entry has a "dev=" option + (like in SunOS 4.1), use it, so there is no need to stat the + special file later on. + (xatoi, strstr): New functions. + +Mon May 21 01:04:42 1990 David J. MacKenzie (djm at abyss) + + * lib/updatedb.sh: Put BINDIR in PATH. + + * fstype.c: Do nothing if MNTENT_MISSING is defined. + + * fstype.c: New file. + * parser.c (parse_fstype): New function. + * pred.c (pred_fstype): New function. + + * parser.c (parse_newer): Failure to stat -newer file is a + fatal error. + + * pred.c (pred_ok): Flush output before reading. Use getchar + instead of scanf. + + * pred.c (pred_prune): Return false if -depth given. + * find.c: Apply the predicates to the dir when -depth and + -prune are given. + +Sun May 20 19:55:30 1990 David J. MacKenzie (djm at albert.ai.mit.edu) + + * pred.c (pred_prune): Set new global var `stop_at_current_level'. + * find.c (process_path): Test and reset it. + +Fri May 18 01:56:17 1990 David J. MacKenzie (djm at abyss) + + * modechange.c, modechange.h: New files. + * parser.c (parse_perm): Use mode_compile and mode_adjust to + parse arg, to allow symbolic mode for POSIX. + +Thu May 17 02:07:44 1990 David J. MacKenzie (djm at abyss) + + * parser.c (get_oct): Don't consider an empty string a valid number. + + * parser.c (parse_perm): If arg starts with '-', set flag bit + for special comparison (POSIX). + * pred.c (pred_perm): If flag bit set, compare s[ug]id & + sticky bits as well, and return true if the given perms are + set, ignoring other bits. + + * find.c: New global var `exit_status'. Use it. (POSIX) + * parser.c: Set `exit_status' if lstat on -newer file fails. + + * fastfind.c: New file. + * find.c (main): Call fastfind if given only 1 arg. + * util.c (usage): Update message. + * lib/{Makefile,updatedb.sh,bigram.c,code.c}: New files. + * Makefile: Add 'all' and 'install' targets. + +Wed May 16 23:23:35 1990 David J. MacKenzie (djm at abyss) + + * parser.c (parse_nogroup, parse_nouser): Implement. + * pred.c (pred_nogroup, pred_nouser): Implement. + +Mon May 14 00:09:35 1990 David J. MacKenzie (djm at abyss) + + * find.c: Add variable `stay_on_filesystem' for -xdev. + (process_path): Take an arg determining whether this call is + the root of a tree. Use lstat instead of stat. If + stay_on_filesystem, don't process a dir on a different + filesystem. + + * parser.c (parse_newer): Use lstat instead of stat. Is this right? + (parse_xdev): Set stay_on_filesystem. + + * parser.c: Add dummy parse_nogroup, parse_nouser, + parse_prune, and parse_xdev; to be written later. + * pred.c: Add dummy pred_nogroup, pred_nouser, pred_prune. + + * find.c: Support System V directory library/headers. + + * find.c (process_path): Don't continue with a file that stat + fails on. + + * defs.h, parser.c, pred.c: Change 'u_long' and 'u_short' to + 'unsigned long' and 'unsigned short'. + * find.c, defs.h: Remove 'convert_glob' variable. + * parser.c (parse_fullregex): Function removed. + (parse_name): Remove regular expression code. + (parse_type): Recognize sockets. + Add code to check for missing arguments to many parse_* functions. + * pred.c (pred_name): Use glob_match instead of regex. + +Sun May 13 17:45:09 1990 David J. MacKenzie (djm at albert.ai.mit.edu) + + * Replace fprintf, simple_error, and mem_error with error and + usage. + + * Fix string header includes for USG. + +Tue Mar 27 12:40:29 1990 David J. MacKenzie (djm at albert.ai.mit.edu) + + * defs.h: Change some #defines to enums. + +Sun Mar 25 22:08:58 1990 David J. MacKenzie (djm at albert.ai.mit.edu) + + * find.c (main): Don't take basename of argv[0]. + + * util.c (xmalloc): New function. + * find.c, parser.c, utils.c: Use xmalloc instead of malloc. + + * pred.c: Remove emulation of regex for BSD and use GNU + library version in regcmp.c instead. + * parser.c: Remove emulation of regcmp for BSD and use GNU + library version in regcmp.c instead. + * Makefile: Link with regex.o and regcmp.o. + Add a DISTFILES macro and dist target. + + * Indent source code. Move RCS logs to this file. + +Wed Mar 21 09:30:18 1990 David J. MacKenzie (djm at pogo.ai.mit.edu) + + * xargs.c: Indent. Comment and rename some global variables. + (main): Use getopt to parse options. Open new global var + `tty_stream' to /dev/tty if querying requested. + (print_args): Read response from tty_stream, not stdin. + (xmalloc): New function. + Global: Use xmalloc instead of malloc. + (usage): Revise message. + +87/02/22 20:01:20 20:01:20 cire (Eric B. Decker) + + * pred.c: added guts to pred_size + +87/02/22 00:59:42 00:59:42 cire (Eric B. Decker) + + * pred.c: added guts to perm and permmask. + +87/02/21 23:02:21 23:02:21 cire (Eric B. Decker) + + * pred.c: made pred_name only look at the last component of + the path. + +87/02/21 22:26:47 22:26:47 cire (Eric B. Decker) + + * pred.c: added guts to name. useds regex and regcmp to do + regular expression handling. + +87/02/21 00:17:21 00:17:21 cire (Eric B. Decker) + + * pred.c: added predicate newer + +87/02/20 11:40:07 11:40:07 cire (Eric B. Decker) + + * pred.c: added guts to pred_ok + +87/02/19 23:52:37 23:52:37 cire (Eric B. Decker) + + * pred.c: finished exec. + +87/02/22 20:01:09 20:01:09 cire (Eric B. Decker) + + * parser.c: added guts to parse_size + +87/02/22 00:59:16 00:59:16 cire (Eric B. Decker) + + * parser.c: added guts of perm and permmask. added getoct + routine for perm and permmask + +87/02/21 23:32:50 23:32:50 cire (Eric B. Decker) + + * parser.c: added -fre, -fullregex predicate to turn off + globbing conversion + +87/02/21 23:01:01 23:01:01 cire (Eric B. Decker) + + * parser.c: reworked name so the regexpr pattern includes $ at + the end to force globbing to work correctly. End of the + pattern refers to the end of the filename. + +87/02/21 22:25:34 22:25:34 cire (Eric B. Decker) + + * parser.c: added guts to name. uses a conversion from + globbing to regexp format. uses regex and regcmp to actually + to the comparison. + +87/02/21 00:17:11 00:17:11 cire (Eric B. Decker) + + * parser.c: added predicate newer + +87/02/20 11:39:35 11:39:35 cire (Eric B. Decker) + + * parser.c: added ok guts. consolidated exec and ok to using + insert_exec_ok + +87/02/19 00:20:54 00:20:54 cire (Eric B. Decker) + + * parser.c: minor bug in -fulldays predicate parser. It + should have set the flag full_days to true. + +87/02/22 00:58:32 00:58:32 cire (Eric B. Decker) + + * find.c: changed where we are setting perm_mask to -1. need + to make sure that this happens before every apply_predicate. + +87/02/21 23:32:11 23:32:11 cire (Eric B. Decker) + + * find.c: added error checking for no paths. better error + message if illegal ordering. + +87/02/21 22:19:58 22:19:58 cire (Eric B. Decker) + + * find.c: added global convert_glob + +87/02/22 20:00:12 20:00:12 cire (Eric B. Decker) + + * defs.h: added definition of BLKSIZE for size + +87/02/21 22:19:25 22:19:25 cire (Eric B. Decker) + + * defs.h: added global convert_glob for name diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..23e5f25 --- /dev/null +++ b/INSTALL @@ -0,0 +1,236 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free +Software Foundation, Inc. + +This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + +These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. (Caching is +disabled by default to prevent problems with accidental use of stale +cache files.) + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You only need +`configure.ac' if you want to change it or regenerate `configure' using +a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + +Some systems require unusual options for compilation or linking that the +`configure' script does not know about. Run `./configure --help' for +details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + +You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have to compile the package for one architecture at a +time in the source code directory. After you have installed the +package for one architecture, use `make distclean' before reconfiguring +for another architecture. + +Installation Names +================== + +By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + +Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + +There may be some features `configure' cannot figure out automatically, +but needs to determine by the type of machine the package will run on. +Usually, assuming the package is built to be run on the _same_ +architectures, `configure' can figure that out, but if it prints a +message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + +If you want to set default values for `configure' scripts to share, you +can create a site shell script called `config.site' that gives default +values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + +Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). Here is a another example: + + /bin/bash ./configure CONFIG_SHELL=/bin/bash + +Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent +configuration-related scripts to be executed by `/bin/bash'. + +`configure' Invocation +====================== + +`configure' recognizes the following options to control how it operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..fddb2e4 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,66 @@ +AUTOMAKE_OPTIONS=gnits +# readme-alpha + +EXTRA_DIST = COPYING ChangeLog TODO config.h.in stamp-h.in \ + THANKS import-gnulib.sh import-gnulib.config +# "tests" is the gnulib unit test dir. +SUBDIRS = gnulib tests build-aux lib find xargs locate doc po m4 + +ACLOCAL_AMFLAGS = -I gnulib/m4 -I m4 + +TESTFILE_SUFFIXES = .exp .xo .xe .xi + +# CONFIG_CLEAN_FILES = gnulib/lib/regex.c + + +# DISTCLEANFILES = intl/libintl.h + +dist-hook: jy-regex-fix findutils-check-pofiles findutils-check-testfiles + + +## +## regex.c seems to get left out if I use automake-1.9 but not +## if I use automake-1.7. Hence dist-hook has to be able to +## copy regex.c into the relevant (read-only) directory if it +## is not already there, but needs to avoid doing so if the +## file is already in place. Ugh. +## -- James Youngman +## +jy-regex-fix: + if test -f $(distdir)/gnulib/lib/regex.c ; then \ + echo regex.c is already in place. Great. ; \ + else \ + echo Making $(distdir)/gnulib/lib writable ... ; \ + chmod +w $(distdir)/gnulib/lib ; \ + echo Copying $(srcdir)/gnulib/lib/regex.c to $(distdir)/gnulib/lib ; \ + cp $(srcdir)/gnulib/lib/regex.c $(distdir)/gnulib/lib/regex.c ; \ + fi +# ls -ld $(srcdir)/gnulib/lib/regex.c $(distdir)/gnulib/lib + +## Check that we actually shipped all the .po files. If this rule fails, +## check ALL_LINGUAS in configure.in against the po files in the source +## directory (their names, not their contents) +findutils-check-pofiles: + @echo ; echo Checking to see if we distributed the full set of .po files + distcount=`ls $(distdir)/po/*.po | wc -l` ; srccount=`ls $(srcdir)/po/*.po | wc -l` ; test $$distcount -eq $$srccount || ( echo FAILED: Please check the value of ALL_LINGUAS in configure.in against the actual set of ".po" files >&2 ; false ) + @echo All .po files distributed OK. + +## Check that we actually shipped all the test files that exist in the source. +## runtest will run all the .exp files it finds, and so if we don't ship all +## of them, there will be some tests which people using the CVS code will be +## running, but people using the source distribution will not. +findutils-check-testfiles: + @echo + $(AUXDIR)/check-testfiles.sh "$(distdir)" "$(srcdir)" $(TESTFILE_SUFFIXES) + + +findutils-check-smells: + find $(srcdir) \( -path $(srcdir)/autom4te.cache -o \ + -path $(srcdir)/gnulib-cvs -o \ + -name .git -o \ + \( -type d -name CVS \) \ + \) -prune -o \ + \( -type f -o -type l \) \ + \! \( -name '*~' -o -name '*.xo' -o -name '*.xi' \) \ + -print0 | \ + xargs -0 python $(AUXDIR)/src-sniff.py diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..b41d9e9 --- /dev/null +++ b/NEWS @@ -0,0 +1,1317 @@ +GNU findutils NEWS - User visible changes. -*- outline -*- (allout) +* Major changes in release 4.3.11-CVS + +** Functional changes + +When the POSIXLY_CORRECT environment variable is set, "find -perm ++a+w" is rejected as invalid. Some other similar mode strings +starting with '+' which are not valid in POSIX are also rejected. + +** Bug Fixes + +#21039: Setting the POSIXLY_CORRECT environment variable now turns off +warnings by default, because POSIX requires that only diagnostic +messages (and -ok prompts) are printed on STDERR, and diagnostic +messages must also result in a nonzero exit status. + +** Documentation Fixes + +#21270: Formatting fixes to the xargs.1 manual page, including making +options bold instead of italic and making OPTIONS a section header +rather than a subsection. + +#21628: find -perm /000 matches all files rather than none, since +findutils-4.3.3. The Texinfo documentation is now consistent with the +manual page on this point. + +* Major changes in release 4.3.10, 2007-11-13 + +** Bug Fixes + +#21568: findutils gnulib code does not match the date in +import-gnulib.config. We now check out the gnulib code via +git-cvs-pserver. + +* Major changes in release 4.3.9, 2007-11-11 + +** Licensing + +Findutils version 4.3.9 is released under version 3 of the GNU General +Public License. + +** Bug Fixes + +#20834: Avoid segmentation violation for -execdir when $PATH is +unset. Assume that the PATH is safe in this situation. + +#20310: configure uses hosts's support status for "sort -z" when +generating the updatedb script for use on the target. This is +inappropriate when cross-compiling, so avoid doing that. + +#20263: Compilation fix for DEC Alpha OSF/1 cc, which forbids the +ordering comparison of function pointers. + +#20139: find -[acm]time -N (wrongly) includes files from N days ago, +as well as (correctly) from less than N days ago. + +#20273: When xargs is successful without consuming all of stdin (for +example, with the -E option), and stdin is seekable, xargs now +correctly restores the file position, even on platforms where exit() +does not follow the POSIX rules of doing likewise. Likewise for find +(for example, with the -ok action). + +#20547: The version information printed by find, xargs, locate, +updatedb, frcode and code now complies with the GNU Project's coding +standards. + +#20662: Avoid memory leak in find -name and other places affected by +gnulib dirname module. The leak had been present since 4.3.1. + +#20751: Avoid memory corruption in find -ls that has been present +since 4.3.1. + +#20871: Assertion failure introduced in 4.3.3, when oldfind is invoked +in a directory where the parent directory lacks search permission. + +** Enhancements + +#20594: Allow fine-tuning of the default argument size used by xargs +and find at ./configure time. + +#20688: The warning printed by -name or -iname when the pattern to +match contains a slash can now be silenced by -nowarn. This warning +was originally introduced unconditionally in 4.2.21. + +Translation of locate --limit problems is improved. + +POSIX will standardise -path, so the documentation no longer claims +that -wholename is the 'canonical' test, and -ipath no longer +generates a warning. + +** Documentation Fixes + +Point out more explicitly that the subsecond timestamp support +introduced by findutils-4.3.3 introduces a change in the format of +several fields. + +Also explain that when reporting a bug, you should check the most +recent findutils release first. + +Introduced doc/find-maint.texi, a maintenance manual for findutils. + +Added an extra worked example for find (copying a subset of files). + +The locate command's manual page now has a HISTORY section. + +#20951: Very bad/unclear/confusing documentation of security checks in +find -execdir + +#20865: Better documentation on the fact that -delete implies -depth +and that -delete interacts badly with -prune. + +#20552: Fixed typos, formatting and section ordering issues in the +find manual page. + +#20529: removed spurious 'o' in description of "xargs -a" in +doc/find.texi. + +#20232: The --max-database-age option of locate was added in release +4.3.3, but this file (NEWS) did not previously mention this fact. + +** Translations + +Updated Dutch translation. + + +* Major changes in release 4.3.8, 2007-06-12 + +** Bug Fixes + +#20157: Avoid segfault in locate when run as root. This is caused by +a buffer overrun, but at this time no exploit mechanism is known. + +* Major changes in release 4.3.7, 2007-06-09 + +** Functional changes + +Locate can now read old-format locate databases generated on machines +with a different byte order. It does this by guessing the byte order, +so the result is not completely reliable. If you need to share +databases between machines of different architectures, you should use +the LOCATE02 format (which has other advantages, as explained in the +documentation). + +** Security Fixes + +#20014: Findutils-4.3.7 includes a patch for a potential security +problem in locate. When locate read an old-format database, it read +file names into a fixed-length buffer allocated on the heap without +checking for overflow. Although overflowing a heap buffer is often +somewhat safer than overflowing a buffer on the stack, this bug still +has potential security implications. + +This bug also affected the following previous findutils releases: + + - All releases prior to 4.2.31 + - Findutils 4.3.0 to 4.3.6. + +This bug has been assigned CVE number CVE-2007-2452. + +** Bug Fixes + +#20128: Fix compilation error of find/tree.c on AIX with GCC. + +#20005: Tests -mtime -n and -mtime +n incorrectly treated like -mtime n. + +#19983: include_next causes compilation failure in findutils 4.3.6 on +non-GCC compilers + +#19981: Don't call setgroups if the function isn't available. This +fixes Savannah bug# 19981. + +#19980: Don't use the functions putw() or getw() since these are not +in current POSIX. Use the gnulib version of wcwidth() where the +system does not provide it. + +#19979: Compilation errors on BeOS + +#19970: Cannot cast from pointer to bool using gnulib's + +#19967: Use of __attribute((__noreturn__)) makes compilation fail with +some non-GCC compilers + +#19966: find should link against -lm for modf() and fabs() + +#19965: Compilation failure on OSF/1 4.0; non-declaration of uintmax_t + +#19948: Assertion failure O_NOFOLLOW != 0 on IRIX 6.5 + +#19871: Typos in find.1 + +#19596: Fixed this bug again, this time in the Texinfo manual (the +discussion should compare %b with %s/512, not %s/1024). + +#19416: _FORTIFY_SOURCE warn_unused_result warnings + +* Major changes in release 4.3.6, 2007-05-21 + +** Bug Fixes + +#19948: Fixed an assertion failure on IRIX 6.5 (O_NOFOLLOW is defined +to 0 there). + +#19923: Fixed an array overrun in groups[] array of 'locate' when run by +or as root. This bug appears not to be exploitable. If locate is not +installed setuid, the bug is not exploitable. For setuid +installations, it is concievable that there could be an information +leak if the user uses the -d option or the -e option, though the +maintainer has been unable to provoke this on an x86 system. + +#19871: Spurious .R directives in manpage produced error messages from +GNU troff. This is now fixed (they are corrected to .B). + +#19416: The result of I/O operations in print-related actions is now +checked, and failures are reported. Any failure will cause find's +exit status to be nonzero. The predicate itself will continue to +return true. + +** Compilation Fixes + +A variety of changes were made to allow compilation to succeed on +non-GNU systems. + +#19983: Now compiles on DEC C V5.9-005 on Digital UNIX V4.0 (or at +least, should). + +#19970: Compile correctly on C89 systems where the "_Bool" type is not +provided, taking into account the limitations of the gnulib +replacement for stdbool.h. + +#19967: Build successfully with C compilers that don't support the GCC + construct __attribute__((__noreturn__)). + +#19966: Findutils should now build on systems which have the modf() +and fabs() functions in the maths library, -lm. This includes some +versions of HP-UX and Solaris. + +#19965: Fixed a compilation failure on OSF/1 4.0 (no definition of the +type uintmax_t). + + +* Major changes in release 4.3.5, 2007-05-05 + +** Functional changes + +Updatedb can now support he generation of file name databases which +are compatible with slocate. For some time, GNU locate has been able +to read these. + +The /proc filesystem is excluded from the locate database (by +default; change PRUNEPATHS to modify this behaviour). + +** Bug Fixes + +#19806: The -samefile predicate might get fooled by inode reuse. We +now hold open a file descriptor on the reference file to prevent this. + +#19768: Better detection of corrupted old-style locate databases +(e.g. if the database is too short to include a complete bigram +table). + +#19766: The frcode and code programs now detect write errors more +reliably. + +#19371: Fix compilation failure on systems which #define open to +open64 (and similarly with the close system call). This fixes +Savannah bug #19371, affecting AIX 5.3. + +#19658: When cross-compiling, "make clean" no longer deletes the +generated file doc/regexprops.texi, because there is no way to +regenerate it. + +#19391: When xargs knows that the system's actual exec limit is larger +than the compiled-in ARG_MAX, use the system's limit without +generating an assertion failure. + +#18203: A duplicate report of bug #17478. + +#17478: Error messages from find can garble the console. + +#16378: Assertion failure if stat() returns 00000 as the mode +of a file. This apparently can happen occasionally with broken NFS +servers. + +#11668: FreeBSD extensions for time specification are now +implemented. In fact, these were included in findutils-4.3.3. The +change was listed as a functional change (whcih it is) and this bug +report was not mentioned. + +** Documentation Fixes + +The locatedb.5 manpage now documents the (default) LOCATE02 format +more clearly, and also documents the slocate database format. + +The maximum and default values applying to the -s option of xargs are +now documented more clearly in the manual page. + +* Major changes in release 4.3.4, 2007-04-21 + +** Bug Fixes + +#19634: Test suite now passes (again) if "." is on your $PATH. + +#19619: Findutils builds once again on Cygwin. + +#19617: Nonexistent start points are (once again) diagnosed in +ftsfind. This bug affected only findutils-4.3.3. + +#19616: Fix leaf optimisation and loop detection (which were +unreliable in findutils 4.3.3). This bug affected only +findutils-4.3.3. + +#19615: find --version no longer claims to be using FTS_CWDFD when it +isn't. This bug affected only findutils-4.3.3. + +#19613: "find -L . -type f" no longer causes an assertion failure when +it encounters a symbolic link loop. This bug affected only +findutils-4.3.3. + +#19605: Issue an error message (and later return nonzero exit status) + if a symbolic link loop was encountered during directory traversal. + +#19484: bigram.c and code.c fail if the first pathname recorded begins +with a space + +#19483: Inconsistent option highlighting in updatedb manpage + +#18414: Tests for "find -readable" are skipped for the superuser, as + on some systems (e.g. Cygwin with an Administrative user) users can + read mode-000 files. + +** Translations + +Findutils 4.3.4 includes a translation for the Ukranian language. + + +* Major changes in release 4.3.3, 2007-04-15 + +Fiundutils-4.3.3 was released on 2007-04-15. + +** Bug Fixes + +#19596: Correct the comparison in the find manpage between %b and %s +(the divisor is 512 not 1024). + +#18714: In the POSIX locale, vertical tabs and form feeds are not +field separators. + +#18713: Quoted but empty arguments which occur last on an xargs input +line are no longer ignored, but instead produce an empty argument. + +#18554: Documented the construct -exec sh -c 'foo "$@" bar' {} + + +#18466: we now avoid this bug by limiting "-execdir ...+" +to just one argument for the time being. There is a performance +penalty for doing this. We hope to make a better fix in a later +release. + +#18384: excess bracket in xargs --help + +#18320: Zero bytes in input should give warning + +#17437: Corrected the handling of X in symbolic permissions (such +as-u+w,a+X). This change actually occurred in findutils-4.3.2, but +the NEWS file for that release didn't mention it. + +#17396: find -mtime -atime -ctime does not support fractional part +(see "Functional changes" below) + +#14748: find -perm /zzz gives wrong result when zzz evaluates to an + all-zero mask + +#14535: correctly support case-folding in locate (that is, "locate +-i") for multibyte character environments such as UTF-8. Previously, +if your search string contained a character which was outside the +single-byte-encoding range for UTF-8 for example, then the +case-folding behaviour failed to work and only exact matches would be +returned. + + + +** Functional changes + +The -printf action (and similar related actions) now support %S, +which is a measurement of the sparseness of a file. + +The test "-perm /000" now matches all files instead of no files. For +over a year find has been issuing warning messages indicating that +this change will happen. We now issue a warning indicating that the +change has already happened (in 4.3.x only, there is no plan to make +this change in the 4.2.x series). + +The tests -newer, -anewer, -cnewer, -mtime, -atime, -ctime, -amin, +-cmin, -mmin and -used now support sub-second timestamps, including +the ability to specify times with non-integer arguments. + +The -printf format specifiers also support sub-second timestamps: + atime ctime mtime + %a %c %t + %AS %CS %TS + %AT %CT %TT + %A+ %C+ %T+ + %AX %CX %TX + + +The new test -newerXY supports comparison between status times for +files. One of the status times for a file being considered (denoted +X) is checked against a reference time (denoted Y) for the file whose +name id the argument. X and Y can be: + + a Access time + B Birth time (st_birthtime, currently unsupported) + c Change time + m Modification time + t Valid only for the reference time; instead of comparison + against a file status time, the argument is a time string. + Not yet supported. + +For example, -newermm is equivalent to -newer, and -neweram is true if +the file being considered was accessed more recently than the +reference file was modified. The -newerXY test supports subsecond +timestamps where these are available. The X=B variant is not yet +implemented. + +If you configure the source code and then run the tests with "make +check", the test suite fails rather than defaulting to testing the +system binaries. + +A new option, --max-database-age, has been added to locate. + + +* Major changes in release 4.3.2, 2006-11-25 + +** Bug Fixes + +#18222: find -printf '%H %P' once again prints the right result if +more than one start point was given on the command line. + +#17782: find -execdir now correctly puts the prefix "./" before the +expansion of "{}" rather than at the start of the argument it appears +in. Please note that if you use the -exec or -execdir actions with a +shell, then you may be vulnerable to shell code injection attacks, so +don't do that. It's not a security defect in find - you should not be +passing untrusted data (such as file names chosen by other people) to +the shell. + +#17490: find -regex generated a segfault in findutils-4.3.1, but this + is fixed in findutils-4.3.2. + +#17477: find -printf '%' (that is, where the format has a trailing %) +now generates an error message. + +#17372: The fts-based find executable (the default configuration uses +fts) is now much faster when -maxdepth is used on filesystems with +high fanouts. + +#15531: The -prune action now behaves correctly when applied to a file. + +** Functional changes + +The slocate database format is now supported. Preliminary changes +intended to eventually allow setuid operation of locate have also been +made. For the moment, please don't install GNU locate as a +set-user-ID program (except for testing purposes; if you do so, please +make sure that untrusted users cannot execute the set-user-ID locate +program). + +Use of an slocate database which was built with a nonzero security +mode (at the moment, GNU updatedb will not do this) forces locate's +"-e" option to be turned on, which has an effect on the "-S" option +which is probably surprising for most users. + + +** Documentation Fixes + +The global effect of options (other than -daystart and -follow) is now +explained more clearly in the manual page. Savannah bug #15360. + + +* Major changes in release 4.3.1, 2006-08-06 + +** Bug Fixes + +Find now follows POSIX rules for determining where directories end and +expressions start. This means that "find \(1 \!2 \, \)" now searches +in the four named directories, rather than trying to parse an +expression. (Savannah bug #15235). + +You now get a more helpful error message when you use command lines +which have missing expressions, such as + find . ( ) + find . ! + find . -a + find . \( -not \) + find . \( -true -a + +Savannah bug #15800: If find finds more subdirectories within a parent +directory than it previously expected to based on the link count of +the parent, the resulting error message now gives the correct +directory name (previously an error message was issued but it +specified the wrong directory). + +Savannah bug #16738: "find .... -exec ... {} +" now works if you have +a large environment and many files must be passed to the -exec +action. The same problem affected the -execdir action, though since +the number of files in a given directory will normally be smaller, the +problem was worse for -exec. + +Savannah bug #16579: Updatedb now works if it is running as a user +whose login shell is not actually a shell. + +There have also been a number of documentation improvements (includng +Savannah bug #16269). + +** Functional changes + +For find, debug output can now be enabled at runtime with the -D +option. This causes the printing of various sorts of information +about find's internal state and progress. + +The find option -nowarn cannot itself produce a warning (this used to +happen with commands like "find . -name quux -nowarn -print"). + +** Performance Enhancements + +Find now has a rudimentary cost-based optimiser. It has an idea of +the basic cost of each test (i.e. that -name is very cheap while -size +is more expensive). It re-orders tests bearing in mind the cost of +each test and its likely success. Predicates with side effects (for +example -delete or -exec) are not reordered. The optimiser is not +yet enabled by default, but the new option -O controls the query +optimisation level. To see this in action, try + find -D opt -O3 . -type f -o -type c -o -size 555 -name Z +and compare the optimised query with: + find -D opt -O3 . -size 555 -o -type c -o -type f -name Z +and + find -D opt . -size 555 -o -type c -o -type f -name Z + +Over time, as optimisations are proven to be robust and correct, they +will be moved to lower optimisation levels. Some optimisations have +always been performed by find (for example -name is always done early +if possible). + +** Translations + +Findutils 4.3.1 includes updated translations for the following +languages: + Vietnamese, Belarusian, Catalan, Danish, German, Greek, Esperanto, + Spanish, Estonian, Finnish, French, Irish, Galician, Croatian, Hungarian, + Indonesian, Italian, Japanese, Korean, Luganda, Malay, Dutch, Polish, + Portuguese, Brazilian Portuguese, Romanian, Russian, Kinyarwanda, + Slovak, Slovenian, Serbian, Swedish, Turkish, Chinese (simplified), + Chinese (traditional), Bulgarian + +* Major changes in release 4.3.0, 2005-12-12 + +The 4.3.x release series are currently 'development' releases. Please +test it, but think carefully before installing it in a production +system. New features in findutils-4.3.x are under development; they +may change or go away. + +All changes up to and including findutils-4.2.27 are included in this +release. In addition the following changes are new in this release: + +** Functional Changes + +By default, find now uses the fts() function to search the file +system. The use of fts greatly increases find's ability to search +extremely deep directory hierarchites. + +You can tell that the version of find you are using uses FTS, because +the output of "find --version" will include the word "FTS". + +Currently two binaries for 'find' are built. The configure option +--without-fts can be used to select whether 'find' uses fts: + + With fts Without fts +default configuration find oldfind +configure --with-fts find oldfind +configure --without-fts ftsfind find + +New tests, -readable, -writable, -executable. These check that a file +can be read, written or executed respectively. + +* Major changes in release 4.2.27, 2005-12-06 + +** Warnings of Future Changes + +The test -perm /000 currently matches no files, but for greater +consistency with -perm -000, this will be changed to match all files; +this change will probably be made in early 2006. Meanwhile, a warning +message is given if you do this. + +** Bug Fixes + +If xargs is invoked with many short arguments on PPC systems running +the Linux kernel, we no longer get an "argument list too long" error +from the operating system. + +Fixed a bug in the test suite which caused it to spuriously fail on +systems where ARG_MAX is different to the value used by the Linux +kernel on 32-bit x86-architecture systems. + +On systems running the Linux kernel, "find -printf %F" no longer +produces the wrong answer for files on filesystems that have been +remounted elsewhere using "mount --bind". (Savannah bug #14921). + +** Documentation Changes + +Following some extensive and detailed review comments from Aaron +Hawley, the material in the manual pages and the Texinfo manual are +now synchronised. + +The %M format specifier of "find -printf" is now documented, although +it has existed since release 4.2.5. + +The 'find' manual page now correctly documents the fact that -regex +defaults to using Emacs-style regular expressions (though this can be +changed). + +* Major changes in release 4.2.26, 2005-11-19 + +** Public Service Announcements + +I'd like to point out a second time that the interpretation of '-perm ++mode' has changed to be more POSIX-compliant. If you want the old +behaviour of the GNU extension you should use '-perm /mode'. See the +NEWS entry for findutils version 4.2.21 for details. + +** Functional Changes + +The xargs command now supports a new option (--delimiter) which allows +input items to be separated by characters other than null and +whitespace. This resolves Savannah support request sr #102914. + +Sometimes find needs to read the /etc/mtab file (or perform the +equivalent operation on systems not using /etc/mtab). If this +information is needed but not available, find now exits with an error +message non-zero status. If the information is not needed, find will +not spuriously fail. + +A new xargs option --delimiter allows the input delimiter to be +changed (previously \0 was the only choice unless you use the -L +option, which changes other semantics too). + +** Bug Fixes + +If the environment size is too large to allow xargs to operate +normally, 'xargs --help' still works (now). + +If the input to xargs is a large number of very short options (for +example, one character each), earlier versions of xargs would fail +with 'Argument list too long'. However, since this is precisely the +problem that xargs was invented to solve, this is a bug. Hence on +those systems we now correctly use a shorter command line. This +problem particularly affected 64-bit Linux systems because of the +larger size of pointers, although 32-bit Linux systems were also +affected (albeit for longer command lines). In theory the same +problem could affect 'find -exec {} +', but that's much less likely +(even so, the bug is fixed there too). + +Bugfix for an unusual failure mode (Savannah bug #14842) where an +attempt to allocate more space for directory contents succeeds but is +incorrectly diagnosed as a failure. The likelihood of you +experiencing this depends on your architecture, operating system and +resource limits. This failure has been observed in a directory +containing 35396 entries. + +** Documentation Changes + +The EXAMPLES section of the find manual page now correctly describes +the symbolic and octal modes for the -perm test. + +The documentation and "--help" usage information for the -L, -l, -I +and -i options have been clarified (but the behaviour has not changed). + +The documentation now explains more clearly what happens when you use +"-L -type l". + +* Major changes in release 4.2.25, 2005-09-03 + +** Bug Fixes + +find -perm /440 (which should succeed if a file is readable by its +owner or group) now works. Previously there was a bug which caused +this to be treated as "find -perm 440". + +Some files in the xargs test suite have been renamed to avoid problems +on operating systems whoch cannot distinguish filenames on the basis +of upper/lower case distinctions. + +The software now builds on Cygwin, including the generated file +regexprops.texi. + +Findutils should now build once again on systems supporting AFS, but +this support has not recently been fully tested. Findutils should +also (once again) build on Cygwin. + +** Other Changes + +The test suite for find is now much more extensive. + +* Major changes in release 4.2.24, 2005-07-29 + +** Documentation Changes + +The manual now includes a "Worked Examples" section which talks about +the various ways in which findutils can be used to perform common +tasks, and why some of these alternatives are better than others. + +The -I option of xargs (which is required by the POSIX standard) is +now documented. + +We now document the fact that find ensures that commands run by -ok +and -okdir don't steal find's input. Find does this by redirecting +the command's standard input from stdin. + +Many documentation readability enhancements and proofreading fixes +were contributed by Aaron Hawley. + +** Functional Changes + +*** Functional changes in locate + +The "--regex" option of locate now assumes the regular expression to +be in the same syntax as is used in GNU Emacs, though this can be +changed with the new option --regextype. This is a change from the +existing behaviour (which was to use POSIX Basic Regular Expressions). +Since this feature is releatively new anyway, I though it was more +useful to have compatibility between regular expression handling in +find and locate than to maintain the short-lived previous behaviour of +locate. + +The locate program now also supports a "--regextype" long option which +controls which regular expression syntax is understood by locate. +This is a long option and has no single-letter 'short option' +equivalent. + +*** Functional changes in find + +The regular expression syntax understood by "find" can be changed with +the -regextype option; this option is positional, meaning that you can +have several tests, each using a distinct syntax (this is not +recommended practice however). + +The default regular expression syntax is substantially the same as +that recognised by GNU Emacs, except for the fact that "." will match +a newline. + +The leaf optimisation can be disabled with the configure option +"--disable-leaf-optimisation", which is equivalent to specifying +"-noleaf" on all find command lines. This is useful for systems +having filesystems which do not provide traditional Unix behaviour for +the link count on directories (for example Cygwin and the Solaris 9 +HSFS implementation). + +** Bug Fixes + +*** Bug Fixes for find + +The -iregex test now works once again on systems that lack +re_search() (that is, systems on which findutils needs to use the +gnulib version of this function). + +find -regex now once again uses GNU Emacs-compatible regular +expressions. + +If invoked with stderr closed, the -fprint and -fprintf actions now no +longer cause error messages to be sent into the output file. + +If the link count of a directory is less that two, the leaf +optimisation is now disabled for that directory. This should allow +searching of non-Unix filesystems to be more reliable on systems that +don't take the trouble to make their filesystems look like traditional +Unix filesystems. Some filesystems don't even take the trouble to +have a link count of less than two and for these, -noleaf is still +required unless --disable-leaf-optimisation was used at configure time. + +The "%Y" directive for the -printf action now no longer changes find's +idea of the mode of the file, so this means among other things that +"-printf %Y %y" now works properly. This is Savannah bug #13973. + +* Major changes in release 4.2.23, 2005-06-19 + +** Documentation Changes + +The -L and -I options of xargs are currently incompatible (but should +not be). + +Improved the documentation for -execdir and -okdir. + +** Functional Changes to updatedb + +File names ending in "/" which are specified as an argument to +--prunepaths (or in $PRUNEPATHS) don't work, so we now issue an error +message if the user tries to do that. The obvious exception of course +is "/" which does work and is not rejected. + + +* Major changes in release 4.2.22, 2005-06-12 + +** Security Fixes + +If a directory entry searched with "find -L" is a symbolic link to +".", we no longer loop indefinitely. This problem affected find +versions 4.2.19, 4.2.20 and 4.2.21. This problem allows users to make +"find" loop indefinitely. This is in effect a denial of service and +could be used to prevent updates to the locate database or to defeat +file security checks based on find. However, it should be noted that +you should not use "find -L" in security-sensitive scenarios. + +** Other Bug Fixes + +None in this release. + +** Functional Changes to locate + +A locate database can now be supplied on stdin, using '-' as a element +of the database-path. If more than one database-path element is '-', +later instances are ignored. + +A new option to locate, '--all' ('-A') causes matches to be limited to +entries which match all given patterns, not entries which match +one or more patterns. + +** Documentation Changes + +Some typos in the manual pages have been fixed. Various parts of the +manual now point out that it is good practice to quote the argument of +"-name". The manpage now has a "NON-BUGS" section which explains some +symptoms that look like bugs but aren't. The explanations of the "%k" +and "%b" directives to "find -printf" have been imrpoved. + + +* Major changes in release 4.2.21, 2005-06-07 +** Functional Changes to find + +The GNU extension "find ... -perm +MODE" has been withdrawn because it +is incompatible with POSIX in obscure cases like "find ... -perm ++r". +Use the new syntax "find ... -perm /MODE" instead. Old usages will +still continue to work, so long as they don't conflict with POSIX. + +If the output is going to a terminal, the -print, -fprint, -printf and +-fprintf actions now quote "unusual" characters to prevent unwanted +effects on the terminal. See "Unusual Characters in File Names" for +further details. There is no change to the behaviour when the output +is not going to a terminal. The locate program does the same thing, +unless the -0 option is in effect (in which case the filenames are +printed as-is). + +** Functional Changes to locate + +The locate command will now read each locate database at most once. +This means that if you are using multiple databases and are searching +for more than one name, the results will now be printed in a different +order (and if you specified a small limit with --limit, you may get a +different set of results). + +A new option '--print' for locate causes it to print the matching +results even if the '--count' or '--statistics' option is in effect. + +** Bug Fixes +find /blah/blah/blah -depth -empty now works once again. + +The -regex and -iregex tests of find now correctly accept POSIX Basic +Regular Expressions. (Savannah bug #12999) + +The updatedb program now works on systems where "su" does not support +the "-s" option, for example Solaris. + +* Major changes in release 4.2.20, 2005-03-17 +** Internationalization and Localization +Updated Vietnamese and Dutch translations. + +** Bug Fixes +Minor bugfix affecting only those who compile from the CVS repository, +as opposed to those who compile from the source releases. + +* Major changes in release 4.2.19, 2005-03-07 +** Bug Fixes + +find should now no longer hang on systems which lack the O_NOFOLLOW +flag to open(2) and which are clients of an unresponsive NFS server +(Savannah bug #12044). + +We now avoid inappropriately failing for "find -L foo" or "find -H +foo" if foo is a symbolic link (Savannah bug #12181). Previously we +used to fail with the error message "Too many levels of symbolic +links". + +"find . -false -exec foo {} +" no longer runs an extra instance of foo +when find exits (Savannah bug #12230). + +If the chdir() safety check fails but we can no longer get back to +where we started, exit with an explanatory (fatal) error message. +This does not happen on GNU/Linux and FreeBSD because the safety check +is not needed (the security problem the safety check protects against +is prevented in a cleaner way on those systems). + +"make distclean" no longer deletes regex.c (which "make all" needs). + +** Functionality Changes +"find -printf "%h\n" will now print "." for files in the current directory. +Previously it printed nothing (but there was a bug in the %h +implementation anyway). This fixes Savannah bug #12085. + +Should now build (again) on non-C99-compliant systems. + +** Documentation enhancements +Fixed some typos and clarified wording in "Working with automounters". + +** Internationalization and Localization +New Vietnamese message translation. + +* Major changes in release 4.2.18, 2005-02-16 +** Bug Fixes +*** "find -depth" was missing out non-leaf directories when they contain + non-directories. This affected findutils releases 4.2.15, + 4.2.16 and 4.2.17, but the bug is now fixed. +*** Find no longer hangs on systems which are clients of unresponsive + NFS servers. +** Documentation improvements +*** Improvements and corrections to the find.1 manpage, including corrections to the descriptions of -H and -L. + +* Major changes in release 4.2.17, 2005-02-08 +** Bug Fixes +*** bug #11861 undefined symbol "basename" on IRIX 5.3 +*** bug #11865 xargs -i regression (as compared to findutils-4.2.12) +*** bug #11866 Typo in pred_okdir renders it useless (affecting 4.2.16 only) +*** patch #3723 fix recent process_top_path change (for -execdir on /) +*** Fixing bug #11866 and applying patch #3723 made -execdir work much better. +*** find bar/baz/ugh now works again if baz is a symbolic link (broken + in 4.2.15). + +* Major changes in release 4.2.16, 2005-02-05 +** Functionality Changes +*** Updated the message catalogues for the translated messages. +*** The subfs filesystem is now treated the same as the autofs + filesystem is. +*** New translations: Belarusian, Catalan, Greek, Esperanto, + Finnish, Irish, Croatian, Hungarian, Japanese, Luganda, + Malay, Romanian, Slovenian, Serbian, Chinese (simplified). + +** Bug Fixes +*** The -execdir action now works correctly for files named on the + command line. + +* Major changes in release 4.2.15, 2005-01-29 +** Functionality Changes +*** locate now supports matching regular expression (--regex). +*** --enable-d_type-optimization (introduced in findutils 4.2.13) is now turned on by default. + +* Major changes in release 4.2.14, 2005-01-25 +** Functionality Changes +*** New options -L, -P, -H for locate. The work in the same was as the same options for find. +** Bug Fixes +*** Don't include the "findutils/find/testsuite/find.gnu" subdirectory in the + distributed tar file more than once. +*** Should now build on Solaris once again. +*** -xtype and -printf %Y now work correctly for symbolic links once again +** Documentation improvements +*** All options for "locate" are now documented + +* Major changes in release 4.2.13, 2005-01-23 +** Performance Enhancements +*** On Linux and some other systems, a large performance improvement, + because we can eliminate many of the calls to lstat() (in extreme + cases, 99% of them). Limited testing shows a 2x speedup on NFS + filesystems. Other systems which can make use of this enhancement + include Mac OS X and *BSD. + +* Major changes in release 4.2.12, 2005-01-22 +** Functionality Changes +*** find is now POSIX-compliant, as far as I know. +*** -exec ... {} + now works. +*** New actions -execdir and -okdir which are like -exec and -ok but more secure. +*** "locate -w" is now a synonym for "locate --wholepath". +*** An empty path entry in the locate database path (for example "::" in + $LOCATE_PATH or in the argument to "locate -d") is taken to mean + the default database, whose name is hard-coded in locate. +** Bug Fixes +*** If find or xargs cannot write to stdout, for example because + output is redirected to a file and the disk is full, the + relevant program will return a non-zero exit status. + +* Major changes in release 4.2.11, 2004-12-12 +** Bug Fixes +*** Compilation fix for systems without EOVERFLOW. +*** More helpful error message if you make a mistake with (, ), -o or -a. +** Functionality Changes +*** If you have unclosed parentheses on the find command line, + or any of a number of similar problems, find will now produce + a more helpful error message. +*** locate -b is now a synonym for locate --basename +*** locate now supports a --statistics (or -S) option, which prints some + statistics about the locate databases. +*** Implemented the -samefile option. +** Documentation improvements +*** New chapter in the manual, "Security Considerations". +*** Better documentation for -prune (Mainly thanks to Stepan Kasal) +** Bug Fixes +*** locate's options -i and -w now work with the -e option (previously a bug + prevented this). + +* Major changes in release 4.2.10, 2004-12-06 +** Bug Fixes +*** Portability fix for fstype.c: should now compile on UNICOS, and possibly + also produce useful results on BeOS and Dolphin, perhaps other + systems too. + +* Major changes in release 4.2.9, 2004-12-05 +** Functionality Changes +*** xargs no longer treats a line containing only an underscore as a logical end-of-file. To obtain the behaviour that was previously the default, use "-E_". +*** xargs now supports the POSIX options -E, -I and -L. These are synonyms + for the existing options -e, -i and -l, but the latter three are + now deprecated. +** Bug Fixes +*** xargs -n NUM now invokes a command as soon as it has NUM arguments. + Previously, it waited until NUM+1 items had been read, and then + invoked the command with NUM arguments, saving the remaining one + for next time. +*** If "find -L" discovers a symbolic link loop, an error message is issued. +*** If you specify a directory on the find command line, but -prune + is applied to it, find will no longer chdir() into it anyway. +** Documentation improvements +*** The precise interpretation of the arguments to the -atime, -ctime + and similar tests in find has been documented more clearly. + +* Major changes in release 4.2.8, 2004-11-24 +*** Bugfix to the findutils 4.2.7 automount handling on Solaris. This + worked to some extent in findutils-4.2.7, but is much improved in + findutils-4.2.8. + +* Major changes in release 4.2.7, 2004-11-21 +** Functionality Changes +*** xargs can now read a list of arguments from a named file, allowing + the invoked program to use the same stdin as xargs started with + (for example ``xargs --arg-file=todo emacs''). +** Documentation improvements +*** The Texinfo manual now has an extra chapter, "Error Messages". Most + error messages are self-explanatory, but some of the ones which + are not are explained in this chapter. +** Bug Fixes +*** Avoid trying to link against -lsun on UNICOS, which doesn't need it or + have it. +*** Bugfix to the findutils 4.2.6 automount handling (which hadn't been enabled + on Solaris). +*** Reenabled internationalisation support (which had been accidentally + disabled in findutils-4.2.5). + +* Major changes in release 4.2.6, 2004-11-21 +** Bug Fixes +*** find now copes rather better when a directory appears to change just as + it is about to start examining it, which happens with automount. + This is because automount mounts filesystems as you change + directory into them. This should resolve Savannah bugs #3998, + #9043. + +* Major changes in release 4.2.5, 2004-11-11 +** Functionality Changes +*** The POSIX options -H and -L are supported. These control whether or not + find will follow symbolic links. +*** The BSD option -P is also now supported (though in any case + it is the default). +** Documentation improvements +*** Better documentation for "xargs -i". +** Bug Fixes +*** "make install" now respects DESTDIR when generating localstatedir. + (this is only relevant if you are installing to some location + other than the one that you indictaed when you ran "configure"). +*** Compatible with automake versions 1.8 and 1.9. +*** Build problems on UNICOS now fixed, though the linker will still generate + warnings because we try to link with the nonexistent library + "-lsun". Edit $(LIBS) to work around this problem. + +* Major changes in release 4.2.4, 2004-11-08 +** Functionality Changes +*** If your system sort command has a working "-z" option, updatedb will + now correctly handle newline characters in filenames (as will + locate). +*** xargs now uses 128Kb of command line by default (less if the system + doesn't support that much). +*** If you specify a 'find' option after non-option, a warning message + is now issued. Options should be specified immediately after the + list of paths to search. These warnings are enabled if you + specify the -warn option, or if stdin is a tty. They are diabled + by the use of the -nowarn option. +*** Like find, the locate program now supports an option --null (short form -0) + which changes the result separator from newline to NULL. +*** Locate supports the option -c (long form --count) which suppresses normal + output but prints on stdout the number of results produced (like + grep -c). +*** Locate supports the option -l (long form --limit) which limits the + number of results. This is useful if you only want to find out if + there are copies of a certain file on the system, but don't want + to wait for the entire locate database to be searched. +*** Locate now has an option --basename which forces the specified pattern to + be matched against the basename of the entries in the locate + database, rather than the whole name. The default behaviour + (matching against the whole name of the file including all the + parent directory names) corresponds to the option --wholename. +*** updatedb has a new option, --findoptions, that can be used to + pass extra options through to the find command that it uses. +** Bug Fixes +*** "find -printf '%H\n'" now works (rather than segfaulting) on + systems that have non-writable string constants. +*** Better POSIX compliance for the -s option to xargs (out of range + values should just result in bounding to the correct range, not an + error, so now we just print a warning message and adjust the + value). +*** Corrected section numbers of manual page cross-references + +* Major changes in release 4.2.3, 2004-10-30 +** Functionality Changes +*** Added new action -delete which deletes things that find matches. +*** Added new action -quit which causes find to exit immediately. +*** A new format directive '%D' for "find -printf" prints the device number. +*** The -ls predicate no longer truncates user or group names. +*** Added new option "-d" which is a synonym for "-depth" for compatibility + with Mac OS, OpenBSD and FreeBSD. This option is already + deprecated since the POSIX standard specifies "-depth". +*** Added two new format specifiers to the -printf action; these are + %y and %Y. They indicate the type of the file as a single letter; + these are the same latters as are used by the "-type" test. +*** If a parent directory changes during the execution of find, + the error message we issue identifies the nature of the change + (for example the previous and current inode numbers of the + directory we've just returned out of). +** Other Changes +*** Non-functional code changes to silence compiler warnings. + +* Major changes in release 4.2.2, 2004-10-24 +** Documentation improvements +*** "find ... -exec {}+" is not yet supported. +** Bug Fixes +*** Fixed compilation problems on Solaris, RedHat EL AS 2.1, Irix, AIX +*** Work around possible compiler bug on HP-UX 11.23 for ia64 +*** The built-in internationalisation support now works again. +** Other Changes +*** We now import the gnulib source in the way it is intended to be used, + which means among other things that we only have one config.h file + now. +*** Functions which findutils requires but which are not present in + gnulib are now defined in "libfind.a". This is in the lib + directory, while gnulib is in the gnulib subdirectory. +*** Fixed a typo in the address of the FSF in many of the file headers. + +* Major changes in release 4.2.1, 2004-10-17 +** Bug Fixes +*** 'find -name \*bar now matches .foobar, because the POSIX standard + requires it, as explained at + http://standards.ieee.org/reading/ieee/interp/1003-2-92_int/pasc-1003.2-126.html + +* Major changes in release 4.2.1, 2004-10-17 +** Bug Fixes +*** find -iname now works correctly on systems that have an fnmatch() function + that does not support FNM_CASEFOLD +*** updatedb now uses signal names for "trap" instead of numbers, + as per bug #9465 (see http://www.opengroup.org/onlinepubs/009695399/utilities/trap.html) +*** Better support for systems lacking intmax_t +** Other Changes +**** findutils now uses a newer version of gnulib (dated 2004-10-17). + +* Major changes in release 4.2.0, 2003-06-14 +** Functionality Changes +*** xargs now works better when the environment variables are very extensive. + The xargs command used to run into difficulties if the environment + data contained more than 20480 bytes. +*** New options -wholename and -iwholename + As per the GNU Projecvt coding standard, These are preferred over + the -path and -ipath options. Using -ipath now generates a warning, + though -path does not (since HPUX also offers -path). +*** The environment variable FIND_BLOCK_SIZE is now ignored. +*** New option "-ignore_readdir_race" + silences an error messages which would otherwise occur if a file is removed + after find has read it from the directory using readdir(), but before + find stats the file. There is also an option + -noignore_readdir_race which has the opposite effect. +** Documentation improvements +*** The -size option of find is now documented in more detail +*** POSIX compliance and GNU extensions + The find manual page also now includes a section + which describes the relationship between the features of GNU + find and the POSIX standard. Some other small improvements + to the find and xargs manual pages have been made. +*** The argument to the -fprintf directive is now better documented. + The escape code '\0' for the `-printf' predicate of find is now + documented, and the documentation for the %k and %b specifiers + has been improved. +*** xargs -i is now more clearly documented. +** Bug Fixes +*** locate 'pa*d' will now find /etc/passwd (if it exists, of course) +*** xargs standard input is not inherited by child processes + If the command invoked by xargs reads from its standard input, + it now gets nothing, as opposed to stealing data from the + list of files that xargs is trying to read. +*** Better support for 64-bit systems. +*** The command "xargs -i -n1" now works as one might expect, + I think this is a strange thing to want to do. +*** Arguments to find -mtime that are too large are now diagnosed + Previously, this just used to cause find just to do the wrong thing. +*** updatedb is now somewhat more robust + The updatedb shell script now does not generate an empty + database if it fails. +*** Sanity-check on some data read from locatedb + Locate now detects some types of file corruption in the + locate database. +*** The %k format specifier for -fprintf now works + This was broken in 4.1.20. + +* Major changes in release 4.1.20, 2003-06-14: +** New maintainer, James Youngman +** As far as I know, this is the first release after 4.1.7, but I've left + a gap just in case. +** We now use an "imported" version of gnulib, rather than including + a copy of the gnulib code in our CVS repository. There are no + differences in the build instructions, though (unless you are + building directly from CVS, in which case please read the file + README-CVS). +** There are no (deliberate) functional changes in version 4.1.20. + +* Major changes in release 4.1.7, 2001-05-20: +fix problem so that default "-print" is added when "-prune" is used. +security fixes related to directories changing while find is executing. + +* Major changes in release 4.1.6, 2000-10-10: +correct bug in prune. +added --ignore-case option for locate + +* Major changes in release 4.1.5, 2000-04-12: +Add support for large files + +* Major changes in release 4.1.4, 2000-02-26: +bug fixes, more up-to-date languages. + +* Major changes in release 4.1.3, 2000-01-27: +added internationalization and localization. + +* Major changes in release 4.1.2, 2000-01-18: +None. + +* Major changes in release 4.1.1, 1999-08-8: +attempt at successful compilation on many platforms after years of neglect + "--existing" option added to locate "--prunefs" option added to updatedb + +* Major changes in release 4.1, 1994-11-3: + +** Distribution renamed to findutils. +** updatedb is now a user command, installed in $exec_prefix/bin + instead of $exec_prefix/libexec. +** A few problems in Makefiles and testsuite corrected. + +* Major changes in release 4.0, 1994-11-2: + +** Documentation: +*** Texinfo manual. +*** Man page for updatedb. +*** Man page for the locate database formats. + +** find: +*** Takes less CPU time on long paths, because it uses chdir to descend + trees, so it does fewer inode lookups. +*** Does not get trapped in symbolic link loops when -follow is given. +*** Supports "-fstype afs" if you have /afs and /usr/afsws/include + and you configure using the --with-afs option. +*** New action -fls FILE; like -ls but writes to FILE. + +** locate: +*** Supports a new database format, which is 8-bit clean and + allows machines with different byte orderings and integer sizes to + share the databases. The new locate can also detect and read the + old database format automatically. The new databases are typically + 30% or more larger than the old ones (due to allowing all 8 bits in + file names). Search times are approximately the same, or faster on + some systems. +*** Warns if a file name database is more than 8 days old. + +** updatedb: +*** Takes command-line options. + +** xargs: +*** Performance improved 10-20%. +*** The EOF string is not used when -0 is given. +*** Now has a test suite. Some minor bugs fixed as a result. + +* Major changes in release 3.8, 1993-03-29: + +** case insensitive versions of -lname, -name, -path, -regex: + -ilname, -iname, -ipath, -iregex +** %F directive for -printf, -fprintf to print file system type + +* Major changes in release 3.7: + +** locate can search multiple databases +** locate has an option to specify the database path +** updatedb no longer goes into an infinite loop with some versions of tail + +* No NEWS was kept for earlier releases. Known release dates include: +** release 3.2, 1991-08-28 +** release 3.1, 1991-08-21 +** release 3.0, 1991-08-21 +** release 2.2, 1991-04-05 +** release 2.1, 1991-01-01 +** release 2.0, 1990-11-20 +** release 1.2, 1990-07-03 +** release 1.1, 1990-06-24 +** release 1.0, 1990-06-22 +** beginning of findutils history, 1987-02-21 + + --//-- +This is used by Emacs' spell checker ispell.el: + +LocalWords: ansi knr strftime xargs updatedb sh fnmatch hin strcpy +LocalWords: lib getstr getline frcode bigram texi depcomp automake +LocalWords: strncasecmp strcasecmp LIBOBJS FUNC prunefs allout libexec +LocalWords: testsuite Texinfo chdir inode fstype afs fls ls EOF lname +LocalWords: regex ilname iname ipath iregex printf fprintf + diff --git a/README b/README new file mode 100644 index 0000000..ec5d312 --- /dev/null +++ b/README @@ -0,0 +1,66 @@ +This package contains the GNU find, xargs, and locate programs. find +and xargs comply with POSIX 1003.2, as far as I know (with the +exception of the "+" modifier for the "-exec" action, which isn't +implemented yet). They also support a large number of additional +options, some borrowed from Unix and some unique to GNU. + +See the file NEWS for a list of major changes in the current release. + +See the file INSTALL for compilation and installation instructions. + +To verify the GPG signature of the release, you will need the public +key of the findutils maintainer. You can download this from +ftp://ftp.gnu.org/gnu/gnu-keyring.gpg. Alternatively, you could query +a PGP keyserver, but you will need to use one that can cope with +subkeys containing photos. Many older key servers cannot do this. I +use subkeys.pgp.net. I think that one works. See also the +"Downloading" section of http://www.gnu.org/software/findutils/. + +Special configure options: + +--with-afs + Make find support "-fstype afs". Requires /afs, /usr/afsws/lib, and +/usr/afsws/include. configure doesn't add AFS support +automatically because it adds considerably to find's size, and the +AFS libraries need -lucb on Solaris, which breaks find. + +--enable-id-cache + Make tables of used UIDs and GIDs at startup instead of using +getpwuid or getgrgid when needed. Speeds up -nouser and -nogroup +unless you are running NIS or Hesiod, which make password and group +calls very expensive. + +--enable-debug + Produce output on the standard error output indicating what find is +doing. This information includes details about how the command line +has been parsed and what files have been stat()ed. This output is +normally interesting only to the maintainer, and so is off by default. + +DEFAULT_ARG_SIZE= + If this environment variable is defined to a numeric expression +during configure, it determines the default argument size limits used +by xargs without -s, and by find, when spawning child processes. +Otherwise, the default is set at 128 kibibytes. If the system cannot +support the default limit, the system's limit will be used instead. + + +To gain speed, GNU find avoids statting files whenever possible. +It does this by: +1. Checking the number of links to directories and not statting files +that it knows aren't directories until it encounters a test or action +that needs the stat info. +2. Rearranging the command line, where possible, so that it can do tests +that don't require a stat before tests that do, in hopes that the +latter will be skipped because of an OR or AND. (But it only does +this where it will leave the output unchanged.) + +The locate program and its helper programs are derived (heavily +modified) from James Woods' public domain fast-find code, which is +also distributed with the 4.3BSD find. Because POSIX.2 requires `find +foo' to have the same effect as `find foo -print', the fast-find +searching has been moved to a separate program, `locate'; the same +thing has been done in 4.4BSD. If you use locate, you should run the +included `updatedb' script from cron periodically (typically nightly). + +Mail suggestions and bug reports for these programs to +bug-findutils@gnu.org. diff --git a/README-CVS b/README-CVS new file mode 100644 index 0000000..bc0471d --- /dev/null +++ b/README-CVS @@ -0,0 +1,48 @@ +This file describes how to build findutils starting from a set of code +checked out of CVS, rather than from a released source distribution. + +1. Prerequisites + * CVS + * A C compiler, linker and software development libraries (the standard + C library) + * GNU Autoconf version 2.61 or later (earlier versions *may* work) + * GNU Automake version 1.9 or later (earlier versions *may* work) + * GNU m4 version 1.4 or later + * GNU gettext (unless you use configure --disable-nls) + +2. Generate a gnulib installation within the fileutils source tree + + Change your working directory to the findutils source directory (that + is, the directory containing this file). Then run the following + command:- + + sh import-gnulib.sh + + This command will use CVS to check out the version of gnulib which is + intended to work with the findutils source you already have, as + configured by the file import-gnulib.config. The gnulib code itself + is left in the directory "gnulib-cvs". The "gnulib" directory + contains just the gnulib files that findutils needs during the build + process. + + If you want to build findutils with a different version of gnulib, + just edit import-gnulib.config to change the version and then re-run + import-gnulib.sh. When specifying the version, you can specify + either the date or a CVS tag. If making any kind of release, please + use a fully identifying version (rather than just, say, "HEAD"). + + The import-gnulib.sh script will also run Autoconf and Automake to + generate the "configure" script and "Makefile.in" files. Should you + need to do this manually, you can do it like this :- + + aclocal -I m4 -I gnulib/m4 && \ + autoheader && \ + autoconf && \ + automake --add-missing --copy + + +3. Run "configure" and "make" in the normal way. + + If you have GNU libintl installed, you can just run "configure". + Otherwise, run "configure --disable-nls". + diff --git a/README-alpha b/README-alpha new file mode 100644 index 0000000..8717c2b --- /dev/null +++ b/README-alpha @@ -0,0 +1,25 @@ +This is a test release of GNU findutils. + +The latest test release (if any) is available at +ftp://alpha.gnu.org/gnu/findutils + +The latest full release is available at +ftp://ftp.gnu.org/gnu/findutils. + + +Discussion of the findutils package and ways to improve it takes place +on the "bug-findutils" mailing list, which you can join by sending +mail to bug-findutils-request@gnu.org. An archive of patches to the +bug-findutils mailing list is available at +http://lists.gnu.org/archive/html/bug-findutils/. + +Bug reports, suggested patches and enhancement requests for findutils +should be logged at http://savannah.gnu.org/bugs/?group=findutils. + +Changes to the findutils code are sent to the findutils-patches +mailing list. To join, please send email to +findutils-patches@gnu.org. You are also welcome to send patches to +that list, but unless you are a list subscriber, you won't be able to +follow any resulting discussion. An archive of posts to the +findutils-patches mailing list is available at +http://lists.gnu.org/archive/html/findutils-patches/. diff --git a/THANKS b/THANKS new file mode 100644 index 0000000..ecba376 --- /dev/null +++ b/THANKS @@ -0,0 +1,56 @@ +Thanks to the following people for support, code, patches, etc: + +A Costa +Aaron S. Hawley +Andreas Metzler +Andreas Schwab +Bas van Gompel +Benno Schulenberg +Bob Proulx +Bruno Haible +Dan Jacobson +Dave Gilbert +Dean Gaudet +Dmitry V. Levin +Ed Avis +Eric Blake +Geoff Clare +Gerrit P. Haase +Greg Wooledge +James Woods +James Youngman +Jakub Bogusz +Jesus Bravo Alvarez +Jim Meyering +John David Anglin +John Levon +Jonathan R. Ferro +Joseph S. Myers +Karl Berry +Lionel CONS +Mark Kettenis +Martin Buchholz +Matt Mueller +Michael Haubenwallner +Nelson Beebe +Nigel Stepp +Nix +Paul Eggert +Paul Slootman +Peter Breitenlohner +Primoz Peterlin +Ralf Wildenhues +Solar Designer +Stephane Barizien +Steve Revilak +Supriya Kannery +Tavis Ormandy +Vin Shelton +Vincent Danjean + +Suggestion for locate's ignore-case code: +Matt Mueller +Stephane Barizien + +Suggestion for the -sparse predicate: +dean gaudet diff --git a/TODO b/TODO new file mode 100644 index 0000000..9dd5468 --- /dev/null +++ b/TODO @@ -0,0 +1,53 @@ +-*-outline-*- +* -fstype core dumps on sparc-sun-sunos4.1.3_U1 with gcc-2.95.2 +This is on foxtrot.rahul.net. dbx does not work on compiled find. +Perhaps gcc is installed incorrectly. "find / -fstype ufs" core dumps +quickly. cc works correctly. + +* Speed of locate without "-i" option needs to be increased. + +* Internationalization +** updatedb.sh should be internationalized + +* Eliminate unnecessary strcpy calls in xargs. + +* man pages for frcode, bigram, and code +Perhaps a better description in texi pages as well. + +* Add option for find to sort output in lexical order for use for updatedb +olarsac@airfrance.fr (Olivier) made the following suggestion: + +As I was running thru the code looking for the bug I wondered why the updatedb +has to use sort... +why not add an option to find that sorts the output in lexical order? +my point is: +- sort on a big list is costly (here we do locate on big big file system) +- find may (in theory) sort incrementally very easily by sorting only the current +directory entries before recursion + + +* large file problems +depcomp gets added by automake + +* investigate _LIBC when used with TOLOWER and TOUPPER +_LIBC is used to determine whether TOLOWER should check isupper first. +Is there something better to check? Alternatively, can tolower be +checked at run time to determine whether isupper should be called first. + +* BeOS problems with multibyte +Bruno Haible reported problems with BeOS. + +* Include example of use of updatedb in documentation. +Use something close to the Debian daily cron job. + +* Supply example for time range commands for find. + + --//-- +This is used by Emacs' spell checker ispell.el: + +LocalWords: strftime xargs updatedb sh strcpy +LocalWords: lib frcode bigram texi depcomp automake +LocalWords: LIBOBJS FUNC findutils +LocalWords: LIBC TOLOWER TOUPPER tolower isupper +LocalWords: Debian cron +LocalWords: Haible BeOS diff --git a/build-aux/.cvsignore b/build-aux/.cvsignore new file mode 100644 index 0000000..b13a7cd --- /dev/null +++ b/build-aux/.cvsignore @@ -0,0 +1,14 @@ +compile +config.guess +config.rpath +config.sub +depcomp +install-sh +mdate-sh +missing +texinfo.tex +link-warning.h +Makefile.in +Makefile +mkinstalldirs +ylwrap diff --git a/build-aux/.gitignore b/build-aux/.gitignore new file mode 100644 index 0000000..bd4e7a5 --- /dev/null +++ b/build-aux/.gitignore @@ -0,0 +1,13 @@ +config.guess +config.rpath +config.sub +depcomp +install-sh +mdate-sh +missing +texinfo.tex +link-warning.h +Makefile.in +mkinstalldirs +ylwrap + diff --git a/build-aux/Makefile.am b/build-aux/Makefile.am new file mode 100644 index 0000000..645370e --- /dev/null +++ b/build-aux/Makefile.am @@ -0,0 +1,2 @@ +EXTRA_DIST = check-testfiles.sh man-lint.sh + diff --git a/build-aux/check-testfiles.sh b/build-aux/check-testfiles.sh new file mode 100755 index 0000000..3882912 --- /dev/null +++ b/build-aux/check-testfiles.sh @@ -0,0 +1,62 @@ +#! /bin/sh +# check-testfiles.sh -- Check we distributed all the test files we need +# Copyright (C) 2007 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +rv=0 + + +makelist () { + ls "${1}"/*/testsuite/*/*"${2}" | sed -e 's/.*\///' | sort +} + +diagnose () { + makelist "${distdir}" "$1" > dist"${1}".txt && + makelist "${srcdir}" "$1" > src"${1}".txt && + diff src"${1}".txt dist"${1}".txt + rm -f src"${1}".txt dist"${1}".txt + echo +} + + +check_shipfiles () { + distcount=`ls ${distdir}/*/testsuite/*/*${suffix} | wc -l` + srccount=`ls ${srcdir}/*/testsuite/*/*${suffix} | wc -l` + if test $distcount -eq $srccount ; then + echo "All $srccount of the $suffix files are accounted for" + else + echo "ERROR: Missing $suffix files: source $srccount distributed $distcount" >&2 + rv=1 + diagnose "${suffix}" + fi +} + + +main () { + distdir="$1" + srcdir="$2" + shift 2 + if test "$#" -gt 0 ; then + for suffix ; do + check_shipfiles "$suffix" + done + exit $rv + else + echo "You did not specify any test file suffixes." >&2 + exit 1 + fi +} + +main "$@" diff --git a/build-aux/man-lint.sh b/build-aux/man-lint.sh new file mode 100755 index 0000000..813df1b --- /dev/null +++ b/build-aux/man-lint.sh @@ -0,0 +1,19 @@ +#! /bin/sh + +rv=0 +srcdir="$1" ; shift + +for manpage +do + what="lint check on manpage $manpage" + echo -n "$what: " + messages="$( troff -t -man ${srcdir}/${manpage} 2>&1 >/dev/null )" + if test -z "$messages" ; then + echo "passed" + else + echo "FAILED:" >&2 + echo "$messages" >&2 + rv=1 + fi +done +exit $rv diff --git a/build-aux/src-sniff.py b/build-aux/src-sniff.py new file mode 100644 index 0000000..09f02e8 --- /dev/null +++ b/build-aux/src-sniff.py @@ -0,0 +1,234 @@ +#! /usr/bin/env python + +# src-sniff.py: checks source code for patterns that look like common errors. +# Copyright (C) 2007 Free Software Foundation, Inc. +# +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import re +import sys + +C_ISH_FILENAME = "\.(c|cc|h|cpp|cxx|hxx)$" +C_ISH_FILENAME_RE = re.compile(C_ISH_FILENAME) +C_MODULE_FILENAME_RE = re.compile("\.(c|cc|cpp|cxx)$") +FIRST_INCLUDE = 'config.h' +problems = 0 + + +def Problem(**kwargs): + global problems + problems += 1 + msg = kwargs['message'] + if kwargs['line']: + location = "%(filename)s:%(line)d" % kwargs + else: + location = "%(filename)s" % kwargs + detail = msg % kwargs + print >>sys.stderr, "error: %s: %s" % (location, detail) + + +class RegexSniffer(object): + def __init__(self, source, message, regexflags=0): + super(RegexSniffer, self).__init__() + self._regex = re.compile(source, regexflags) + self._msg = message + def Sniff(self, text, filename, line): + #print >>sys.stderr, ("Matching %s against %s" + # % (text, self._regex.pattern)) + m = self._regex.search(text) + if m: + if line is None: + line = 1 + m.string.count('\n', 1, m.start(0)) + args = { + 'filename' : filename, + 'line' : line, + 'fulltext' : text, + 'matchtext': m.group(0), + 'message' : self._msg + } + Problem(**args) + + +class RegexChecker(object): + def __init__(self, regex, line_smells, file_smells): + super(RegexChecker, self).__init__(self) + self._regex = re.compile(regex) + self._line_sniffers = [RegexSniffer(s[0],s[1]) for s in line_smells] + self._file_sniffers = [RegexSniffer(s[0],s[1],re.S|re.M) for s in file_smells] + def Check(self, filename, lines, fulltext): + if self._regex.search(filename): + # We recognise this type of file. + for line_number, line_text in lines: + for sniffer in self._line_sniffers: + sniffer.Sniff(line_text, filename, line_number) + for sniffer in self._file_sniffers: + sniffer.Sniff(fulltext, filename, None) + else: + # We don't know how to check this file. Skip it. + pass + + +checkers = [ + # Check C-like languages for C code smells. + RegexChecker(C_ISH_FILENAME_RE, + # line smells + [ + [r'(?(?!.*assert \()', + "If you include , use assert()."], + [r'# *include "quotearg.h"(?!.*(?> sys.stderr, "warning: %s: %s" % (filename, desc) + + +def BuildIncludeList(text): + """Build a list of included files, with line numbers. + Args: + text: the full text of the source file + Returns: + [ ('config.h',32), ('assert.h',33), ... ] + """ + include_re = re.compile(r'# *include +[<"](.*)[>"]') + includes = [] + last_include_pos = 1 + line = 1 + for m in include_re.finditer(text): + header = m.group(1) + # Count only the number of lines between the last include and + # this one. Counting them from the beginning would be quadratic. + line += m.string.count('\n', last_include_pos, m.start(0)) + last_include_pos = m.end() + includes.append( (header,line) ) + return includes + + +def CheckStatHeader(filename, lines, fulltext): + stat_hdr_re = re.compile(r'# *include .*') + # It's OK to have a pointer though. + stat_use_re = re.compile(r'struct stat\W *[^*]') + for line in lines: + m = stat_use_re.search(line[1]) + if m: + msg = "If you use struct stat, you must #include first" + Problem(filename = filename, line = line[0], message = msg) + # Diagnose only once + break + m = stat_hdr_re.search(line[1]) + if m: + break + +def CheckFirstInclude(filename, lines, fulltext): + includes = BuildIncludeList(fulltext) + #print "Include map:" + #for name, line in includes: + # print "%s:%d: %s" % (filename, line, name) + if includes: + actual_first_include = includes[0][0] + else: + actual_first_include = None + if actual_first_include and actual_first_include != FIRST_INCLUDE: + if FIRST_INCLUDE in [inc[0] for inc in includes]: + msg = ("%(actual_first_include)s is the first included file, " + "but %(required_first_include)s should be included first") + Problem(filename=filename, line=includes[0][1], message=msg, + actual_first_include=actual_first_include, + required_first_include = FIRST_INCLUDE) + if FIRST_INCLUDE not in [inc[0] for inc in includes]: + Warning(filename, + "%s should be included by most files" % FIRST_INCLUDE) + + +def SniffSourceFile(filename, lines, fulltext): + if C_MODULE_FILENAME_RE.search(filename): + CheckFirstInclude(filename, lines, fulltext) + CheckStatHeader (filename, lines, fulltext) + for checker in checkers: + checker.Check(filename, lines, fulltext) + + +def main(args): + "main program" + for srcfile in args[1:]: + f = open(srcfile) + line_number = 1 + lines = [] + for line in f.readlines(): + lines.append( (line_number, line) ) + line_number += 1 + fulltext = ''.join([line[1] for line in lines]) + SniffSourceFile(srcfile, lines, fulltext) + f.close() + if problems: + return 1 + else: + return 0 + + +if __name__ == "__main__": + sys.exit(main(sys.argv)) diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..4aef56a --- /dev/null +++ b/configure.ac @@ -0,0 +1,260 @@ +dnl Process this file with autoconf to produce a configure script. +AC_INIT([GNU findutils], 4.3.11-CVS, [bug-findutils@gnu.org]) +AC_CONFIG_AUX_DIR(build-aux) +AM_INIT_AUTOMAKE + +AC_CONFIG_SRCDIR([find/pred.c]) +AC_CONFIG_HEADERS([config.h]) +AC_CANONICAL_HOST +AC_CONFIG_MACRO_DIR(gnulib/m4) + +dnl Set of available languages. +ALL_LINGUAS="be bg ca da de el eo es et fi fr ga gl hr hu id it ja ko lg ms nl pl pt pt_BR ro ru rw sk sl sr sv tr uk vi zh_CN zh_TW" + +AC_SUBST(INCLUDES)dnl +AC_SUBST(AUXDIR,$ac_aux_dir) +dnl check for --with-fts +FIND_WITH_FTS + +AC_ARG_ENABLE(id-cache, +[ --enable-id-cache cache all UIDs & GIDs; avoid if using NIS or Hesiod], + AC_DEFINE(CACHE_IDS, 1, [Define if you want find -nouser and -nogroup to make tables of + used UIDs and GIDs at startup instead of using getpwuid or + getgrgid when needed. Speeds up -nouser and -nogroup unless you + are running NIS or Hesiod, which make password and group calls + very expensive.])) + +AC_ARG_ENABLE(debug, + AS_HELP_STRING(--enable-debug,Enable debugging output which is likely to be interesting to people debugging findutils), + [ac_cv_debug=$enableval],[ac_cv_debug=no]) + +AC_ARG_ENABLE(leaf-optimisation, + AS_HELP_STRING(--enable-leaf-optimisation,Enable an optimisation which saves lstat calls to identify subdirectories on filesystems having traditional Unix semantics), + [ac_cv_leaf_optimisation=$enableval],[ac_cv_leaf_optimisation=yes]) + +AC_ARG_ENABLE(d_type-optimization, + AS_HELP_STRING(--enable-d_type-optimization,Make use of the file type data returned in struct dirent.d_type by readdir()), + [ac_cv_d_type=$enableval],[ac_cv_d_type=yes]) + +dnl This one has no default, because otherwise we would have to say +dnl both --enable-d_type-optimisation=no and --enable-d_type-optimization=no +dnl to turn it off. +AC_ARG_ENABLE(d_type-optimisation, + AS_HELP_STRING(--enable-d_type-optimisation,Synonym for --enable-d_type-optimization), + [ac_cv_d_type=$enableval],[]) + + +AC_MSG_CHECKING([whether debug output should be produced]) +if test x$ac_cv_debug = xno; then + AC_MSG_RESULT([no]) +else + AC_MSG_RESULT([yes]) + AC_DEFINE(DEBUG, 1, [Define if you want to see find's innards]) + AC_DEFINE(DEBUG_STAT, 1, [Define if you want to see a message every time find calls the stat() system call]) +fi + +AC_MSG_CHECKING([for leaf optimisation]) +if test x$ac_cv_leaf_optimisation = xno; then + AC_MSG_RESULT([no]) +else + AC_MSG_RESULT([yes]) + AC_DEFINE(LEAF_OPTIMISATION, 1, [Define if you want to use the leaf optimisation (this can still be turned off with -noleaf)]) +fi + +AC_ARG_VAR([DEFAULT_ARG_SIZE], [Default size of arguments to child processes +of find and xargs, 128k if unspecified]) +if test -n "$DEFAULT_ARG_SIZE"; then + AC_DEFINE_UNQUOTED([DEFAULT_ARG_SIZE], [$DEFAULT_ARG_SIZE], + [If defined, the default argument size used in child processes]) +fi + + + +dnl Checks for programs. +AC_PROG_CC +AC_PROG_CPP + +AC_AIX + + +dnl AC_MINIX +dnl for gnulib +gl_EARLY +dnl gl_EARLY calls AC_GNU_SOURCE anyway. + + +AC_ISC_POSIX +AM_C_PROTOTYPES + +AC_PROG_INSTALL +AC_PROG_RANLIB +dnl AC_PROG_LIBTOOL +AC_PROG_MAKE_SET +AC_SYS_LARGEFILE + + +gl_INIT + + + +dnl Older versions of gnulib/m4/nls.m4 provide AM_MKINSTALLDIRS. +dnl The current version of gnulib does not, but the version of +dnl po/Makefile.in.in that comes with gettext-0.14.6 expects +dnl that @MKINSTALLDIRS@ will be expanded. +AM_MKINSTALLDIRS + +dnl lib/regexprops needs to be a native program, because we need to +dnl run it in order to generate the documentation about the properties +dnl of regular expressions. See lib/Makefile.am. +AM_CONDITIONAL(CROSS_COMPILING, [[test "x$cross_compiling" = xyes]]) + +dnl Try to get a POSIX.1 environment. + +dnl Checks for libraries. If getpwnam() isn't present in the +dnl C library, try -lsun. +AC_CHECK_FUNC(getpwnam, [], +[AC_CHECK_LIB(sun, getpwnam)]) + +AC_CHECK_LIB([m],[modf],[FINDLIBS="-lm $FINDLIBS"] + AC_DEFINE_UNQUOTED(HAVE_MODF_IN_LIBM,1,[modf is defined in -lm])) +AC_CHECK_LIB([m],[fabs],[FINDLIBS="-lm $FINDLIBS"] + AC_DEFINE_UNQUOTED(HAVE_FABS_IN_LIBM,1,[fabs is defined in -lm])) +AC_SUBST([FINDLIBS]) + +dnl Checks for header files. +AC_HEADER_STDC +dnl Assume unistd.h is present - coreutils does too. +AC_CHECK_HEADERS(fcntl.h string.h limits.h errno.h stdlib.h stddef.h) +AC_CHECK_HEADERS(unistd.h sys/types.h inttypes.h fcntl.h locale.h stdint.h) +AC_CHECK_HEADERS(sys/param.h mntent.h sys/mnttab.h sys/mntio.h sys/mkdev.h) +dnl find.c needs sys/utsname.h because it calls uname(2). +AC_CHECK_HEADERS(sys/utsname.h) +AC_HEADER_MAJOR +AC_HEADER_DIRENT +AC_HEADER_STAT +AC_HEADER_SYS_WAIT + + +dnl Checks for typedefs, structures, and compiler characteristics. + +AC_TYPE_UID_T +AC_TYPE_SIZE_T +AC_CHECK_TYPE(ssize_t, int) +AC_TYPE_PID_T +AC_CHECK_TYPE(ino_t, unsigned long) +AC_CHECK_TYPE(dev_t, unsigned long) +AC_TYPE_MODE_T +AC_STRUCT_ST_BLOCKS +AC_CHECK_MEMBERS([struct stat.st_rdev]) + +AC_MSG_CHECKING([whether we should use struct dirent.d_type, if available]) +if test x$ac_cv_d_type = xno; then + AC_MSG_RESULT([no]) +else + AC_MSG_RESULT([yes]) + AC_DEFINE(USE_STRUCT_DIRENT_D_TYPE, 1, + [Defined if you specify --enable-d_type-optimisation to configure.]) + AC_CHECK_MEMBERS([struct dirent.d_type],[ + AC_DEFINE(HAVE_STRUCT_DIRENT_D_TYPE, 1, + [Define to 1 if your 'struct dirent' has a d_type member])], + [],[ +#include +#include ]) +fi + + +AC_STRUCT_TM +AC_STRUCT_TIMEZONE + +dnl Checks for library functions that are provided by gnulib. +AC_FUNC_STRFTIME +AC_REPLACE_FUNCS(memcmp memset stpcpy strdup strstr strtol strtoul) +AC_CHECK_FUNCS(fchdir getcwd strerror endgrent endpwent setlocale) +AC_FUNC_VPRINTF +AC_FUNC_ALLOCA +AC_FUNC_CLOSEDIR_VOID + +dnl We don't just use AC_FUNC_GETMNTENT directly because it +dnl will try to use -lsun on platforms which have getmntent() in the +dnl C library, for example UNICOS. +AC_CHECK_FUNC(getmntent, [], [AC_FUNC_GETMNTENT]) +AC_CHECK_FUNCS(getmntent) +AC_CHECK_FUNCS(setmntent endmntent) + + +dnl Checks for library functions that are provided by findlib. +FINDLIB_REPLACE_FUNCS(waitpid strspn) +FINDLIB_REPLACE_FUNCS(forcefindlib) + + +# Check for common but not-POSIX functions. +AC_CHECK_FUNCS(setgroups) + + +dnl gl_XALLOC +gl_FUNC_ALLOCA + +dnl Use gl_INCLUDED_REGEX so that findutils will build on systems like +dnl Solaris, which lacks those functions in libc (see GNU Savannah bug +dnl #11710) (Sun Sep 4 20:15:11 2005: gl_INCLUDED_REGEX no longer seems +dnl to be available in gnulib CVS) +gl_REGEX + +AC_PREREQ(2.59) + +# Define intmax_t to 'signed long' or 'signed long long' +# if it is not already defined in or . +dnl Derived from gnulib's uintmax_t which was from Paul Eggert. +AC_DEFUN([jy_AC_TYPE_INTMAX_T], +[ + if test $ac_cv_header_inttypes_h = no && test $ac_cv_header_stdint_h = no; then + AC_REQUIRE([gl_AC_TYPE_LONG_LONG]) + test $ac_cv_type_long_long = yes \ + && ac_type='long long' \ + || ac_type='long' + AC_DEFINE_UNQUOTED(intmax_t, $ac_type, + [Define to signed long or signed long long + if and don't define.]) + else + AC_DEFINE(HAVE_INTMAX_T, 1, + [Define if you have the 'intmax_t' type in or .]) + fi +]) + +jy_AC_TYPE_INTMAX_T +jy_SORTZ + + +AC_CHECK_MEMBER(struct dirent.d_type,,,[ +#include +#include ]) + +jy_AC_ATTRIBUTE_NORETURN + +dnl internationalization macros +AM_GNU_GETTEXT([external]) +AM_GNU_GETTEXT_VERSION(0.14.5) + +dnl regextype.c and regexprops.c are designed to be usable outside findutils, +dnl but findutils doesn't want to support all the regex types in gnulib, +dnl and wants to support an additional one (RE_SYNTAX_EMACS|RE_DOT_NEWLINE). +dnl Hence they need to know if they are being compiled into findutils or not. +AC_DEFINE([FINDUTILS], 1, [Define if we are compiling GNU findutils]) +AC_DEFINE([ALREADY_INCLUDED_CONFIG_H], 1, [Define so that source code can verify that config.h was already included]) + +# This is necessary so that .o files in LIBOBJS are also built via +# the ANSI2KNR-filtering rules. +#LIBOBJS=`echo $LIBOBJS|sed 's/\.o /\$U.o /g;s/\.o$/\$U.o/'` +##AC_CONFIG_SUBDIRS(gnulib) +AC_CONFIG_FILES(gnulib/Makefile gnulib/lib/Makefile) +AC_CONFIG_FILES(m4/Makefile) +AC_CONFIG_FILES([Makefile + tests/Makefile build-aux/Makefile + find/Makefile find/testsuite/Makefile + xargs/Makefile xargs/testsuite/Makefile + locate/Makefile locate/testsuite/Makefile + po/Makefile.in po/Makefile + doc/Makefile lib/Makefile + ]) +AC_OUTPUT +dnl intl/Makefile diff --git a/debian.rules b/debian.rules new file mode 100755 index 0000000..7ff16c8 --- /dev/null +++ b/debian.rules @@ -0,0 +1,142 @@ +#! /usr/bin/make -f +# +# Last updated: 1996/05/27 08:10:50 by Kevin Dalley +# +# To make the binary distribution package, the ``Debianized'' source package +# and the context diff to the original package, type `./debian.rules dist'. +# Make sure that `debian.rules' is executable before the final distribution +# is made. +# +# Invoke each target with `./debian.rules '. All targets should be +# invoked with the package root as the current directory. +# +# The `binary' target must be run as root, as it needs to install files with +# specific ownerships. The `diff' target assumes that you have the original +# source package available, unpacked, in ../$(package)-$(version).orig, or that you have +# the previous revision of the ``Debianized'' source package and context diff +# in the parent directory. + +CC = gcc +CFLAGS = -O2 +LDFLAGS = -s + +# The name of the package (for example, `emacs'). +package = findutils +# The version of the package (for example, `19.28'). +version = 4.1 +# The Debian revision of the package (for example, `2'). +debian = 12 + +build: +# Builds the binary package. + ./configure --prefix=/usr + make CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \ + libexecdir=/usr/lib/locate localstatedir=/var/lib/locate + ( cd doc ; makeinfo find.texi ) + touch stamp-build + +clean: +# Undoes the effect of `make -f debian.rules build'. + make distclean + rm -f stamp-build + rm -rf debian-tmp + +binary: +# Makes a binary package. + test -f stamp-build || make -f debian.rules build + install -d -g root -m 755 -o root debian-tmp + chmod g-s debian-tmp + install -d -g root -m 755 -o root debian-tmp/DEBIAN + install -d -g root -m 755 -o root debian-tmp/etc/cron.daily + install -g root -m 755 -o root cron.find \ + debian-tmp/etc/cron.daily/find + install -d -g root -m 755 -o root debian-tmp/usr/bin + install -g root -m 755 -o root find/find \ + debian-tmp/usr/bin/find + install -g root -m 755 -o root locate/locate \ + debian-tmp/usr/bin/locate + install -g root -m 755 -o root locate/updatedb \ + debian-tmp/usr/bin/updatedb + install -g root -m 755 -o root xargs/xargs \ + debian-tmp/usr/bin/xargs + install -d -g root -m 755 -o root debian-tmp/usr/info + install -g root -m 644 -o root doc/find.info* \ + debian-tmp/usr/info + install -d -g root -m 755 -o root debian-tmp/usr/lib/locate + install -g root -m 755 -o root locate/bigram locate/code \ + locate/frcode debian-tmp/usr/lib/locate + install -d -g root -m 755 -o root debian-tmp/usr/man/man1 + install -g root -m 644 -o root find/find.1 \ + debian-tmp/usr/man/man1/find.1 + install -g root -m 644 -o root locate/locate.1 \ + debian-tmp/usr/man/man1/locate.1 + install -g root -m 644 -o root locate/updatedb.1 \ + debian-tmp/usr/man/man1/updatedb.1 + install -g root -m 644 -o root xargs/xargs.1 \ + debian-tmp/usr/man/man1/xargs.1 + install -d -g root -m 755 -o root debian-tmp/usr/man/man5 + install -d -g root -m 755 -o root debian-tmp/usr/lib/locate + install -d -g root -m 755 -o root debian-tmp/var/lib + install -d -g nogroup -m 2755 -o nobody debian-tmp/var/lib/locate + install -g root -m 644 -o root locate/locatedb.5 \ + debian-tmp/usr/man/man5/locatedb.5 + install -d -g root -m 755 -o root debian-tmp/usr/doc/copyright + install -g root -m 644 -o root debian.README \ + debian-tmp/usr/doc/copyright/$(package) + rm -f debian-tmp/usr/info/find.info*.gz + gzip -9f debian-tmp/usr/info/find.info* + sed -e '1s/=/$(package)/; \ + 2s/=/$(version)-$(debian)/; \ + 3s/=/$(shell dpkg --print-architecture)/;' \ + debian.control > debian-tmp/DEBIAN/control + chmod 644 debian-tmp/DEBIAN/control + install -g root -m 644 -o root debian.conffiles \ + debian-tmp/DEBIAN/conffiles + install -g root -m 755 -o root debian.postinst \ + debian-tmp/DEBIAN/postinst + install -g root -m 755 -o root debian.postrm \ + debian-tmp/DEBIAN/postrm + install -g root -m 755 -o root debian.preinst \ + debian-tmp/DEBIAN/preinst + dpkg --build debian-tmp + mv debian-tmp.deb \ + ../$(package)-$(version)-$(debian).$(shell dpkg --print-architecture).deb + +source: clean +# Makes a source package. + ( cd .. && tar cf - $(package)-$(version) | \ + gzip -9f > $(package)-$(version)-$(debian).tar.gz ) + +diff: clean +# Makes a context diff. + -test -d ../$(package)-$(version).orig -o \ + -f ../$(package)-$(version)-`expr $(debian) - 1`.diff.gz \ + || ( echo "Original source package is not available." ; false ) + -test -d ../$(package)-$(version).orig || make -f debian.rules orig + #cp -a ../$(package)-$(version).orig/doc/find.info* doc + cd .. && \ + (diff -ruN $(package)-$(version).orig $(package)-$(version) \ + >$(package)-$(version)-$(debian).diff; [ $$? = 1 ]) && \ + gzip -9vf $(package)-$(version)-$(debian).diff + -test -f stamp-orig \ + && rm -rf ../$(package)-$(version).orig && rm -f stamp-orig + +dist: binary source diff +# Prepares the package for distribution. + +orig: +# Prepares the original package from the previous +# Debian revision source package and context diff. + ( cd .. \ + && mkdir $(package).orig \ + && cd $(package).orig \ + && tar xzf ../$(package)-$(version)-`expr $(debian) - 1`.tar.gz \ + && cd $(package)-$(version) \ + && ( zcat ../../$(package)-$(version)-`expr $(debian) - 1`.diff.gz \ + | patch -sER -p1 ) \ + && find . -name "*.orig" -exec rm -f {} \; \ + && cd .. \ + && mv $(package)-$(version) ../$(package)-$(version).orig \ + && cd .. \ + && rmdir $(package).orig ) + touch stamp-orig diff --git a/debian/.cvsignore b/debian/.cvsignore new file mode 100644 index 0000000..8aa3453 --- /dev/null +++ b/debian/.cvsignore @@ -0,0 +1,2 @@ +files +tmp diff --git a/debian/.gitignore b/debian/.gitignore new file mode 100644 index 0000000..8aa3453 --- /dev/null +++ b/debian/.gitignore @@ -0,0 +1,2 @@ +files +tmp diff --git a/debian/README.debian b/debian/README.debian new file mode 100644 index 0000000..520cab2 --- /dev/null +++ b/debian/README.debian @@ -0,0 +1,21 @@ +Some people wish to have updatedb only include mount points which are +automatically mounted by "mount -a", which mounts devices listed in +/etc/fstab. + +The following lines may be added to /etc/updatedb.conf to exclude +non-automatic mount points from updatedb. Add before the +"export PRUNEPATHS" line in /etc/updatedb.conf. + +# mount points not to be scanned (regexp matching lines into /etc/fstab) +EXCLUDE_MOINT_POINTS=noauto +EXCLUDE_PATH=`awk "/^#/ {next}; /$EXCLUDE_MOINT_POINTS/ {print \\$2}" < /etc/fstab | tr '\012' ' '` +PRUNEPATHS="$PRUNEPATHS $EXCLUDE_PATH" + +This suggestion is due to Eric Delaunay + + + +> The problem is NOT +> updatedb, rather it's actually caused by the "checksecurity" call in +> /etc/cron.daily/standard. The easy fix for this is to mount your NFS +> stuff nosuid and nodev so it ignores them. diff --git a/debian/TODO b/debian/TODO new file mode 100644 index 0000000..e69de29 diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..5515e3c --- /dev/null +++ b/debian/changelog @@ -0,0 +1,341 @@ +findutils (4.1.7-2) unstable; urgency=low + + * changed libc dependencies to remove libc6-dev build-depends (closes: + #99216). + + -- Kevin Dalley Fri, 1 Jun 2001 20:33:32 -0700 + +findutils (4.1.7-1) unstable; urgency=low + + * add ftpfs to PRUNEFS (closes: #90016). + * implicit -print now works again (closes: #79218). + * change debian/rules to support DEB_BUILD_OPTIONS. Do not install + INSTALL. + * fixed security problems in find (closes: #95185). + * upgraded to recent config.guess and config.sub (closes: #98035). + * updated to newest upstream release. + + -- Kevin Dalley Sun, 20 May 2001 17:32:29 -0700 + +findutils (4.1.6-2) unstable; urgency=low + + * Adds Build-Depends texinfo (closes: #76145) + + -- Kevin Dalley Sat, 4 Nov 2000 10:20:22 -0800 + +findutils (4.1.6-1) unstable; urgency=low + + * find/find.c (process_path): fix problem with "-depth" which is tested + in depth.exp test. (closes: 69782). + + * new alpha release. locate --ignore-case is done. + + + * some patches for ignoring case have been added. (closes: #19563). + + * fixed problems with brace expansion in debian/rules (closes: #71827) + + * doc/find.texi (Invoking xargs): changed @var{-s} to @samp{-s} (closes: + #69529). + + * Update to a new alpha release. + + * update to new alpha release. + + * testing out 4.1.3, with internationalization. + + * added devpts to PRUNEFS in updatedb.conf (closes: #65503). + + * fixes bug described as follows: When 'find' looks for a fstype, it + parses the /etc/mtab until it finds the good line. But, if there is, + before the good line, a line whose mountpoint is unreachable, it + fails. (closes: #40245). + + * fixed problem with strange behavior with "-name" and "-iname" (closes: + #63270). + + -- Kevin Dalley Mon, 30 Oct 2000 23:48:26 -0800 + +findutils (4.1-38) frozen unstable; urgency=low + + * debian/updatedb.conf: removed second occurrence of smbfs, added + coda (closes: #56612, #28453). + * fixed problem with xargs sysconf(_SC_ARG_MAX) returning -1 (closes: + #31325). + + -- Kevin Dalley Thu, 24 Feb 2000 15:25:57 +0000 + +findutils (4.1-37) frozen unstable; urgency=low + + * reverted to maintainer release, fixed last NMU bugs (closes: #55417, + #55551). + + -- Kevin Dalley Thu, 20 Jan 2000 09:52:59 -0800 + +findutils (4.1-36) unstable; urgency=low + + * add ncpfs and smbfs to PRUNEFS (closes: #28453). + * update Standards-Version to 3.1.1.0 + * corrected copyright reference + * updated dpkg-gencontrol options to provide section and priority + * 4.1-35 was not accepted, for undetermined reasons, uploaded 4.1-36, + with additional changes + + -- Kevin Dalley Sun, 16 Jan 2000 13:58:54 -0800 + +findutils (4.1-34) unstable; urgency=low + + * removed cron.updatedb (fixes bug #31300). + * added const to declaration of basename, which should satisfy Linux as + well as Hurd (fixes bug #31325). + * added /var/spool to PRUNEPATHS in updatedb.conf so that /var/spool is + not scanned by updatedb (fixes bug #31301). + + -- Kevin Dalley Sat, 30 Jan 1999 16:51:34 -0800 + +findutils (4.1-33) frozen unstable; urgency=low + + * re to remove predependency problem with a specific version libc6. + + -- Kevin Dalley Thu, 17 Dec 1998 08:11:15 -0800 + +findutils (4.1-32) frozen unstable; urgency=low + + * added documentation for the environment variables PRUNEPATHS, PRUNEFS, + and NETPATHS for updatedb in find.texi and updatedb.1. Added + documentation for --prunefs in updatedb. (fixes bug #29755). + * link ChangeLog.gz to changelog.gz, to follow policy manual. + + -- Kevin Dalley Fri, 4 Dec 1998 23:17:57 -0800 + +findutils (4.1-31) unstable; urgency=low + + * fix getstr so that it correctly handles long file paths + + -- Kevin Dalley Sat, 26 Sep 1998 16:07:03 -0700 + +findutils (4.1-30) unstable; urgency=low + + * reduced PATH in update.sh to increase security (fixes bug #21704) + * removed more function declarations to meet GNU coding standards + * removed "-s /bin/sh" from updatedb change quoting around PRUNEFS + (fixes bug #20812, again, and #26857) + + -- Kevin Dalley Sun, 20 Sep 1998 19:06:19 -0700 + +findutils (4.1-29) unstable; urgency=low + + * removed declaration of strdup and free from lib/nextelem.c, which + meets GNU coding standards and allow compilation on sparc (and fixes + bug #20840) + * corrected explanation of -amin option which described hours instead of + minutes (fixes bug #22995) + * check status of tempfile commands and exit upon failure (fixes bug + #22350) + * added iso9660 to PRUNEFS so that CDs will not be automatically scanned + by updatedb (fixes bug #24548) + * added "-s /bin/sh" to all instances of command su, which allows + updatedb to be easily used by users which have a different shell. + (fixes bug #20812) + + -- Kevin Dalley Sun, 30 Aug 1998 01:40:04 -0700 + +findutils (4.1-28) frozen unstable; urgency=low + + * use tempfile for extra safety (fixes bug #19791) + + -- Kevin Dalley Thu, 19 Mar 1998 00:37:28 -0800 + +findutils (4.1-27) unstable; urgency=low + + * add --existing option to locate, which only prints the names of files + which still exist (fixes: bug #14037) + * upgrade standards version + + -- Kevin Dalley Fri, 27 Feb 1998 01:43:36 -0800 + +findutils (4.1-26) unstable; urgency=low + + * added auto fs to PRUNEFS variable in updatedb.conf to prune + automounted file systems (fixes: bug #13662) + * corrected get_short so that it correctly returns negative + numbers. (fixes: bug #17774) + * remove declarations of various string functions which allows + compilation under sparc. Removing the declarations almost + matches the GNU Coding Standards.(fixes: bug #16948) + + -- Kevin Dalley Sun, 8 Feb 1998 22:43:13 -0800 + +findutils (4.1-25) unstable; urgency=low + + * change auto to autofs in PRUNEFS variable in updatedb.conf + + -- Kevin Dalley Tue, 30 Sep 1997 09:13:27 -0700 + +findutils (4.1-24) unstable; urgency=low + + * added auto to PRUNEFS, so that automounted fs are automatically pruned + + -- Kevin Dalley Sat, 27 Sep 1997 01:14:52 -0700 + +findutils (4.1-23) unstable; urgency=low + + * This release is built with libc6 release + * add "#define _GNU_SOURCE" to pred.c + * zip man pages, which fixes bug #10272: findutils manpages are not + compressed. + + -- Kevin Dalley Sun, 6 Jul 1997 14:12:56 -0700 + +findutils (4.1-22) frozen unstable; urgency=low + + * add smbfs to PRUNEFS in updatedb.conf, which is bug #8668, findutils: + Updatedb should not scan smbfs mounts + + -- Kevin Dalley Sun, 27 Apr 1997 00:20:23 -0700 + +findutils (4.1-21) frozen unstable; urgency=low + + * fixed preinst to handle install, which fixes bug #8351 + + -- Kevin Dalley Wed, 2 Apr 1997 22:21:59 -0800 + +findutils (4.1-20) unstable; urgency=low + + * really fixed xargs to prevent occasional core dumping, which fixes bug + #7287. findutils-4.1-19 skipped including this patch + + -- Kevin Dalley Mon, 3 Mar 1997 22:50:28 -0800 + +findutils (4.1-19) unstable; urgency=low + + * /etc/updatedb.conf execution mode is removed, which fixes bug #7569 + * xargs fixed to prevent occasional core dumping, which fixes bug #7287 + * added comment in README.debian describing updatedb on automatically + mounted file systems only, which closes bug #7023 + + -- Kevin Dalley Sun, 2 Mar 1997 11:51:30 -0800 + +findutils (4.1-18) unstable; urgency=low + + * added extra '\' so that localuser, prunefs, and prunepaths can work + together, which fixes bug #6640 + + -- Kevin Dalley Thu, 23 Jan 1997 02:00:11 -0800 + +findutils (4.1-17) unstable; urgency=low + + * corrected permission on /var/lib/locate again in postinst. + + -- Kevin Dalley Sun, 12 Jan 1997 15:24:17 -0800 + +findutils (4.1-16) unstable; urgency=low + + * add --localuser option to updatedb, which allows find to be run as + nobody, while allowing database file to be created as root, change + suggested by + * install /var/lib/locate as root:root + * doc/find.texi, locate/updatedb.sh: add --localuser documention. + * debian/postinst: change /var/lib/locate directory to be owned by root + * debian/cron.find: use --localuser option so to updatedb is run as + root, but find is run as nobody + * correct warning message in preinst, fixes bug #6498: findutils.preinst + mentions /etc/find.conf instead of /etc/updatedb.conf + + -- Kevin Dalley Sat, 11 Jan 1997 19:16:39 -0800 + +findutils (4.1-15) unstable; urgency=low + + * added PRUNEFS as variable in updatedb and --prunefs as option to + updatedb (solves bug #1239, which is RFE) + * rename cron.find to cron.updatedb (and cron.daily/find to + cron.daily/updatedb) + * find.texi, find.info*: changed certain defaults back to the way they + were in the original release, added prunefs option + * findutils/locate/updatedb.sh: added prunefs option + * debian/rules: added find.conf and changed method of installation of files + * debian/preinst: add information about changed find.conf when upgrading + * debian/find.conf: updatedb configuration file + * debian/find.conf: use find.conf + * debian/conffiles: added find.conf as configuration file + * renamed find.conf to updatedb.conf + + -- Kevin Dalley Sat, 28 Dec 1996 14:21:07 -0800 + +findutils (4.1-14) stable unstable; urgency=low + + * install conffiles so that find is a conffile (this was last during the + standards-version update + + -- Kevin Dalley Sat, 21 Dec 1996 12:54:46 -0800 + +findutils (4.1-13) stable unstable; urgency=HIGH + + * fixes bug which prevents locate from running in previous + installations, which is /var/lib/locate directory being owned by + root. + + * remove recursive chown and chmod from debian/rules. set + /var/lib/locate to nobody:nogroup in postinst, just in case it was set + previously by another installation. + + -- Kevin Dalley Tue, 17 Dec 1996 23:34:44 -0800 + +findutils (4.1-12) unstable; urgency=low + + * changed debian/control to satisfy standards and fix bug #3566, + summary incorrect + * moved files debian.* to debian/* + * converted to Standards-Version: 2.1.1.0 + + -- Kevin Dalley Wed, 23 Oct 1996 21:06:15 -0700 + +Mon May 27 01:07:52 1996 Kevin Dalley + + * updatedb.sh: when NETPATHS is used, only su to NETUSER if whoami + is root + + * debian.rules: now creates *.architecture.deb + upgraded to Debian release 11 + stopped rm of find.info* + +Sat Apr 27 12:29:06 1996 Kevin Dalley + + * find.info, find.info-1, find.info-2: updated to match find.texi + + * debian.rules (debian): update debian revision to 10 + + * getline.c (getstr): verify that nchars_avail is *really* greater + than 0; set *n to a large enough number, stops some core dumping + +Mon Apr 15 05:06:15 1996 Kevin Dalley + + * debian.rules: change to findutils-4.1-9 + + * configure: restore configure from autoconf version 2.1, which + was modified in findutils-4.1-7 + +Sun Apr 14 00:09:13 1996 Kevin Dalley + +* debian.control, debian.rules: + added architecture field, updated debian.rules, bumped version + +* find.texi, updatedb.sh: + added /amd, /net, /alex to list of files to be ignored + +Sun Feb 25 13:23:21 1996 Kevin Dalley + +* debian.rules: finish variable changing of v, d, and p + +* updatedb.sh: ignore file type proc, remove proc from PRUNEPATHS + (this should *really* be changed in upstream package) + +* debian.rules: changed variables v and d to complete words version and debian + +* debian.control: deleted PACKAGE_REVISION field, modified version field + +* cron.find: cd to / before running updatedb + +Local variables: +mode: debian-changelog +End: diff --git a/debian/conffiles b/debian/conffiles new file mode 100644 index 0000000..cf51b12 --- /dev/null +++ b/debian/conffiles @@ -0,0 +1,2 @@ +/etc/cron.daily/find +/etc/updatedb.conf diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..e2ff975 --- /dev/null +++ b/debian/control @@ -0,0 +1,15 @@ +Source: findutils +Section: base +Priority: required +Maintainer: Kevin Dalley +Standards-Version: 3.5.2.0 +Build-Depends: texinfo + +Package: findutils +Architecture: any +Essential: yes +Pre-Depends: ${shlibs:Pre-Depends} +Description: utilities for finding files--find, xargs, and locate + These utilities find files meeting specified criteria and perform + various actions on the files which are found. + diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..dcbcb7d --- /dev/null +++ b/debian/copyright @@ -0,0 +1,36 @@ +This is the Debian GNU/Linux prepackaged version of GNU find, xargs +and locate. GNU find was originally written by Eric Decker, with +enhancements by David MacKenzie, Jay Plett and Tim Wood. GNU xargs +was originally written by Mike Rendell, with enhancements by David +MacKenzie. GNU locate and its associated utilities were originally +written by James Woods, with enhancements by David MacKenzie. The +idea for `find -print0' and `xargs -0' came from Dan Bernstein. + +This package was put together by Ian Murdock , +from sources obtained from: + ftp.gnu.org:/pub/gnu/findutils-4.1.tar.gz + +Changes: + * added Debian GNU/Linux package maintenance system files + * added cron script to update `find.codes' database daily + * fixed locate, and removed declaration of various string functions + * add "--existing" option to locate to ignore files which no longer exist + +GNU findutils are Copyright (C) 1990, 1991, 1992, 1993, 1994, 1999, +2000 Free Software Foundation, Inc. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. diff --git a/debian/cron.find b/debian/cron.find new file mode 100644 index 0000000..ac864a3 --- /dev/null +++ b/debian/cron.find @@ -0,0 +1,12 @@ +#! /bin/sh +# +# cron script to update the `find.codes' database. +# +# Written by Ian A. Murdock and +# Kevin Dalley + +if [ -f /etc/updatedb.conf ]; then + . /etc/updatedb.conf +fi + +cd / && updatedb --localuser=nobody 2>/dev/null diff --git a/debian/doc-base b/debian/doc-base new file mode 100644 index 0000000..e79d9a9 --- /dev/null +++ b/debian/doc-base @@ -0,0 +1,10 @@ +Document: findutils +Title: findutils +Abstract: utilities for finding files--find, xargs, and locate + These utilities find files meeting specified criteria and perform + various actions on the files which are found. +Section: Apps/Tools + +Format: info +Index: /usr/share/info/find.info.gz +Files: /usr/share/info/find.info* diff --git a/debian/postinst b/debian/postinst new file mode 100755 index 0000000..9abc64c --- /dev/null +++ b/debian/postinst @@ -0,0 +1,24 @@ +#! /bin/sh + +set -e + +if [ "$1" = "configure" ]; then + install-info --quiet --section "General commands" "General commands" \ + /usr/share/info/find.info.gz + if [ -d /usr/doc -a ! -e /usr/doc/findutils -a -d /usr/share/doc/findutils ]; then + ln -sf ../share/doc/findutils /usr/doc + fi + if command -v install-docs > /dev/null 2>&1; then + install-docs -i /usr/share/doc-base/findutils + fi +fi + +# In older releases, /var/lib/locate was owned by nobody +# findutils_4.1-12 installed /var/lib/locate as root:root +chown root:root /var/lib/locate +chmod 755 /var/lib/locate + +# In some releases, updatedb.conf was installed executable +if [ -x /etc/updatedb.conf ]; then + chmod 644 /etc/updatedb.conf +fi diff --git a/debian/preinst b/debian/preinst new file mode 100755 index 0000000..e2d7244 --- /dev/null +++ b/debian/preinst @@ -0,0 +1,30 @@ +#! /bin/sh + +set -e + +case "$1" in + install|upgrade) + dpkg --assert-support-predepends + if [ -n "$2" ]; then + version=$2 + if dpkg --compare-versions $version le-nl 4.1-15 ; then + echo /etc/cron.daily/find has a new format. + echo Consider using the new /etc/cron.daily/find + echo and modifing /etc/updatedb.conf + echo Old versions of /etc/cron.daily/find may not work + fi + fi + ;; + + abort-upgrade) + ;; + + *) + echo "preinst called with unknown argument \`$1'" >&2 + exit 0 + ;; +esac + + + + diff --git a/debian/prerm b/debian/prerm new file mode 100755 index 0000000..b74412f --- /dev/null +++ b/debian/prerm @@ -0,0 +1,14 @@ +#! /bin/sh + +set -e + +if [ \( "$1" = "upgrade" -o "$1" = "remove" \) -a -L /usr/doc/findutils ]; then + rm -f /usr/doc/findutils +fi + +if [ "$1" = "upgrade" -o "$1" = "remove" ]; then + install-info --quiet --remove find + if command -v install-docs > /dev/null 2>&1; then + install-docs -r findutils || true + fi +fi diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..7e2b239 --- /dev/null +++ b/debian/rules @@ -0,0 +1,106 @@ +#!/usr/bin/make -f +# Sample debian.rules file - for GNU Hello (1.3). +# Copyright 1994,1995 by Ian Jackson. +# I hereby give you perpetual unlimited permission to copy, +# modify and relicense this file, provided that you do not remove +# my name from the file itself. (I assert my moral right of +# paternity under the Copyright, Designs and Patents Act 1988.) +# This file may have to be extensively modified +# Copyright 1996 by Kevin Dalley +# + + +CC = gcc +CFLAGS = -O2 +INSTALL_TARGET=install +ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS))) +CFLAGS += -g +endif +ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) +INSTALL_TARGET = install-strip +endif + +package = findutils + +build: + $(checkdir) + ./configure --prefix=/usr --localstatedir=/var/lib/locate \ + --libexecdir='$${prefix}/lib/locate' \ + --mandir='$${prefix}/share/man' \ + --infodir='$${prefix}/share/info' + $(MAKE) \ + CC="$(CC)" CFLAGS="$(CFLAGS)" + cd doc ; makeinfo find.texi + touch build + +clean: + $(checkdir) + -rm -f build + -$(MAKE) -i distclean || $(MAKE) -f Makefile.in distclean + -rm -rf *~ debian/tmp debian/*~ debian/files* + +binary-indep: checkroot build + $(checkdir) +# There are no architecture-independent files to be uploaded +# generated by this package. If there were any they would be +# made here. + +binary-arch: checkroot build + $(checkdir) + -rm -rf debian/tmp + install -d debian/tmp debian/tmp/DEBIAN + install -d debian/tmp/usr/share/doc/$(package) + install -d debian/tmp/usr/bin + install -d debian/tmp/usr/lib + install -d debian/tmp/usr/lib/locate + install -d debian/tmp/etc + install -d debian/tmp/etc/cron.daily + install -d debian/tmp/var + install -d debian/tmp/var/lib + install -d debian/tmp/var/lib/locate + install debian/postinst debian/prerm debian/preinst debian/tmp/DEBIAN/. + install -m 0644 debian/conffiles debian/tmp/DEBIAN/. + install debian/cron.find debian/tmp/etc/cron.daily/find + install -m 0644 debian/updatedb.conf debian/tmp/etc/updatedb.conf + $(MAKE) DESTDIR=`pwd`/debian/tmp \ + CC="$(CC)" CFLAGS="$(CFLAGS)" \ + INSTALL_STRIP_PROGRAM="/usr/bin/install -s" \ + $(INSTALL_TARGET) + install -d debian/tmp/usr/share/doc-base + install -m 0644 debian/doc-base \ + debian/tmp/usr/share/doc-base/findutils + gzip -9v debian/tmp/usr/share/info/* + gzip -9v debian/tmp/usr/share/man/man[15]/* + install -m 0644 debian/copyright debian/tmp/usr/share/doc/$(package)/. + install -m 0644 debian/changelog \ + debian/tmp/usr/share/doc/$(package)/changelog.Debian + gzip -9v debian/tmp/usr/share/doc/$(package)/changelog.Debian + for file in ChangeLog NEWS README TODO; do \ + install -m 0644 $$file \ + debian/tmp/usr/share/doc/$(package);\ + gzip -9v debian/tmp/usr/share/doc/$(package)/$$file;\ + done + ln -s ChangeLog.gz debian/tmp/usr/share/doc/$(package)/changelog.gz + install -m 0644 debian/README.debian \ + debian/tmp/usr/share/doc/$(package) + dpkg-shlibdeps -dPre-Depends debian/tmp/usr/bin/find \ + debian/tmp/usr/bin/locate debian/tmp/usr/bin/xargs + dpkg-gencontrol -isp + dpkg --build debian/tmp .. + +define checkdir + test -f find/find.c -a -f debian/rules +endef + +# Below here is fairly generic really + +binary: binary-indep binary-arch + +source diff: + @echo >&2 'source and diff are obsolete - use dpkg-source -b'; false + +checkroot: + $(checkdir) + test 0 = "`id -u`" + +.PHONY: binary binary-arch binary-indep clean checkroot diff --git a/debian/substvars b/debian/substvars new file mode 100644 index 0000000..bcb62e5 --- /dev/null +++ b/debian/substvars @@ -0,0 +1 @@ +shlibs:Pre-Depends=libc6 (>= 2.2.3-1) diff --git a/debian/updatedb.conf b/debian/updatedb.conf new file mode 100644 index 0000000..de62832 --- /dev/null +++ b/debian/updatedb.conf @@ -0,0 +1,11 @@ +# This file sets environment variables which are used by updatedb + +# filesystems which are pruned from updatedb database +PRUNEFS="NFS nfs afs proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs" +export PRUNEFS +# paths which are pruned from updatedb database +PRUNEPATHS="/tmp /usr/tmp /var/tmp /afs /amd /alex /var/spool" +export PRUNEPATHS +# netpaths which are added +NETPATHS="" +export NETPATHS diff --git a/doc/.cvsignore b/doc/.cvsignore new file mode 100644 index 0000000..244cca6 --- /dev/null +++ b/doc/.cvsignore @@ -0,0 +1,29 @@ +Makefile +Makefile.in +mdate-sh +*.aux +*.cp +*.cps +*.dvi +*.fn +*.fns +*.html +*.info +*.info-* +*.ky +*.log +*.pdf +*.pg +*.ps +*.toc +*.tp +*.vr +*.vrs +regexprops.texi +stamp-vti +version.texi +texinfo.tex +getdate.texi +find-maint.info +stamp-1 +versionmaint.texi diff --git a/doc/.gitignore b/doc/.gitignore new file mode 100644 index 0000000..42d0984 --- /dev/null +++ b/doc/.gitignore @@ -0,0 +1,27 @@ +Makefile +Makefile.in +mdate-sh +find.aux +find.cp +find.cps +find.dvi +find.fn +find.fns +find.info +find.info-1 +find.info-2 +find.ky +find.log +find.pg +find.ps +find.toc +find.tp +find.vr +regexprops.texi +stamp-vti +version.texi +texinfo.tex +getdate.texi +versionmaint.texi +stamp-1 +find-maint.info diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..55b5724 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,71 @@ +info_TEXINFOS = find.texi find-maint.texi +find_TEXINFOS = perm.texi getdate.texi regexprops.texi +find_maint_TEXINFOS = +MOSTLYCLEANFILES = find.cps +CLEANFILES = find.txt find_mono.html findutils.texi_html_node.tar.gz + +# To build regexprops.texi, we need to build the regexprops program and +# run it on the host. If we are cross compiling, we may not have a native +# binary. When this is the case, we use a workaround; don't delete the +# file for 'make clean'. This fixes Savannah bug #19658. +if !CROSS_COMPILING +CLEANFILES += regexprops.texi +endif + +MAKEINFOTXT = $(MAKEINFO) --plaintext + +find.txt: find.texi $(srcdir)/version.texi $(find_TEXINFOS) + +# find.txt is a file which we need to know how to build +# because it gets put on the www.gnu.org website. +# This rule is derived from the .texi.html rule. +.texi.txt: + rm -rf $(@:.txt=.tmp) + if $(MAKEINFOTXT) $(AM_MAKEINFOTXTFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $(@:.txt=.tmp) $<; \ + then \ + rm -rf $@; \ + if test ! -d $(@:.txt=.tmp) && test -d $(@:.txt=); then \ + mv $(@:.txt=) $@; else mv $(@:.txt=.tmp) $@; fi; \ + else \ + if test ! -d $(@:.txt=.tmp) && test -d $(@:.txt=); then \ + rm -rf $(@:.txt=); else rm -Rf $(@:.txt=.tmp) $@; fi; \ + exit 1; \ + fi + + +# find_mono.html is a file which we need to know how to build +# because it gets put on the www.gnu.org website. +# This rule is derived from the generic .texi.html rule. +find_mono.html: find.texi + rm -rf $(@:.html=.htp) + if $(MAKEINFOHTML) --no-split $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $(@:.html=.htp) $<; \ + then \ + rm -rf $@; \ + if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ + mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ + else \ + if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ + rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ + exit 1; \ + fi + + +# findutils.texi_html_node.tar.gz is a file which we need to know +# how to build because it gets put on the www.gnu.org website. +# This rule depends on GNU tar, but it's principally used +# by the maintainer, and we don't need to build the file +# for "make all" or "make install" (or even "make check"). +findutils.texi_html_node.tar.gz: find.html + tar zcf $@ $< + +if CROSS_COMPILING +regexprops.texi: ../gnulib/lib/regex.h + echo "WARNING: $? is newer than $@ but $@ cannot be rebuilt because we are cross-compiling. Continuing anyway." >&2 +else +regexprops.texi: ../gnulib/lib/regex.h + cd ../lib && $(MAKE) $(AM_MAKEFLAGS) regexprops$(EXEEXT) + ../lib/regexprops$(EXEEXT) "Regular Expressions" > $@ + rm ../lib/regexprops$(EXEEXT) +endif diff --git a/doc/find-maint.texi b/doc/find-maint.texi new file mode 100644 index 0000000..b994a6c --- /dev/null +++ b/doc/find-maint.texi @@ -0,0 +1,1166 @@ +\input texinfo @c -*-texinfo-*- +@c %**start of header +@setfilename find-maint.info +@settitle Maintaining Findutils +@c For double-sided printing, uncomment: +@c @setchapternewpage odd +@c %**end of header + +@include versionmaint.texi + +@iftex +@finalout +@end iftex + +@dircategory GNU organization +@direntry +* Maintaining Findutils: (find-maint). Maintaining GNU findutils +@end direntry + +@copying +This manual explains how GNU findutils is maintained, how changes should +be made and tested, and what resources exist to help developers. + +This is edition @value{EDITION}, for findutils version @value{VERSION}. + +Copyright @copyright{} 2007 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 +or any later version published by the Free Software Foundation; +with no Invariant Sections, with no +Front-Cover Texts, and with no Back-Cover Texts. +A copy of the license is included in the section entitled ``GNU +Free Documentation License''. +@end copying + +@titlepage +@title Maintaining Findutils +@subtitle Edition @value{EDITION}, for GNU findutils version @value{VERSION} +@subtitle @value{UPDATED} +@author by James Youngman + +@page +@vskip 0pt plus 1filll +@insertcopying{} +@end titlepage + +@contents + +@ifnottex +@node Top, Introduction, (dir), (dir) +@top Maintaining GNU Findutils + +@insertcopying +@end ifnottex + +@menu +* Introduction:: +* Maintaining GNU Programs:: +* Design Issues:: +* Coding Conventions:: +* Tools:: +* Using the GNU Portability Library:: +* Documentation:: +* Testing:: +* Bugs:: +* Distributions:: +* Internationalisation:: +* Security:: +* Making Releases:: +@end menu + + + + + +@node Introduction +@chapter Introduction + +This document explains how to contribute to and maintain GNU +Findutils. It concentrates on developer-specific issues. For +information about how to use the software please refer to +@xref{Introduction, ,Introduction,find,The Findutils manual}. + +This manual aims to be useful without necessarily being verbose. It's +also a recent document, so there will be a many areas in which +improvements can be made. If you find that the document misses out +important information or any part of the document is be so terse as to +be unuseful, please ask for help on the @email{bug-findutils@@gnu.org} +mailing list. We'll try to improve this document too. + + +@node Maintaining GNU Programs +@chapter Maintaining GNU Programs + +GNU Findutils is part of the GNU Project and so there are a number of +documents which set out standards for the maintenance of GNU +software. + +@table @file +@item standards.texi +GNU Project Coding Standards. All changes to findutils should comply +with these standards. In some areas we go somewhat beyond the +requirements of the standards, but these cases are explained in this +manual. +@item maintain.texi +Information for Maintainers of GNU Software. This document provides +guidance for GNU maintainers. Everybody with commit access should +read this document. Everybody else is welcome to do so too, of +course. +@end table + + + +@node Design Issues +@chapter Design Issues + +The findutils package is installed on many many systems, usually as a +fundamental component. The programs in the package are often used in +order to successfully boot or fix the system. + +This fact means that for findutils we bear in mind considerations that +may not apply so much as for other packages. For example, the fact +that findutils is often a base component motivates us to +@itemize +@item Limit dependencies on libraries +@item Avoid dependencies on other large packages (for example, interpreters) +@item Be conservative when making changes to the 'stable' release branch +@end itemize + +All those considerations come before functionality. Functional +enhancements are still made to findutils, but these are almost +exclusively introduced in the 'development' release branch, to allow +extensive testing and proving. + +Sometimes it is useful to have a priority list to provide guidance +when making design trade-offs. For findutils, that priority list is: + +@enumerate +@item Correctness +@item Standards compliance +@item Security +@item Backward compatibility +@item Performance +@item Functionality +@end enumerate + +For example, we support the @code{-exec} action because POSIX +compliance requires this, even though there are security problems with +it and we would otherwise prefer people to use @code{-execdir}. There +are also cases where some performance is sacrificed in the name of +security. For example, the sanity checks that @code{find} performs +while traversing a directory tree may slow it down. We adopt +functional changes, and functional changes are allowed to make +@code{find} slower, but only if there is no detectable impact on users +who don't use the feature. + +Backward-incompatible changes do get made in order to comply with +standards (for example the behaviour of @code{-perm -...} changed in +order to comply with POSIX). However, they don't get made in order to +provide better ease of use; for example the semantics of @code{-size +-2G} are almost always unexpected by users, but we retain the current +behaviour because of backward compatibility and for its similarity to +the block-rounding behaviour of @code{-size -30}. We might introduce +a change which does not have the unfortunate rounding behaviour, but +we would choose another syntax (for example @code{-size '<2G'}) for +this. + +In a general sense, we try to do test-driven development of the +findutils code; that is, we try to implement test cases for new +features and bug fixes before modifying the code to make the test +pass. Some features of the code are tested well, but the test +coverage for other features is less good. If you are about to modify +the code for a predicate and aren't sure about the test coverage, use +@code{grep} on the test directories and measure the coverage with +@code{gcov} or another test coverage tool. + +Lastly, we try not to depend on having a ``working system''. The +findutils suite is used for diagnosis of problems, and this applies +especially to @code{find}. We should ensure that @code{find} still +works on relatively broken systems, for example systems with damaged +@file{/etc/passwd} files. Another interesting example is the case +where a system is a client of one or more unresponsive NFS servers. +On such a system, if you try to stat all mount points, your program +will hang indefinitely, waiting for the remote NFS server to respond. + + + +@c Installed on many systems +@c Often part of base +@c Needs to work on broken systems (e.g. unresponsive NFS servers, +@c mode-0 files) + +@node Coding Conventions +@chapter Coding Conventions + +Coding style documents which set out to establish a uniform look and +feel to source code have worthy goals, for example greater ease of +maintenance and readability. However, I do not believe that in +general coding style guide authors can envisage every situation, and +it is always possible that it might on occasion be necessary to break +the letter of the style guide in order to honour its spirit, or to +better achieve the style guide's goals. + +I've certainly seen many style guides outside the free software world +which make bald statements such as ``functions shall have exactly one +return statement''. The desire to ensure consistency and obviousness +of control flow is laudable, but it is all too common for such bald +requirements to be followed unthinkingly. Certainly I've seen such +coding standards result in unmaintainable code with terrible +infelicities such as functions containing @code{if} statements nested +nine levels deep. I suppose such coding standards don't survive in +free software projects because they tend to drive away potential +contributors or tend to generate heated discussions on mailing lists. +Equally, a nine-level-deep function in a free software program would +quickly get refactored, assuming it is obvious what the function is +supposed to do... + +Be that as it may, the approach I will take for this document is to +explain some idioms and practices in use in the findutils source code, +and leave it up to the reader's engineering judgement to decide which +considerations apply to the code they are working on, and whether or +not there is sufficient reason to ignore the guidance in current +circumstances. + + +@menu +* Make the Compiler Find the Bugs:: +* The File System Is Being Modified:: +* Don't Trust the File System Contents:: +* Debugging is For Users Too:: +* Factor Out Repeated Code:: +@end menu + +@node Make the Compiler Find the Bugs +@section Make the Compiler Find the Bugs + +Finding bugs is tedious. If I have a filesystem containing two +million files, and a find command line should print one million of +them, but in fact it misses out 1%, you can tell the program is +printing the wrong result only if you know the right answer for that +filesystem at that time. If you don't know this, you may just not +find out about that bug. For this reason it is important to have a +comprehensive test suite. + +The test suite is of course not the only way to find the bugs. The +findutils source code makes liberal use of the assert macro. While on +the one hand these might be a performance drain, the performance +impact of most of these is negligible compared to the time taken to +fetch even one sector from a disk drive. + +Assertions should not be used to check the results of operations which +may be affected by the program's external environment. For example, +never assert that a file could be opened successfully. Errors +relating to problems with the program's execution environment should +be diagnosed with a user-oriented error message. An assertion failure +should always denote a bug in the program. + +Several programs in the findutils suite perform self-checks. See for +example the function @code{pred_sanity_check} in @file{find/pred.c}. +This is generally desirable. + +There are also a number of small ways in which we can help the +compiler to find the bugs for us. + +@subsection Constants in Equality Testing + +It's a common error to write @code{=} when @code{==} is meant. +Sometimes this happens in new code and is simply due to finger +trouble. Sometimes it is the result of the inadvertent deletion of a +character. In any case, there is a subset of cases where we can +persuade the compiler to generate an error message when we make this +mistake; this is where the equality test is with a constant. + +This is an example of a vulnerable piece of code. + +@example +if (x == 2) + ... +@end example + +A simple typo converts the above into + +@example +if (x = 2) + ... +@end example + +We've introduced a bug; the condition is always true, and the value of +@code{x} has been changed. However, a simple change to our practice +would have made us immune to this problem: + +@example +if (2 == x) + ... +@end example + +Usually, the Emacs keystroke @kbd{M-t} can be used to swap the operands. + + +@subsection Spelling of ASCII NUL + +Strings in C are just sequences of characters terminated by a NUL. +The ASCII NUL character has the numerical value zero. It is normally +represented in C code as @samp{\0}. Here is a typical piece of C +code: + +@example +*p = '\0'; +@end example + +Consider what happens if there is an unfortunate typo: + +@example +*p = '0'; +@end example + +We have changed the meaning of our program and the compiler cannot +diagnose this as an error. Our string is no longer terminated. Bad +things will probably happen. It would be better if the compiler could +help us diagnose this problem. + +In C, the type of @code{'\0'} is in fact int, not char. This provides +us with a simple way to avoid this error. The constant @code{0} has +the same value and type as the constant @code{'\0'}. However, it is +not as vulnerable to typos. For this reason I normally prefer to +use this code: + +@example +*p = 0; +@end example + + +@node Factor Out Repeated Code +@section Factor Out Repeated Code + +Repeated code imposes a greater maintenance burden and increases the +exposure to bugs. For example, if you discover that something you +want to implement has some similarity with an existing piece of code, +don't cut and paste it. Instead, factor the code out. The risk of +cutting and pasting the code, particularly if you do this several +times, is that you end up with several copies of the same code. + +If the original code had a bug, you now have N places where this needs +to be fixed. It's all to easy to miss some out when trying to fix the +bug. Equally, it's quite possible that when pasting the code into +some function, the pasted code was not quite adapted correctly to its +new environment. To pick a contrived example, perhaps it modifies a +global variable which it that code shouldn't be touching in its new +home. Worse, perhaps it makes some unstated assumption about the +nature of the input arguments which is in fact not true for the +context of the now duplicated code. + +A good example of the use of refactoring in findutils is the +@code{collect_arg} function in @file{find/parser.c}. A less clear-cut +but larger example is the factoring out of code which would otherwise +have been duplicated between @file{find/find.c} and +@code{find/ftsfind.c}. + +The findutils test suite is comprehensive enough that refactoring code +should not generally be a daunting prospect from a testing point of +view. Nevertheless there are some areas which are only +lightly-tested: + +@enumerate +@item Tests on the ages of files +@item Code which deals with the values returned by operating system calls (for example handling of ENOENT) +@item Code dealing with OS limits (for example, limits on path length +or exec arguments) +@item Code relating to features not all systems have (for example +Solaris Doors) +@end enumerate + +Please exercise caution when working in those areas. + + +@node Debugging is For Users Too +@section Debugging is For Users Too + +Debug and diagnostic code is often used to verify that a program is +working in the way its author thinks it should be. But users are +often uncertain about what a program is doing, too. Exposing them a +little more diagnostic information can help. Much of the diagnostic +code in @code{find}, for example, is controlled by the @samp{-D} flag, +as opposed to C preprocessor directives. + +Making diagnostic messages available to users also means that the +phrasing of the diagnostic messages becomes important, too. + + +@node Don't Trust the File System Contents +@section Don't Trust the File System Contents + +People use @code{find} to search in directories created by other +people. Sometimes they do this to check to suspicious activity (for +example to look for new setuid binaries). This means that it would be +bad if @code{find} were vulnerable to, say, a security problem +exploitable by constructing a specially-crafted filename. The same +consideration would apply to @code{locate} and @code{updatedb}. + +Henry Spencer said this well in his fifth commandment: +@quotation +Thou shalt check the array bounds of all strings (indeed, all arrays), +for surely where thou typest @samp{foo} someone someday shall type +@samp{supercalifragilisticexpialidocious}. +@end quotation + +Symbolic links can often be a problem. If @code{find} calls +@code{lstat} on something and discovers that it is a directory, it's +normal for @code{find} to recurse into it. Even if the @code{chdir} +system call is used immediately, there is still a window of +opportunity between the @code{lstat} and the @code{chdir} in which a +malicious person could rename the directory and substitute a symbolic +link to some other directory. + +@node The File System Is Being Modified +@section The File System Is Being Modified + +The filesystem gets modified while you are traversing it. For, +example, it's normal for files to get deleted while @code{find} is +traversing a directory. Issuing an error message seems helpful when a +file is deleted from the one directory you are interested in, but if +@code{find} is searching 15000 directories, such a message becomes +less helpful. + +Bear in mind also that it is possible for the directory @code{find} is +currently searching could be moved to another point in the filesystem, +and that the directory in which @code{find} was started could be +deleted. + +Henry Spencer's sixth commandment is also apposite here: +@quotation +If a function be advertised to return an error code in the event of +difficulties, thou shalt check for that code, yea, even though the +checks triple the size of thy code and produce aches in thy typing +fingers, for if thou thinkest ``it cannot happen to me'', the gods +shall surely punish thee for thy arrogance. +@end quotation + +There are a lot of files out there. They come in all dates and +sizes. There is a condition out there in the real world to exercise +every bit of the code base. So we try to test that code base before +someone falls over a bug. + + +@node Tools +@chapter Tools +Most of the tools required to build findutils are mentioned in the +file @file{README-CVS}. We also use some other tools: + +@table @asis +@item System call traces +Much of the execution time of find is spent waiting for filesystem +operations. A system call trace (for example, that provided by +@code{strace}) shows what system calls are being made. Using this +information we can work to remove unnecessary file system operations. + +@item Valgrind +Valgrind is a tool which dynamically verifies the memory accesses a +program makes to ensure that they are valid (for example, that the +behaviour of the program does not in any way depend on the contents of +uninitialised memory). + +@item DejaGnu +DejaGnu is the test framework used to run the findutils test suite +(the @code{runtest} program is part of DejaGnu). It would be ideal if +everybody building @code{findutils} also ran the test suite, but many +people don't have DejaGnu installed. When changes are made to +findutils, DejaGnu is invoked a lot. @xref{Testing}, for more +information. +@end table + +@node Using the GNU Portability Library +@chapter Using the GNU Portability Library +The Gnulib library (@url{http://www.gnu.org/software/gnulib/}) makes a +variety of systems look more like a GNU/Linux system and also applies +a bunch of automatic bug fixes and workarounds. Some of these also +apply to GNU/Linux systems too. For example, the Gnulib regex +implementation is used when we determine that we are building on a +GNU libc system with a bug in the regex implementation. + + +@section How and Why we Import the Gnulib Code +Gnulib does not have a release process which results in a source +tarball you can download. Instead, the code is simply made available +by CVS. + +GNU projects vary in how they interact with Gnulib. Many import a +selection of code from Gnulib into the working directory and then +check the updated files into the CVS repository for their project. +The coreutils project does this, for example. + +At the last maintainer changeover for findutils (2003) it turned out +that there was a lot of material in findutils in common with Gnulib, +but it had not been updated in a long time. It was difficult to +figure out which source files were intended to track external sources +and which were intended to contain incompatible changes, or diverge +for other reasons. + +To reduce this uncertainty, I decided to treat Gnulib much like +Automake. Files supplied by Automake are simply absent from the +findutils source tree. When Automake is run with @code{automake +--add-missing --copy}, it adds in all the files it thinks should be +there which aren't there already. + +An analogous approach is taken with Gnulib. The Gnulib code is +imported from the CVS repository for Gnulib with a findutils helper +script, @code{import-gnulib.sh}. That script fetches a copy of the +Gnulib code into the subdirectory @file{gnulib-cvs} and then runs +@code{gnulib-tool}. The @code{gnulib-tool} program copies the +required parts of Gnulib into the findutils source tree in the +subdirectory @file{gnulib}. This process gives us the property that +the code in @file{gnulib} and @code{gnulib-cvs} is not included in the +findutils CVS tree. Both directories are listed in @file{.cvsignore} +and so CVS ignores them. + +Findutils does not use all the Gnulib code. The modules we need are +listed in the file @file{import-gnulib.config}. The same file also +indicates the version of Gnulib that we want to use. Since Gnulib has +no actual release process, we just use a date. Both +@file{import-gnulib.sh} and @file{import-gnulib.config} are in the +findutils CVS repository. + +The upshot of all this is that we can use the findutils CVS repository +to track which version of Gnulib every findutils release uses. That +information is also provided when the user invokes a findutils program +with the @samp{--version} option. It also means that if a file exists +in the Findutils CVS repository, you can be certain that the file +exists in the CVS repository and is different from a similar file +elsewhere, it's for a reason. + +There are a small number of exceptions to this; the standard +boiler-plate GNU files such as @file{ABOUT-NLS}, @file{INSTALL} and +@file{COPYING}. + + +@section How We Fix Gnulib Bugs +If we always directly import the Gnulib code directly from the CVS +repository in this way, it is impossible to maintain a locally +different copy of Gnulib. This is often a benefit in that accidental +version skew is prevented. + +However, sometimes we want deliberate version skew in order to use a +findutils-specific patched version of a Gnulib file, for example +because we fixed a bug. + +Gnulib is used by quite a number of GNU projects, and this means that +it gets plenty of testing. Therefore there are relatively few bugs in +the Gnulib code, but it does happen from time to time. + +However, since there is no waiting around for a Gnulib source release +tarball, Gnulib bugs are generally fixed quickly. Here is an outline +of the way we would contribute a fix to Gnulib (assuming you know it +is not already fixed in current Gnulib CVS): + +@table @asis +@item Check you already completed a copyright assignment for Gnulib +@item Begin with a vanilla CVS tree +Download the Findutils source code from CVS (or use the tree you have +already) +@item Check out a copy of the Gnulib source +An easy way to do this is to simply use @code{cp -ar} on the +@file{gnulib-cvs} directory. Have the Gnulib code checked out +somewhere @emph{outside} your working CVS tree for findutils. +@item Import Gnulib from your local copy +The @code{import-gnulib.sh} tool has a @samp{-d} option which you can +use to import the code from a local copy of Gnulib. +@item Build findutils +Build findutils and run the test suite, which should pass. In our +example we assume you have just noticed a bug in Gnulib, not that +recent Gnulib changes broke the findutils regression tests. +@item Write a test case +If in fact Gnulib did break the findutils regression tests, you can probably +skip this step, since you already have a test case demonstrating the problem. +Otherwise, write a findutils test case for the bug and/or a Gnulib test case. +@item Fix the Gnulib bug +Make sure your editor follows symbolic links so that your changes to +@file{gnulib/...} actually affect the files in the CVS working +directory you checked out earlier. Observe that your test now passes. +@item Prepare a Gnulib patch +Use @code{cvs -z3 diff -upN} to prepare the patch. Write a ChangeLog +entry and prepend this to the patch. Check that the patch conforms +with the GNU coding standards, and email it to the Gnulib mailing +list. +@item Wait for the patch to be applied +Once your bug fix has been applied, you can update your local directory +from CVS, re-import the code into Findutils (still using the @code{-d} +option), and re-run the tests. This verifies that the fix the Gnulib +team made actually fixes your problem. +@item Reimport the Gnulib code +Update the findutils file @file{import-gnulib.config} to specify a +date which is after the point at which the bug fix was committed to +Gnulib. Finally, re-import the Gnulib code directly from CVS by using +@samp{import-gnulib.sh} without the @samp{-d} option, and run the +tests again. This verifies that there was no remaining local change +that we were relying on to fix the bug. + +Be aware of the fact that the date specified in the +@file{import-gnulib.config} file selects the latest changes for the +given date, so if you modify @file{import-gnulib.config} as soon as +someone tells you they they checked in a bugfix and you set +@var{gnulib_version} to today's date, there will be some file version +instability for the rest of the day. + +@end table + +@node Documentation +@chapter Documentation + +The findutils CVS tree includes several different types of +documentation. + +@section User Documentation +User-oriented documentation is provided as manual pages and in +Texinfo. See +@ref{Introduction,,Introduction,find,The Findutils manual}. + +Please make sure both sets of documentation are updated if you make a +change to the code. The GNU coding standards do not normally call for +maintaining manual pages on the grounds of effort duplication. +However, the manual page format is more convenient for quick +reference, and so it's worth maintaining both types of documentation. +However, the manual pages are normally rather more terse than the +Texinfo documentation. The manual pages are suitable for reference +use, but the Texinfo manual should also include introductory and +tutorial material. + + +@section Build Guidance + +@table @file +@item ABOUT-NLS +Describes the Free Translation Project, the translation status of +various GNU projects, and how to participate by translating an +application. +@item AUTHORS +Lists the authors of findutils. +@item COPYING +The copyright license covering findutils; currently, the GNU GPL, +version 3. +@item INSTALL +Generic installation instructions for installing GNU programs. +@item README +Information about how to compile findutils in particular +@item README-alpha +A README file which is included with testing releases of findutils. +@item README-CVS +Describes how to build findutils from the code in CVS. +@item THANKS +Thanks for people who contributed to findutils. Generally, if +someone's contribution was significant enough to need a copyright +assignment, their name should go in here. +@item TODO +Mainly obsolete. +@end table + + +@section Release Information +@table @file +@item NEWS +Enumerates the user-visible change in each release. Typical changes +are fixed bugs, functionality changes and documentation changes. +Include the date when a release is made. +@item ChangeLog +This file enumerates all changes to the findutils source code (with +the possible exception of @file{.cvsignore} and @code{.gitignore} +changes). The level of detail used for this file should be sufficient +to answer the questions ``what changed?'' and ``why was it changed?''. +If a change fixes a bug, always give the bug reference number in both +the @file{ChangeLog} and @file{NEWS} files and of course also in the +checkin message. In general, it should be possible to enumerate all +material changes to a function by searching for its name in +@file{ChangeLog}. Mention when each release is made. +@end table + +@node Testing +@chapter Testing +This chapter will explain the general procedures for adding tests to +the test suite, and the functions defined in the findutils-specific +DejaGnu configuration. Where appropriate references will be made to +the DejaGnu documentation. + +@node Bugs +@chapter Bugs + +Bugs are logged in the Savannah bug tracker +@url{http://savannah.gnu.org/bugs/?group=findutils}. The tracker +offers several fields but their use is largely obvious. The +life-cycle of a bug is like this: + + +@table @asis +@item Open +Someone, usually a maintainer, a distribution maintainer or a user, +creates a bug by filling in the form. They fill in field values as +they see fit. This will generate an email to +@email{bug-findutils@@gnu.org}. + +@item Triage +The bug hangs around with @samp{Status=None} until someone begins to +work on it. At that point they set the ``Assigned To'' field and will +sometimes set the status to @samp{In Progress}, especially if the bug +will take a while to fix. + +@item Non-bugs +Quite a lot of reports are not actually bugs; for these the usual +procedure is to explain why the problem is not a bug, set the status +to @samp{Invalid} and close the bug. Make sure you set the +@samp{Assigned to} field to yourself before closing the bug. + +@item Fixing +When you commit a bug fix into CVS (or in the case of a contributed +patch, commit the change), mark the bug as @samp{Fixed}. Make sure +you include a new test case where this is relevant. If you can figure +out which releases are affected, please also set the @samp{Release} +field to the earliest release which is affected by the bug. +Indicate which source branch the fix is included in (for example, +4.2.x or 4.3.x). Don't close the bug yet. + +@item Release +When a release is made which includes the bug fix, make sure the bug +is listed in the NEWS file. Once the release is made, fill in the +@samp{Fixed Release} field and close the bug. +@end table + + +@node Distributions +@chapter Distributions +Almost all GNU/Linux distributions include findutils, but only some of +them have a package maintainer who is a member of the mailing list. +Distributions don't often feed back patches to the +@email{bug-findutils@@gnu.org} list, but on the other hand many of +their patches relate only to standards for file locations and so +forth, and are therefore distribution specific. On an irregular basis +I check the current patches being used by one or two distributions, +but the total number of GNU/Linux distributions is large enough that +we could not hope to cover them all. + +Often, bugs are raised against a distribution's bug tracker instead of +GNU's. Periodically (about every six months) I take a look at some +of the more accessible bug trackers to indicate which bugs have been +fixed upstream. + +Many distributions include both findutils and the slocate package, +which provides a replacement @code{locate}. + + +@node Internationalisation +@chapter Internationalisation +Translation is essentially automated from the maintainer's point of +view. The TP mails the maintainer when a new PO file is available, +and we just download it and check it in. We copy the @file{.po} files +into the CVS repository. For more information, please see +@url{http://www.iro.umontreal.ca/translation/HTML/domain-findutils.html}. + + +@node Security +@chapter Security + +See @ref{Security Considerations, ,Security Considerations,find,The +Findutils manual}, for a full description of the findutils approach to +security considerations and discussion of particular tools. + +If someone reports a security bug publicly, we should fix this as +rapidly as possible. If necessary, this can mean issuing a fixed +release containing just the one bug fix. We try to avoid issuing +releases which include both significant security fixes and functional +changes. + +Where someone reports a security problem privately, we generally try +to construct and test a patch without checking the intermediate code +in. Once everything has been tested, this allows us to commit a patch +and immediately make a release. The advantage of doing things this +way is that we avoid situations where people watching for CVS commits +can figure out and exploit a security problem before a fixed release +is available. + +It's important that security problems be fixed promptly, but don't +rush so much that things go wrong. Make sure the new release really +fixes the problem. It's usually best not to include functional +changes in your security-fix release. + +If the security problem is serious, send an alert to +@email{vendor-sec@@lst.de}. The members of the list include most +GNU/Linux distributions. The point of doing this is to allow them to +prepare to release your security fix to their customers, once the fix +becomes available. Here is an example alert:- + +@smallexample +GNU findutils heap buffer overrun (potential privilege escalation) + +$Revision: 1.3 $; $Date: 2007/07/18 03:40:46 $ + + +I. BACKGROUND +============= + +GNU findutils is a set of programs which search for files on Unix-like +systems. It is maintained by the GNU Project of the Free Software +Foundation. For more information, see +@url{http://www.gnu.org/software/findutils}. + + +II. DESCRIPTION +=============== + +When GNU locate reads filenames from an old-format locate database, +they are read into a fixed-length buffer allocated on the heap. +Filenames longer than the 1026-byte buffer can cause a buffer overrun. +The overrunning data can be chosen by any person able to control the +names of filenames created on the local system. This will normally +include all local users, but in many cases also remote users (for +example in the case of FTP servers allowing uploads). + +III. ANALYSIS +============= + +Findutils supports three different formats of locate database, its +native format "LOCATE02", the slocate variant of LOCATE02, and a +traditional ("old") format that locate uses on other Unix systems. + +When locate reads filenames from a LOCATE02 database (the default +format), the buffer into which data is read is automatically extended +to accomodate the length of the filenames. + +This automatic buffer extension does not happen for old-format +databases. Instead a 1026-byte buffer is used. When a longer +pathname appears in the locate database, the end of this buffer is +overrun. The buffer is allocated on the heap (not the stack). + +If the locate database is in the default LOCATE02 format, the locate +program does perform automatic buffer extension, and the program is +not vulnerable to this problem. The software used to build the +old-format locate database is not itself vulnerable to the same +attack. + +Most installations of GNU findutils do not use the old database +format, and so will not be vulnerable. + + +IV. DETECTION +============= + +Software +-------- +All existing releases of findutils are affected. + + +Installations +------------- + +To discover the ongest path name on a given system, you can use the +following command (requires GNU findutils and GNU coreutils): + +@verbatim +find / -print0 | tr -c '\0' 'x' | tr '\0' '\n' | wc -L +@end verbatim + +V. EXAMPLE +========== + +This section includes a shell script which determines which of a list +of locate binaries is vulnerable to the problem. The shell script has +been tested only on glibc based systems having a mktemp binary. + +NOTE: This script deliberately overruns the buffer in order to +determine if a binary is affected. Therefore running it on your +system may have undesirable effects. We recommend that you read the +script before running it. + +@verbatim +#! /bin/sh +set +m +if vanilla_db="$(mktemp nicedb.XXXXXX)" ; then + if updatedb --prunepaths="" --old-format --localpaths="/tmp" \ + --output="$@{vanilla_db@}" ; then + true + else + rm -f "$@{vanilla_db@}" + vanilla_db="" + echo "Failed to create old-format locate database; skipping the sanity checks" >&2 + fi +fi + +make_overrun_db() @{ + # Start with a valid database + cat "$@{vanilla_db@}" + # Make the final entry really long + dd if=/dev/zero bs=1 count=1500 2>/dev/null | tr '\000' 'x' +@} + + + +ulimit -c 0 + +usage() @{ echo "usage: $0 binary [binary...]" >&2; exit $1; @} +[ $# -eq 0 ] && usage 1 + +bad="" +good="" +ugly="" +if dbfile="$(mktemp nasty.XXXXXX)" +then + make_overrun_db > "$dbfile" + for locate ; do + ver="$locate = $("$locate" --version | head -1)" + if [ -z "$vanilla_db" ] || "$locate" -d "$vanilla_db" "" >/dev/null ; then + "$locate" -d "$dbfile" "" >/dev/null + if [ $? -gt 128 ] ; then + bad="$bad +vulnerable: $ver" + else + good="$good +good: $ver" + fi + else + # the regular locate failed + ugly="$ugly +buggy, may or may not be vulnerable: $ver" + fi + done + rm -f "$@{dbfile@}" "$@{vanilla_db@}" + # good: unaffected. bad: affected (vulnerable). + # ugly: doesn't even work for a normal old-format database. + echo "$good" + echo "$bad" + echo "$ugly" +else + exit 1 +fi +@end verbatim + + + + +VI. VENDOR RESPONSE +=================== + +The GNU project discovered the problem while 'locate' was being worked +on; this is the first public announcement of the problem. + +The GNU findutils mantainer has issued a patch as p[art of this +announcement. The patch appears below. + +A source release of findutils-4.2.31 will be issued on 2007-05-30. +That release will of course include the patch. The patch will be +committed to the public CVS repository at the same time. Public +announcements of the release, including a description of the bug, will +be made at the same time as the release. + +A release of findutils-4.3.x will follow and will also include the +patch. + + +VII. PATCH +========== + +This patch should apply to findutils-4.2.23 and later. +Findutils-4.2.23 was released almost two years ago. +@verbatim +Index: locate/locate.c +=================================================================== +RCS file: /cvsroot/findutils/findutils/locate/locate.c,v +retrieving revision 1.58.2.2 +diff -u -p -r1.58.2.2 locate.c +--- locate/locate.c 22 Apr 2007 16:57:42 -0000 1.58.2.2 ++++ locate/locate.c 28 May 2007 10:18:16 -0000 +@@@@ -124,9 +124,9 @@@@ extern int errno; + + #include "locatedb.h" + #include +-#include "../gnulib/lib/xalloc.h" +-#include "../gnulib/lib/error.h" +-#include "../gnulib/lib/human.h" ++#include "xalloc.h" ++#include "error.h" ++#include "human.h" + #include "dirname.h" + #include "closeout.h" + #include "nextelem.h" +@@@@ -468,10 +468,36 @@@@ visit_justprint_unquoted(struct process_ + return VISIT_CONTINUE; + @} + ++static void ++toolong (struct process_data *procdata) ++@{ ++ error (1, 0, ++ _("locate database %s contains a " ++ "filename longer than locate can handle"), ++ procdata->dbfile); ++@} ++ ++static void ++extend (struct process_data *procdata, size_t siz1, size_t siz2) ++@{ ++ /* Figure out if the addition operation is safe before performing it. */ ++ if (SIZE_MAX - siz1 < siz2) ++ @{ ++ toolong (procdata); ++ @} ++ else if (procdata->pathsize < (siz1+siz2)) ++ @{ ++ procdata->pathsize = siz1+siz2; ++ procdata->original_filename = x2nrealloc (procdata->original_filename, ++ &procdata->pathsize, ++ 1); ++ @} ++@} ++ + static int + visit_old_format(struct process_data *procdata, void *context) + @{ +- register char *s; ++ register size_t i; + (void) context; + + /* Get the offset in the path where this path info starts. */ +@@@@ -479,20 +505,35 @@@@ visit_old_format(struct process_data *pr + procdata->count += getw (procdata->fp) - LOCATEDB_OLD_OFFSET; + else + procdata->count += procdata->c - LOCATEDB_OLD_OFFSET; ++ assert(procdata->count > 0); + +- /* Overlay the old path with the remainder of the new. */ +- for (s = procdata->original_filename + procdata->count; ++ /* Overlay the old path with the remainder of the new. Read ++ * more data until we get to the next filename. ++ */ ++ for (i=procdata->count; + (procdata->c = getc (procdata->fp)) > LOCATEDB_OLD_ESCAPE;) +- if (procdata->c < 0200) +- *s++ = procdata->c; /* An ordinary character. */ +- else +- @{ +- /* Bigram markers have the high bit set. */ +- procdata->c &= 0177; +- *s++ = procdata->bigram1[procdata->c]; +- *s++ = procdata->bigram2[procdata->c]; +- @} +- *s-- = '\0'; ++ @{ ++ if (procdata->c < 0200) ++ @{ ++ /* An ordinary character. */ ++ extend (procdata, i, 1u); ++ procdata->original_filename[i++] = procdata->c; ++ @} ++ else ++ @{ ++ /* Bigram markers have the high bit set. */ ++ extend (procdata, i, 2u); ++ procdata->c &= 0177; ++ procdata->original_filename[i++] = procdata->bigram1[procdata->c]; ++ procdata->original_filename[i++] = procdata->bigram2[procdata->c]; ++ @} ++ @} ++ ++ /* Consider the case where we executed the loop body zero times; we ++ * still need space for the terminating null byte. ++ */ ++ extend (procdata, i, 1u); ++ procdata->original_filename[i] = 0; + + procdata->munged_filename = procdata->original_filename; +@end verbatim + + +VIII. THANKS +============ + +Thanks to Rob Holland and Tavis Ormandy. + + +VIII. CVE INFORMATION +===================== + +No CVE candidate number has yet been assigned for this vulnerability. +If someone provides one, I will include it in the public announcement +and change logs. +@end smallexample + +The original announcement above was sent out with a cleartext PGP +signature, of course, but that has been omitted from the example. + +Once a fixed release is available, announce the new release using the +normal channels. Any CVE number assigned for the problem should be +included in the @file{ChangeLog} and @file{NEWS} entries. See +@url{http://cve.mitre.org/} for an explanation of CVE numbers. + + + +@node Making Releases +@chapter Making Releases +This section will explain how to make a findutils release. For the +time being here is a terse description of the main steps: + +@enumerate +@item Commit changes; make sure your working directory has no +uncommitted changes. +@item Test; make sure that all changes you have made have tests, and +that the tests pass. Verify this with @code{make distcheck}. +@item Bugs; make sure all Savannah bug entries fixed in this release +are fixed. +@item NEWS; make sure that the NEWS and configure.in file are updated +with the new release number (and checked in). +@item Build the release tarball; do this with @code{make distcheck}. +Copy the tarball somewhere safe. +@item Tag the release; findutils releases are tagged in CVS as +FINDUTILS_x_y_z-1. For example, the tag for findutils release 4.3.8 +is FINDUTILS_4_3_8-1. +@item Prepare the upload and upload it. +@xref{Automated FTP Uploads, ,Automated FTP +Uploads, maintain, Information for Maintainers of GNU Software}, +for detailed upload instructions. +@item Make a release announcement; include an extract from the NEWS +file which explains what's changed. Announcements for test releases +should just go to @email{bug-findutils@@gnu.org}. Announcements for +stable releases should go to @email{info-gnu@@gnu.org} as well. +@item Bump the release numbers in CVS; edit the @file{configure.in} +and @file{NEWS} files to advance the release numbers. For example, +if you have just released @samp{4.6.2}, bump the release number to +@samp{4.6.3-CVS}. The point of the @samp{-CVS} suffix here is that a +findutils binary built from CVS will bear a release number indicating +it's not built from the the ``official'' source release. +@item Close bugs; any bugs recorded on Savannah which were fixed in this +release should now be marked as closed. Update the @samp{Fixed +Release} field of these bugs appropriately and make sure the +@samp{Assigned to} field is populated. +@end enumerate + + +@bye + +@comment texi related words used by Emacs' spell checker ispell.el + +@comment LocalWords: texinfo setfilename settitle setchapternewpage +@comment LocalWords: iftex finalout ifinfo DIR titlepage vskip pt +@comment LocalWords: filll dir samp dfn noindent xref pxref +@comment LocalWords: var deffn texi deffnx itemx emph asis +@comment LocalWords: findex smallexample subsubsection cindex +@comment LocalWords: dircategory direntry itemize + +@comment other words used by Emacs' spell checker ispell.el +@comment LocalWords: README fred updatedb xargs Plett Rendell akefile +@comment LocalWords: args grep Filesystems fo foo fOo wildcards iname +@comment LocalWords: ipath regex iregex expr fubar regexps +@comment LocalWords: metacharacters macs sr sc inode lname ilname +@comment LocalWords: sysdep noleaf ls inum xdev filesystems usr atime +@comment LocalWords: ctime mtime amin cmin mmin al daystart Sladkey rm +@comment LocalWords: anewer cnewer bckw rf xtype uname gname uid gid +@comment LocalWords: nouser nogroup chown chgrp perm ch maxdepth +@comment LocalWords: mindepth cpio src CD AFS statted stat fstype ufs +@comment LocalWords: nfs tmp mfs printf fprint dils rw djm Nov lwall +@comment LocalWords: POSIXLY fls fprintf strftime locale's EDT GMT AP +@comment LocalWords: EST diff perl backquotes sprintf Falstad Oct cron +@comment LocalWords: eg vmunix mkdir afs allexec allwrite ARG bigram +@comment LocalWords: bigrams cd chmod comp crc CVS dbfile dum eof +@comment LocalWords: fileserver filesystem fn frcode Ghazi Hnewc iXX +@comment LocalWords: joeuser Kaveh localpaths localuser LOGNAME +@comment LocalWords: Meyering mv netpaths netuser nonblank nonblanks +@comment LocalWords: ois ok Pinard printindex proc procs prunefs +@comment LocalWords: prunepaths pwd RFS rmadillo rmdir rsh sbins str +@comment LocalWords: su Timar ubins ug unstripped vf VM Weitzel +@comment LocalWords: wildcard zlogout basename execdir wholename iwholename +@comment LocalWords: timestamp timestamps Solaris FreeBSD OpenBSD POSIX diff --git a/doc/find.texi b/doc/find.texi new file mode 100644 index 0000000..f4ea166 --- /dev/null +++ b/doc/find.texi @@ -0,0 +1,5187 @@ +\input texinfo @c -*-texinfo-*- +@c %**start of header +@setfilename find.info +@settitle Finding Files +@c For double-sided printing, uncomment: +@c @setchapternewpage odd +@c %**end of header + +@include version.texi +@include ../locate/dblocation.texi + +@iftex +@finalout +@end iftex + +@dircategory Basics +@direntry +* Finding files: (find). Operating on files matching certain criteria. +@end direntry + +@dircategory Individual utilities +@direntry +* find: (find)Invoking find. Finding and acting on files. +* locate: (find)Invoking locate. Finding files in a database. +* updatedb: (find)Invoking updatedb. Building the locate database. +* xargs: (find)Invoking xargs. Operating on many files. +@end direntry + +@copying + +This file documents the GNU utilities for finding files that match +certain criteria and performing various operations on them. + +Copyright (C) 1994, 1996, 1998, 2000, 2001, 2003, 2004, 2005, 2006, +2007 Free Software Foundation, Inc. + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +@ignore +Permission is granted to process this file through TeX and print the +results, provided the printed document carries copying permission +notice identical to this one except for the removal of this paragraph +(this paragraph not being relevant to the printed manual). + +@end ignore +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the +entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + +Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be stated in a +translation approved by the Foundation. +@end copying + +@titlepage +@title Finding Files +@subtitle Edition @value{EDITION}, for GNU @code{find} version @value{VERSION} +@subtitle @value{UPDATED} +@author by David MacKenzie and James Youngman + +@page +@vskip 0pt plus 1filll +@insertcopying{} +@end titlepage + +@contents + +@ifnottex +@node Top +@top GNU Findutils +@comment node-name, next, previous, up + +This file documents the GNU utilities for finding files that match +certain criteria and performing various actions on them. + +This is edition @value{EDITION}, for @code{find} version @value{VERSION}. +@end ifnottex + +@c The master menu, created with texinfo-master-menu, goes here. + +@menu +* Introduction:: Summary of the tasks this manual describes. +* Finding Files:: Finding files that match certain criteria. +* Actions:: Doing things to files you have found. +* Databases:: Maintaining file name databases. +* File Permissions:: How to control access to files. +* Date input formats:: Specifying literal times. +* Reference:: Summary of how to invoke the programs. +* Common Tasks:: Solutions to common real-world problems. +* Worked Examples:: Examples demonstrating more complex points. +* Security Considerations:: Security issues relating to findutils. +* Error Messages:: Explanations of some messages you might see. +* Primary Index:: The components of @code{find} expressions. +@end menu + +@node Introduction +@chapter Introduction + +This manual shows how to find files that meet criteria you specify, +and how to perform various actions on the files that you find. The +principal programs that you use to perform these tasks are +@code{find}, @code{locate}, and @code{xargs}. Some of the examples in +this manual use capabilities specific to the GNU versions of those +programs. + +GNU @code{find} was originally written by Eric Decker, with +enhancements by David MacKenzie, Jay Plett, and Tim Wood. GNU +@code{xargs} was originally written by Mike Rendell, with enhancements +by David MacKenzie. GNU @code{locate} and its associated utilities +were originally written by James Woods, with enhancements by David +MacKenzie. The idea for @samp{find -print0} and @samp{xargs -0} came +from Dan Bernstein. The current maintainer of GNU findutils (and this +manual) is James Youngman. Many other people have contributed bug +fixes, small improvements, and helpful suggestions. Thanks! + +To report a bug in GNU findutils, please use the form on the Savannah +web site at +@code{http://savannah.gnu.org/bugs/?group=findutils}. Reporting bugs +this way means that you will then be able to track progress in fixing +the problem. + +If you don't have web access, you can also just send mail to the +mailing list. The mailing list @email{bug-findutils@@gnu.org} carries +discussion of bugs in findutils, questions and answers about the +software and discussion of the development of the programs. To join +the list, send email to @email{bug-findutils-request@@gnu.org}. + +Please read any relevant sections of this manual before asking for +help on the mailing list. You may also find it helpful to read the +NON-BUGS section of the @code{find} manual page. + +If you ask for help on the mailing list, people will be able to help +you much more effectively if you include the following things: + +@itemize @bullet +@item The version of the software you are running. You can find this +out by running @samp{locate --version}. +@item What you were trying to do +@item The @emph{exact} command line you used +@item The @emph{exact} output you got (if this is very long, try to +find a smaller example which exhibits the same problem) +@item The output you expected to get +@end itemize + +It may also be the case that the bug you are describing has already +been fixed, if it is a bug. Please check the most recent findutils +releases at @url{ftp://ftp.gnu.org/gnu/findutils} and, if possible, +the development branch at @url{ftp://alpha.gnu.org/gnu/findutils}. +If you take the time to check that your bug still exists in current +releases, this will greatly help people who want to help you solve +your problem. Please also be aware that if you obtained findutils as +part of the GNU/Linux 'distribution', the distributions often lag +seriously behind findutils releases, even the stable release. Please +check the GNU FTP site. + +@menu +* Scope:: +* Overview:: +* find Expressions:: +@end menu + +@node Scope +@section Scope + +For brevity, the word @dfn{file} in this manual means a regular file, +a directory, a symbolic link, or any other kind of node that has a +directory entry. A directory entry is also called a @dfn{file name}. +A file name may contain some, all, or none of the directories in a +path that leads to the file. These are all examples of what this +manual calls ``file names'': + +@example +parser.c +README +./budget/may-94.sc +fred/.cshrc +/usr/local/include/termcap.h +@end example + +A @dfn{directory tree} is a directory and the files it contains, all +of its subdirectories and the files they contain, etc. It can also be +a single non-directory file. + +These programs enable you to find the files in one or more directory +trees that: + +@itemize @bullet +@item +have names that contain certain text or match a certain pattern; +@item +are links to certain files; +@item +were last used during a certain period of time; +@item +are within a certain size range; +@item +are of a certain type (regular file, directory, symbolic link, etc.); +@item +are owned by a certain user or group; +@item +have certain access permissions or special mode bits; +@item +contain text that matches a certain pattern; +@item +are within a certain depth in the directory tree; +@item +or some combination of the above. +@end itemize + +Once you have found the files you're looking for (or files that are +potentially the ones you're looking for), you can do more to them than +simply list their names. You can get any combination of the files' +attributes, or process the files in many ways, either individually or +in groups of various sizes. Actions that you might want to perform on +the files you have found include, but are not limited to: + +@itemize @bullet +@item +view or edit +@item +store in an archive +@item +remove or rename +@item +change access permissions +@item +classify into groups +@end itemize + +This manual describes how to perform each of those tasks, and more. + +@node Overview +@section Overview + +The principal programs used for making lists of files that match given +criteria and running commands on them are @code{find}, @code{locate}, +and @code{xargs}. An additional command, @code{updatedb}, is used by +system administrators to create databases for @code{locate} to use. + +@code{find} searches for files in a directory hierarchy and prints +information about the files it found. It is run like this: + +@example +find @r{[}@var{file}@dots{}@r{]} @r{[}@var{expression}@r{]} +@end example + +@noindent +Here is a typical use of @code{find}. This example prints the names +of all files in the directory tree rooted in @file{/usr/src} whose +name ends with @samp{.c} and that are larger than 100 Kilobytes. +@example +find /usr/src -name '*.c' -size +100k -print +@end example + +Notice that the wildcard must be enclosed in quotes in order to +protect it from expansion by the shell. + +@code{locate} searches special file name databases for file names that +match patterns. The system administrator runs the @code{updatedb} +program to create the databases. @code{locate} is run like this: + +@example +locate @r{[}@var{option}@dots{}@r{]} @var{pattern}@dots{} +@end example + +@noindent +This example prints the names of all files in the default file name +database whose name ends with @samp{Makefile} or @samp{makefile}. +Which file names are stored in the database depends on how the system +administrator ran @code{updatedb}. +@example +locate '*[Mm]akefile' +@end example + +The name @code{xargs}, pronounced EX-args, means ``combine +arguments.'' @code{xargs} builds and executes command lines by +gathering together arguments it reads on the standard input. Most +often, these arguments are lists of file names generated by +@code{find}. @code{xargs} is run like this: + +@example +xargs @r{[}@var{option}@dots{}@r{]} @r{[}@var{command} @r{[}@var{initial-arguments}@r{]}@r{]} +@end example + +@noindent +The following command searches the files listed in the file +@file{file-list} and prints all of the lines in them that contain the +word @samp{typedef}. +@example +xargs grep typedef < file-list +@end example + +@node find Expressions +@section @code{find} Expressions + +The expression that @code{find} uses to select files consists of one +or more @dfn{primaries}, each of which is a separate command line +argument to @code{find}. @code{find} evaluates the expression each +time it processes a file. An expression can contain any of the +following types of primaries: + +@table @dfn +@item options +affect overall operation rather than the processing of a specific +file; +@item tests +return a true or false value, depending on the file's attributes; +@item actions +have side effects and return a true or false value; and +@item operators +connect the other arguments and affect when and whether they are +evaluated. +@end table + +You can omit the operator between two primaries; it defaults to +@samp{-and}. @xref{Combining Primaries With Operators}, for ways to +connect primaries into more complex expressions. If the expression +contains no actions other than @samp{-prune}, @samp{-print} is +performed on all files for which the entire expression is true +(@pxref{Print File Name}). + +Options take effect immediately, rather than being evaluated for each +file when their place in the expression is reached. Therefore, for +clarity, it is best to place them at the beginning of the expression. +There are two exceptions to this; @samp{-daystart} and @samp{-follow} +have different effects depending on where in the command line they +appear. This can be confusing, so it's best to keep them at the +beginning, too. + +Many of the primaries take arguments, which immediately follow them in +the next command line argument to @code{find}. Some arguments are +file names, patterns, or other strings; others are numbers. Numeric +arguments can be specified as + +@table @code +@item +@var{n} +for greater than @var{n}, +@item -@var{n} +for less than @var{n}, +@item @var{n} +for exactly @var{n}. +@end table + +@node Finding Files +@chapter Finding Files + +By default, @code{find} prints to the standard output the names of the +files that match the given criteria. @xref{Actions}, for how to get +more information about the matching files. + + +@menu +* Name:: +* Links:: +* Time:: +* Size:: +* Type:: +* Owner:: +* Mode Bits:: +* Contents:: +* Directories:: +* Filesystems:: +* Combining Primaries With Operators:: +@end menu + +@node Name +@section Name + +Here are ways to search for files whose name matches a certain +pattern. @xref{Shell Pattern Matching}, for a description of the +@var{pattern} arguments to these tests. + +Each of these tests has a case-sensitive version and a +case-insensitive version, whose name begins with @samp{i}. In a +case-insensitive comparison, the patterns @samp{fo*} and @samp{F??} +match the file names @file{Foo}, @samp{FOO}, @samp{foo}, @samp{fOo}, +etc. + +@menu +* Base Name Patterns:: +* Full Name Patterns:: +* Fast Full Name Search:: +* Shell Pattern Matching:: Wildcards used by these programs. +@end menu + +@node Base Name Patterns +@subsection Base Name Patterns + +@deffn Test -name pattern +@deffnx Test -iname pattern +True if the base of the file name (the path with the leading +directories removed) matches shell pattern @var{pattern}. For +@samp{-iname}, the match is case-insensitive.@footnote{Because we +need to perform case-insensitive matching, the GNU fnmatch +implementation is always used; if the C library includes the GNU +implementation, we use that and otherwise we use the one from gnulib} +To ignore a whole directory tree, use @samp{-prune} +(@pxref{Directories}). As an example, to find Texinfo source files in +@file{/usr/local/doc}: + +@example +find /usr/local/doc -name '*.texi' +@end example + +Notice that the wildcard must be enclosed in quotes in order to +protect it from expansion by the shell. + +As of findutils version 4.2.2, patterns for @samp{-name} and +@samp{-iname} will match a file name with a leading @samp{.}. For +example the command @samp{find /tmp -name \*bar} will match the file +@file{/tmp/.foobar}. Braces within the pattern (@samp{@{@}}) are not +considered to be special (that is, @code{find . -name 'foo@{1,2@}'} +matches a file named @file{foo@{1,2@}}, not the files @file{foo1} and +@file{foo2}. +@end deffn + + +@node Full Name Patterns +@subsection Full Name Patterns + +@deffn Test -path pattern +@deffnx Test -wholename pattern +True if the entire file name, starting with the command line argument +under which the file was found, matches shell pattern @var{pattern}. +To ignore a whole directory tree, use @samp{-prune} rather than +checking every file in the tree (@pxref{Directories}). The ``entire +file name'' as used by @code{find} starts with the starting-point +specified on the command line, and is not converted to an absolute +pathname, so for example @code{cd /; find tmp -wholename /tmp} will +never match anything. The name @samp{-wholename} is GNU-specific, +but @samp{-path} is more portable; it is supported by HP-UX +@code{find} and will soon be part of POSIX. +@end deffn + +@deffn Test -ipath pattern +@deffnx Test -iwholename pattern +These tests are like @samp{-wholename} and @samp{-path}, but the match +is case-insensitive. +@end deffn + + +In the context of the tests @samp{-path}, @samp{-wholename}, +@samp{-ipath} and @samp{-wholename}, a ``full path'' is the name of +all the directories traversed from @code{find}'s start point to the +file being tested, followed by the base name of the file itself. +These paths are often not absolute paths; for example + +@example +$ cd /tmp +$ mkdir -p foo/bar/baz +$ find foo -path foo/bar -print +foo/bar +$ find foo -path /tmp/foo/bar -print +$ find /tmp/foo -path /tmp/foo/bar -print +/tmp/foo/bar +@end example + +Notice that the second @code{find} command prints nothing, even though +@file{/tmp/foo/bar} exists and was examined by @code{find}. + + + +@deffn Test -regex expr +@deffnx Test -iregex expr +True if the entire file name matches regular expression @var{expr}. +This is a match on the whole path, not a search. For example, to +match a file named @file{./fubar3}, you can use the regular expression +@samp{.*bar.} or @samp{.*b.*3}, but not @samp{f.*r3}. @xref{Regexps, +, Syntax of Regular Expressions, emacs, The GNU Emacs Manual}, for a +description of the syntax of regular expressions. For @samp{-iregex}, +the match is case-insensitive. There are several varieties of regular +expressions; by default this test uses POSIX basic regular +expressions, but this can be changed with the option +@samp{-regextype}. +@end deffn + +@deffn Option -regextype name +This option controls the variety of regular expression syntax +understood by the @samp{-regex} and @samp{-iregex} tests. This option +is positional; that is, it only affects regular expressions which +occur later in the command line. If this option is not given, GNU +Emacs regular expressions are assumed. Currently-implemented types +are + + +@table @samp +@item emacs +Regular expressions compatible with GNU Emacs; this is also the +default behaviour if this option is not used. +@item posix-awk +Regular expressions compatible with the POSIX awk command (not GNU awk) +@item posix-basic +POSIX Basic Regular Expressions. +@item posix-egrep +Regular expressions compatible with the POSIX egrep command +@item posix-extended +POSIX Extended Regular Expressions +@end table + +@ref{Regular Expressions} for more information on the regular +expression dialects understood by GNU findutils. + + +@end deffn + +@node Fast Full Name Search +@subsection Fast Full Name Search + +To search for files by name without having to actually scan the +directories on the disk (which can be slow), you can use the +@code{locate} program. For each shell pattern you give it, +@code{locate} searches one or more databases of file names and +displays the file names that contain the pattern. @xref{Shell Pattern +Matching}, for details about shell patterns. + +If a pattern is a plain string---it contains no +metacharacters---@code{locate} displays all file names in the database +that contain that string. If a pattern contains +metacharacters, @code{locate} only displays file names that match the +pattern exactly. As a result, patterns that contain metacharacters +should usually begin with a @samp{*}, and will most often end with one +as well. The exceptions are patterns that are intended to explicitly +match the beginning or end of a file name. + +If you only want @code{locate} to match against the last component of +the file names (the ``base name'' of the files) you can use the +@samp{--basename} option. The opposite behaviour is the default, but +can be selected explicitly by using the option @samp{--wholename}. + +The command +@example +locate @var{pattern} +@end example + +is almost equivalent to +@example +find @var{directories} -name @var{pattern} +@end example + +where @var{directories} are the directories for which the file name +databases contain information. The differences are that the +@code{locate} information might be out of date, and that @code{locate} +handles wildcards in the pattern slightly differently than @code{find} +(@pxref{Shell Pattern Matching}). + +The file name databases contain lists of files that were on the system +when the databases were last updated. The system administrator can +choose the file name of the default database, the frequency with which +the databases are updated, and the directories for which they contain +entries. + +Here is how to select which file name databases @code{locate} +searches. The default is system-dependent. At the time this document +was generated, the default was @file{@value{LOCATE_DB}}. + +@table @code +@item --database=@var{path} +@itemx -d @var{path} +Instead of searching the default file name database, search the file +name databases in @var{path}, which is a colon-separated list of +database file names. You can also use the environment variable +@code{LOCATE_PATH} to set the list of database files to search. The +option overrides the environment variable if both are used. +@end table + +GNU @code{locate} can read file name databases generated by the +@code{slocate} package. However, these generally contain a list of +all the files on the system, and so when using this database, +@code{locate} will produce output only for files which are accessible +to you. @xref{Invoking locate}, for a description of the +@samp{--existing} option which is used to do this. + +The @code{updatedb} program can also generate database in a format +compatible with @code{slocate}. @xref{Invoking updatedb}, for a +description of its @samp{--dbformat} and @samp{--output} options. + + +@node Shell Pattern Matching +@subsection Shell Pattern Matching + +@code{find} and @code{locate} can compare file names, or parts of file +names, to shell patterns. A @dfn{shell pattern} is a string that may +contain the following special characters, which are known as +@dfn{wildcards} or @dfn{metacharacters}. + +You must quote patterns that contain metacharacters to prevent the +shell from expanding them itself. Double and single quotes both work; +so does escaping with a backslash. + +@table @code +@item * +Matches any zero or more characters. + +@item ? +Matches any one character. + +@item [@var{string}] +Matches exactly one character that is a member of the string +@var{string}. This is called a @dfn{character class}. As a +shorthand, @var{string} may contain ranges, which consist of two +characters with a dash between them. For example, the class +@samp{[a-z0-9_]} matches a lowercase letter, a number, or an +underscore. You can negate a class by placing a @samp{!} or @samp{^} +immediately after the opening bracket. Thus, @samp{[^A-Z@@]} matches +any character except an uppercase letter or an at sign. + +@item \ +Removes the special meaning of the character that follows it. This +works even in character classes. +@end table + +In the @code{find} tests that do shell pattern matching (@samp{-name}, +@samp{-wholename}, etc.), wildcards in the pattern will match a +@samp{.} at the beginning of a file name. This is also the case for +@code{locate}. Thus, @samp{find -name '*macs'} will match a file +named @file{.emacs}, as will @samp{locate '*macs'}. + +Slash characters have no special significance in the shell pattern +matching that @code{find} and @code{locate} do, unlike in the shell, +in which wildcards do not match them. Therefore, a pattern +@samp{foo*bar} can match a file name @samp{foo3/bar}, and a pattern +@samp{./sr*sc} can match a file name @samp{./src/misc}. + +If you want to locate some files with the @samp{locate} command but +don't need to see the full list you can use the @samp{--limit} option +to see just a small number of results, or the @samp{--count} option to +display only the total number of matches. + +@node Links +@section Links + +There are two ways that files can be linked together. @dfn{Symbolic +links} are a special type of file whose contents are a portion of the +name of another file. @dfn{Hard links} are multiple directory entries +for one file; the file names all have the same index node +(@dfn{inode}) number on the disk. + +@menu +* Symbolic Links:: +* Hard Links:: +@end menu + +@node Symbolic Links +@subsection Symbolic Links + +Symbolic links are names that reference other files. GNU @code{find} +will handle symbolic links in one of two ways; firstly, it can +dereference the links for you - this means that if it comes across a +symbolic link, it examines the file that the link points to, in order +to see if it matches the criteria you have specified. Secondly, it +can check the link itself in case you might be looking for the actual +link. If the file that the symbolic link points to is also within the +directory hierarchy you are searching with the @code{find} command, +you may not see a great deal of difference between these two +alternatives. + +By default, @code{find} examines symbolic links themselves when it +finds them (and, if it later comes across the linked-to file, it will +examine that, too). If you would prefer @code{find} to dereference +the links and examine the file that each link points to, specify the +@samp{-L} option to @code{find}. You can explicitly specify the +default behaviour by using the @samp{-P} option. The @samp{-H} +option is a half-way-between option which ensures that any symbolic +links listed on the command line are dereferenced, but other symbolic +links are not. + +Symbolic links are different to ``hard links'' in the sense that you +need permission to search the directories +in the linked-to file name to +dereference the link. This can mean that even if you specify the +@samp{-L} option, @code{find} may not be able to determine the +properties of the file that the link points to (because you don't have +sufficient permission). In this situation, @code{find} uses the +properties of the link itself. This also occurs if a symbolic link +exists but points to a file that is missing. + +The options controlling the behaviour of @code{find} with respect to +links are as follows :- + +@table @samp +@item -P +@code{find} does not dereference symbolic links at all. This is the +default behaviour. This option must be specified before any of the +file names on the command line. +@item -H +@code{find} does not dereference symbolic links (except in the case of +file names on the command line, which are dereferenced). If a +symbolic link cannot be dereferenced, the information for the symbolic +link itself is used. This option must be specified before any of the +file names on the command line. +@item -L +@code{find} dereferences symbolic links where possible, and where this +is not possible it uses the properties of the symbolic link itself. +This option must be specified before any of the file names on the +command line. Use of this option also implies the same behaviour as +the @samp{-noleaf} option. If you later use the @samp{-H} or +@samp{-P} options, this does not turn off @samp{-noleaf}. + +@item -follow +This option forms part of the ``expression'' and must be specified +after the file names, but it is otherwise equivalent to @samp{-L}. +The @samp{-follow} option affects only those tests which appear after +it on the command line. This option is deprecated. Where possible, +you should use @samp{-L} instead. +@end table + +The following differences in behavior occur when the @samp{-L} option +is used: + +@itemize @bullet +@item +@code{find} follows symbolic links to directories when searching +directory trees. +@item +@samp{-lname} and @samp{-ilname} always return false (unless they +happen to match broken symbolic links). +@item +@samp{-type} reports the types of the files that symbolic links point +to. This means that in combination with @samp{-L}, @samp{-type l} +will be true only for broken symbolic links. To check for symbolic +links when @samp{-L} has been specified, use @samp{-xtype l}. +@item +Implies @samp{-noleaf} (@pxref{Directories}). +@end itemize + +If the @samp{-L} option or the @samp{-H} option is used, +the file names used as arguments to @samp{-newer}, @samp{-anewer}, and +@samp{-cnewer} are dereferenced and the timestamp from the pointed-to +file is used instead (if possible -- otherwise the timestamp from the +symbolic link is used). + +@deffn Test -lname pattern +@deffnx Test -ilname pattern +True if the file is a symbolic link whose contents match shell pattern +@var{pattern}. For @samp{-ilname}, the match is case-insensitive. +@xref{Shell Pattern Matching}, for details about the @var{pattern} +argument. If the @samp{-L} option is in effect, this test will always +return false for symbolic links unless they are broken. So, to list +any symbolic links to @file{sysdep.c} in the current directory and its +subdirectories, you can do: + +@example +find . -lname '*sysdep.c' +@end example +@end deffn + +@node Hard Links +@subsection Hard Links + +Hard links allow more than one name to refer to the same file. To +find all the names which refer to the same file as NAME, use +@samp{-samefile NAME}. If you are not using the @samp{-L} option, you +can confine your search to one filesystem using the @samp{-xdev} +option. This is useful because hard links cannot point outside a +single filesystem, so this can cut down on needless searching. + +If the @samp{-L} option is in effect, and NAME is in fact a symbolic +link, the symbolic link will be dereferenced. Hence you are searching +for other links (hard or symbolic) to the file pointed to by NAME. If +@samp{-L} is in effect but NAME is not itself a symbolic link, other +symbolic links to the file NAME will be matched. + +You can also search for files by inode number. This can occasionally +be useful in diagnosing problems with filesystems for example, because +@code{fsck} tends to print inode numbers. Inode numbers also +occasionally turn up in log messages for some types of software, and +are used to support the @code{ftok()} library function. + +You can learn a file's inode number and the number of links to it by +running @samp{ls -li} or @samp{find -ls}. + +You can search for hard links to inode number NUM by using @samp{-inum +NUM}. If there are any filesystem mount points below the directory +where you are starting the search, use the @samp{-xdev} option unless +you are also using the @samp{-L} option. Using @samp{-xdev} this +saves needless searching, since hard links to a file must be on the +same filesystem. @xref{Filesystems}. + +@deffn Test -samefile NAME +File is a hard link to the same inode as NAME. If the @samp{-L} +option is in effect, symbolic links to the same file as NAME points to +are also matched. +@end deffn + +@deffn Test -inum n +File has inode number @var{n}. The @samp{+} and @samp{-} qualifiers +also work, though these are rarely useful. Much of the time it is +easier to use @samp{-samefile} rather than this option. +@end deffn + +You can also search for files that have a certain number of links, +with @samp{-links}. Directories normally have at least two hard +links; their @file{.} entry is the second one. If they have +subdirectories, each of those also has a hard link called @file{..} to +its parent directory. The @file{.} and @file{..} directory entries +are not normally searched unless they are mentioned on the @code{find} +command line. + +@deffn Test -links n +File has @var{n} hard links. +@end deffn + +@deffn Test -links +n +File has more than @var{n} hard links. +@end deffn + +@deffn Test -links -n +File has fewer than @var{n} hard links. +@end deffn + +@node Time +@section Time + +Each file has three time stamps, which record the last time that +certain operations were performed on the file: + +@enumerate +@item +access (read the file's contents) +@item +change the status (modify the file or its attributes) +@item +modify (change the file's contents) +@end enumerate + +Some systems also provide a timestamp that indicates when a file was +@emph{created}. For example, the UFS2 fileystem under NetBSD-3.1 +records the @emph{birth time} of each file. This information is also +available under other versions of BSD and some versions of Cygwin. +However, even on systems which support file birth time, files may +exist for which this information was not recorded (for example, UFS1 +file systems simply do not contain this information). + +You can search for files whose time stamps are within a certain age +range, or compare them to other time stamps. + +@menu +* Age Ranges:: +* Comparing Timestamps:: +@end menu + +@node Age Ranges +@subsection Age Ranges + +These tests are mainly useful with ranges (@samp{+@var{n}} and +@samp{-@var{n}}). + +@deffn Test -atime n +@deffnx Test -ctime n +@deffnx Test -mtime n +True if the file was last accessed (or its status changed, or it was +modified) @var{n}*24 hours ago. The number of 24-hour periods since +the file's timestamp is always rounded down; therefore 0 means ``less +than 24 hours ago'', 1 means ``between 24 and 48 hours ago'', and so +forth. Fractional values are supported but this only really makes +sense for the case where ranges (@samp{+@var{n}} and @samp{-@var{n}}) +are used. +@end deffn + +@deffn Test -amin n +@deffnx Test -cmin n +@deffnx Test -mmin n +True if the file was last accessed (or its status changed, or it was +modified) @var{n} minutes ago. These tests provide finer granularity +of measurement than @samp{-atime} et al., but rounding is done in a +similar way (again, fractions are supported). For example, to list +files in @file{/u/bill} that were last read from 2 to 6 minutes ago: + +@example +find /u/bill -amin +2 -amin -6 +@end example +@end deffn + +@deffn Option -daystart +Measure times from the beginning of today rather than from 24 hours +ago. So, to list the regular files in your home directory that were +modified yesterday, do + +@example +find ~/ -daystart -type f -mtime 1 +@end example + +The @samp{-daystart} option is unlike most other options in that it +has an effect on the way that other tests are performed. The affected +tests are @samp{-amin}, @samp{-cmin}, @samp{-mmin}, @samp{-atime}, +@samp{-ctime} and @samp{-mtime}. The @samp{-daystart} option only +affects the behaviour of any tests which appear after it on the +command line. +@end deffn + +@node Comparing Timestamps +@subsection Comparing Timestamps + +@deffn Test -newerXY reference +Succeeds if timestamp @samp{X} of the file being considered is newer +than timestamp @samp{Y} of the file @file{reference}. The latters +@samp{X} and @samp{Y} can be any of the following letters: + +@table @samp +@item a +Last-access time of @file{reference} +@item B +Birth time of @file{reference} (when this is not known, the test cannot succeed) +@item c +Last-change time of @file{reference} +@item m +Last-modification time of @file{reference} +@item t +The @file{reference} argument is interpreted as a literal time, rather +than the name of a file. @xref{Date input formats}, for a description +of how the timestamp is understood. Tests of the form @samp{-newerXt} +are valid but tests of the form @samp{-newertY} are not. +@end table + +For example the test @code{-newerac /tmp/foo} succeeds for all files +which have been accessed more recently than @file{/tmp/foo} was +changed. Here @samp{X} is @samp{a} and @samp{Y} is @samp{c}. + +Not all files have a known birth time. If @samp{Y} is @samp{b} and +the birth time of @file{reference} is not available, @code{find} exits +with an explanatory error message. If @samp{X} is @samp{b} and we do +not know the birth time the file currently being considered, the test +simply fails (that is, it behaves like @code{-false} does). + +Some operating systems (for example, most implementations of Unix) do +not support file birth times. Some others, for example NetBSD-3.1, +do. Even on operating systems which support file birth times, the +information may not be available for specific files. For example, +under NetBSD, file birth times are supported on UFS2 file systems, but +not UFS1 file systems. + +@end deffn + + + +There are two ways to list files in @file{/usr} modified after +February 1 of the current year. One uses @samp{-newermt}: + +@example +find /usr -newermt "Feb 1" +@end example + +The other way of doing this works on the versions of find before 4.3.3: + +@c Idea from Rick Sladkey. +@example +touch -t 02010000 /tmp/stamp$$ +find /usr -newer /tmp/stamp$$ +rm -f /tmp/stamp$$ +@end example + +@deffn Test -anewer file +@deffnx Test -cnewer file +@deffnx Test -newer file +True if the file was last accessed (or its status changed, or it was +modified) more recently than @var{file} was modified. These tests are +affected by @samp{-follow} only if @samp{-follow} comes before them on +the command line. @xref{Symbolic Links}, for more information on +@samp{-follow}. As an example, to list any files modified since +@file{/bin/sh} was last modified: + +@example +find . -newer /bin/sh +@end example +@end deffn + +@deffn Test -used n +True if the file was last accessed @var{n} days after its status was +last changed. Useful for finding files that are not being used, and +could perhaps be archived or removed to save disk space. +@end deffn + +@node Size +@section Size + +@deffn Test -size n@r{[}bckwMG@r{]} +True if the file uses @var{n} units of space, rounding up. The units +are 512-byte blocks by default, but they can be changed by adding a +one-character suffix to @var{n}: + +@table @code +@item b +512-byte blocks (never 1024) +@item c +bytes +@item k +kilobytes (1024 bytes) +@item w +2-byte words +@item M +Megabytes (units of 1048576 bytes) +@item G +Gigabytes (units of 1073741824 bytes) +@end table + +The `b' suffix always considers blocks to be 512 bytes. This is not +affected by the setting (or non-setting) of the POSIXLY_CORRECT +environment variable. This behaviour is different to the behaviour of +the @samp{-ls} action). If you want to use 1024-byte units, use the +`k' suffix instead. + +The number can be prefixed with a `+' or a `-'. A plus sign indicates +that the test should succeed if the file uses at least @var{n} units +of storage (a common use of this test) and a minus sign +indicates that the test should succeed if the file uses less than +@var{n} units of storage. There is no `=' prefix, because that's the +default anyway. + +The size does not count indirect blocks, but it does count blocks in +sparse files that are not actually allocated. In other words, it's +consistent with the result you get for @samp{ls -l} or @samp{wc -c}. +This handling of sparse files differs from the output of the @samp{%k} +and @samp{%b} format specifiers for the @samp{-printf} predicate. + +@end deffn + +@deffn Test -empty +True if the file is empty and is either a regular file or a directory. +This might help determine good candidates for deletion. This test is +useful with @samp{-depth} (@pxref{Directories}) and @samp{-delete} +(@pxref{Single File}). +@end deffn + +@node Type +@section Type + +@deffn Test -type c +True if the file is of type @var{c}: + +@table @code +@item b +block (buffered) special +@item c +character (unbuffered) special +@item d +directory +@item p +named pipe (FIFO) +@item f +regular file +@item l +symbolic link; if @samp{-L} is in effect, this is true only for broken +symbolic links. If you want to search for symbolic links when +@samp{-L} is in effect, use @samp{-xtype} instead of @samp{-type}. +@item s +socket +@item D +door (Solaris) +@end table +@end deffn + +@deffn Test -xtype c +This test behaves the same as @samp{-type} unless the file is a +symbolic link. If the file is a symbolic link, the result is as +follows (in the table below, @samp{X} should be understood to +represent any letter except @samp{l}): + +@table @samp +@item @samp{-P -xtype l} +True if the symbolic link is broken +@item @samp{-P -xtype X} +True if the (ultimate) target file is of type @samp{X}. +@item @samp{-L -xtype l} +Always true +@item @samp{-L -xtype X} +False unless the symbolic link is broken +@end table + +In other words, for symbolic links, @samp{-xtype} checks the type of +the file that @samp{-type} does not check. + +The @samp{-H} option also affects the behaviour of @samp{-xtype}. +When @samp{-H} is in effect, @samp{-xtype} behaves as if @samp{-L} had +been specified when examining files listed on the command line, and as +if @samp{-P} had been specified otherwise. If neither @samp{-H} nor +@samp{-L} was specified, @samp{-xtype} behaves as if @samp{-P} had +been specified. + +@xref{Symbolic Links}, for more information on @samp{-follow} and +@samp{-L}. +@end deffn + +@node Owner +@section Owner + +@deffn Test -user uname +@deffnx Test -group gname +True if the file is owned by user @var{uname} (belongs to group +@var{gname}). A numeric ID is allowed. +@end deffn + +@deffn Test -uid n +@deffnx Test -gid n +True if the file's numeric user ID (group ID) is @var{n}. These tests +support ranges (@samp{+@var{n}} and @samp{-@var{n}}), unlike +@samp{-user} and @samp{-group}. +@end deffn + +@deffn Test -nouser +@deffnx Test -nogroup +True if no user corresponds to the file's numeric user ID (no group +corresponds to the numeric group ID). These cases usually mean that +the files belonged to users who have since been removed from the +system. You probably should change the ownership of such files to an +existing user or group, using the @code{chown} or @code{chgrp} +program. +@end deffn + +@node Mode Bits +@section File Mode Bits + +@xref{File Permissions}, for information on how file mode bits are +structured and how to specify them. + +Four tests determine what users can do with files. These are +@samp{-readable}, @samp{-writable}, @samp{-executable} and +@samp{-perm}. The first three tests ask the operating system if the +current user can perform the relevant operation on a file, while +@samp{-perm} just examines the file's mode. The file mode may give +a misleading impression of what the user can actually do, because the +file may have an access control list, or exist on a read-only +filesystem, for example. Of these four tests though, only +@samp{-perm} is specified by the POSIX standard. + +The @samp{-readable}, @samp{-writable} and @samp{-executable} tests +are implemented via the @code{access} system call. This is +implemented within the operating system itself. If the file being +considered is on an NFS filesystem, the remote system may allow or +forbid read or write operations for reasons of which the NFS client +cannot take account. This includes user-ID mapping, either in the +general sense or the more restricted sense in which remote superusers +are treated by the NFS server as if they are the local user +@samp{nobody} on the NFS server. + +None of the tests in this section should be used to verify that a user +is authorised to perform any operation (on the file being tested or +any other file) because of the possibility of a race condition. That +is, the situation may change between the test and an action being +taken on the basis of the result of that test. + + +@deffn Test -readable +True if the file can be read by the invoking user. +@end deffn + +@deffn Test -writable +True if the file can be written by the invoking user. This is an +in-principle check, and other things may prevent a successful write +operation; for example, the filesystem might be full. +@end deffn + +@deffn Test -executable +True if the file can be executed/searched by the invoking user. +@end deffn + +@deffn Test -perm pmode + +True if the file's mode bits match @var{pmode}, which can be +either a symbolic or numeric @var{mode} (@pxref{File Permissions}) +optionally prefixed by @samp{-} or @samp{/}. + +A @var{pmode} that starts with neither @samp{-} nor @samp{/} matches +if @var{mode} exactly matches the file mode bits. + +A @var{pmode} that starts with @samp{+} but which is not valid (for +example @samp{+a+x}) is an error if the POSIXLY_CORRECT environment +variable it set. Otherwise this is treated as if the initial +@samp{+} were a @samp{/}, for backward compatibility. + +A @var{pmode} that starts with @samp{-} matches if +@emph{all} the file mode bits set in @var{mode} are set for the file; +bits not set in @var{mode} are ignored. + +A @var{pmode} that starts with @samp{/} matches if +@emph{any} of the file mode bits set in @var{mode} are set for the file; +bits not set in @var{mode} are ignored. +This is a GNU extension. + +If you don't use the @samp{/} or @samp{-} form with a symbolic mode +string, you may have to specify a rather complex mode string. For +example @samp{-perm g=w} will only match files that have mode 0020 +(that is, ones for which group write permission is the only file mode bit +set). It is more likely that you will want to use the @samp{/} or +@samp{-} forms, for example @samp{-perm -g=w}, which matches any file +with group write permission. + + +@table @samp +@item -perm 664 +Match files that have read and write permission for their owner, +and group, but that the rest of the world can read but not write to. +Do not match files that meet these criteria but have other file mode +bits set (for example if someone can execute/search the file). + +@item -perm -664 +Match files that have read and write permission for their owner, +and group, but that the rest of the world can read but not write to, +without regard to the presence of any extra file mode bits (for +example the executable bit). This matches a file with mode +0777, for example. + +@item -perm /222 +Match files that are writable by somebody (their owner, or +their group, or anybody else). + +@item -perm /022 +Match files that are writable by either their owner or their +group. The files don't have to be writable by both the owner and +group to be matched; either will do. + +@item -perm /g+w,o+w +As above. + +@item -perm /g=w,o=w +As above. + +@item -perm -022 +Match files that are writable by both their owner and their +group. + +@item -perm -444 -perm /222 ! -perm /111 +Match files that are readable for everybody, have at least one +write bit set (i.e., somebody can write to them), but that cannot be +executed/searched by anybody. Note that in some shells the @samp{!} must be +escaped;. + +@item -perm -a+r -perm /a+w ! -perm /a+x +As above. + + +@item -perm -g+w,o+w +As above. +@end table + +@quotation Warning +If you specify @samp{-perm /000} or @samp{-perm /mode} where the +symbolic mode @samp{mode} has no bits set, the test matches all files. +Versions of GNU @code{find} prior to 4.3.3 matched no files in this +situation. +@end quotation + +@end deffn + +@node Contents +@section Contents + +To search for files based on their contents, you can use the +@code{grep} program. For example, to find out which C source files in +the current directory contain the string @samp{thing}, you can do: + +@example +grep -l thing *.[ch] +@end example + +If you also want to search for the string in files in subdirectories, +you can combine @code{grep} with @code{find} and @code{xargs}, like +this: + +@example +find . -name '*.[ch]' | xargs grep -l thing +@end example + +The @samp{-l} option causes @code{grep} to print only the names of +files that contain the string, rather than the lines that contain it. +The string argument (@samp{thing}) is actually a regular expression, +so it can contain metacharacters. This method can be refined a little +by using the @samp{-r} option to make @code{xargs} not run @code{grep} +if @code{find} produces no output, and using the @code{find} action +@samp{-print0} and the @code{xargs} option @samp{-0} to avoid +misinterpreting files whose names contain spaces: + +@example +find . -name '*.[ch]' -print0 | xargs -r -0 grep -l thing +@end example + +For a fuller treatment of finding files whose contents match a +pattern, see the manual page for @code{grep}. + +@node Directories +@section Directories + +Here is how to control which directories @code{find} searches, and how +it searches them. These two options allow you to process a horizontal +slice of a directory tree. + +@deffn Option -maxdepth levels +Descend at most @var{levels} (a non-negative integer) levels of +directories below the command line arguments. @samp{-maxdepth 0} +means only apply the tests and actions to the command line arguments. +@end deffn + +@deffn Option -mindepth levels +Do not apply any tests or actions at levels less than @var{levels} (a +non-negative integer). @samp{-mindepth 1} means process all files +except the command line arguments. +@end deffn + +@deffn Option -depth +Process each directory's contents before the directory itself. Doing +this is a good idea when producing lists of files to archive with +@code{cpio} or @code{tar}. If a directory does not have write +permission for its owner, its contents can still be restored from the +archive since the directory's permissions are restored after its +contents. +@end deffn + +@deffn Option -d +This is a deprecated synonym for @samp{-depth}, for compatibility with +Mac OS X, FreeBSD and OpenBSD. The @samp{-depth} option is a POSIX +feature, so it is better to use that. +@end deffn + +@deffn Action -prune +If the file is a directory, do not descend into it. The result is +true. For example, to skip the directory @file{src/emacs} and all +files and directories under it, and print the names of the other files +found: + +@example +find . -wholename './src/emacs' -prune -o -print +@end example + +The above command will not print @file{./src/emacs} among its list of +results. This however is not due to the effect of the @samp{-prune} +action (which only prevents further descent, it doesn't make sure we +ignore that item). Instead, this effect is due to the use of +@samp{-o}. Since the left hand side of the ``or'' condition has +succeeded for @file{./src/emacs}, it is not necessary to evaluate the +right-hand-side (@samp{-print}) at all for this particular file. If +you wanted to print that directory name you could use either an extra +@samp{-print} action: + +@example +find . -wholename './src/emacs' -prune -print -o -print +@end example + +or use the comma operator: + +@example +find . -wholename './src/emacs' -prune , -print +@end example + +If the @samp{-depth} option is in effect, the subdirectories will have +already been visited in any case. Hence @samp{-prune} has no effect +and returns false. + +Because @samp{-delete} implies @samp{-depth}, using @samp{-prune} in +combination with @samp{-delete} may well result in the deletion of +more files than you intended. +@end deffn + + +@deffn Action -quit +Exit immediately (with return value zero if no errors have occurred). +This is different to @samp{-prune} because @samp{-prune} only applies +to the contents of pruned directories, whilt @samp{-quit} simply makes +@code{find} stop immediately. No child processes will be left +running, but no more files specified on the command line will be +processed. For example, @code{find /tmp/foo /tmp/bar -print -quit} +will print only @samp{/tmp/foo}. Any command lines which have been +built by @samp{-exec ... \+} or @samp{-execdir ... \+} are invoked +before the program is exited. +@end deffn + +@deffn Option -noleaf +Do not optimize by assuming that directories contain 2 fewer +subdirectories than their hard link count. This option is needed when +searching filesystems that do not follow the Unix directory-link +convention, such as CD-ROM or MS-DOS filesystems or AFS volume mount +points. Each directory on a normal Unix filesystem has at least 2 +hard links: its name and its @file{.} entry. Additionally, its +subdirectories (if any) each have a @file{..} entry linked to that +directory. When @code{find} is examining a directory, after it has +statted 2 fewer subdirectories than the directory's link count, it +knows that the rest of the entries in the directory are +non-directories (@dfn{leaf} files in the directory tree). If only the +files' names need to be examined, there is no need to stat them; this +gives a significant increase in search speed. +@end deffn + +@deffn Option -ignore_readdir_race +If a file disappears after its name has been read from a directory but +before @code{find} gets around to examining the file with @code{stat}, +don't issue an error message. If you don't specify this option, an +error message will be issued. This option can be useful in system +scripts (cron scripts, for example) that examine areas of the +filesystem that change frequently (mail queues, temporary directories, +and so forth), because this scenario is common for those sorts of +directories. Completely silencing error messages from @code{find} is +undesirable, so this option neatly solves the problem. There is no +way to search one part of the filesystem with this option on and part +of it with this option off, though. When this option is turned on and +find discovers that one of the start-point files specified on the +command line does not exist, no error message will be issued. + +@end deffn + +@deffn Option -noignore_readdir_race +This option reverses the effect of the @samp{-ignore_readdir_race} +option. +@end deffn + + +@node Filesystems +@section Filesystems + +A @dfn{filesystem} is a section of a disk, either on the local host or +mounted from a remote host over a network. Searching network +filesystems can be slow, so it is common to make @code{find} avoid +them. + +There are two ways to avoid searching certain filesystems. One way is +to tell @code{find} to only search one filesystem: + +@deffn Option -xdev +@deffnx Option -mount +Don't descend directories on other filesystems. These options are +synonyms. +@end deffn + +The other way is to check the type of filesystem each file is on, and +not descend directories that are on undesirable filesystem types: + +@deffn Test -fstype type +True if the file is on a filesystem of type @var{type}. The valid +filesystem types vary among different versions of Unix; an incomplete +list of filesystem types that are accepted on some version of Unix or +another is: +@example +ext2 ext3 proc sysfs ufs 4.2 4.3 nfs tmp mfs S51K S52K +@end example +You can use @samp{-printf} with the @samp{%F} directive to see the +types of your filesystems. The @samp{%D} directive shows the device +number. @xref{Print File Information}. @samp{-fstype} is usually +used with @samp{-prune} to avoid searching remote filesystems +(@pxref{Directories}). +@end deffn + +@node Combining Primaries With Operators +@section Combining Primaries With Operators + +Operators build a complex expression from tests and actions. +The operators are, in order of decreasing precedence: + +@table @code +@item @asis{( @var{expr} )} +@findex () +Force precedence. True if @var{expr} is true. + +@item @asis{! @var{expr}} +@itemx @asis{-not @var{expr}} +@findex ! +@findex -not +True if @var{expr} is false. In some shells, it is necessary to +protect the @samp{!} from shell interpretation by quoting it. + +@item @asis{@var{expr1 expr2}} +@itemx @asis{@var{expr1} -a @var{expr2}} +@itemx @asis{@var{expr1} -and @var{expr2}} +@findex -a +@findex -and +And; @var{expr2} is not evaluated if @var{expr1} is false. + +@item @asis{@var{expr1} -o @var{expr2}} +@itemx @asis{@var{expr1} -or @var{expr2}} +@findex -o +@findex -or +Or; @var{expr2} is not evaluated if @var{expr1} is true. + +@item @asis{@var{expr1} , @var{expr2}} +@findex , +List; both @var{expr1} and @var{expr2} are always evaluated. True if +@var{expr2} is true. The value of @var{expr1} is discarded. This +operator lets you do multiple independent operations on one traversal, +without depending on whether other operations succeeded. The two +operations @var{expr1} and @var{expr2} are not always fully +independent, since @var{expr1} might have side effects like touching +or deleting files, or it might use @samp{-prune} which would also +affect @var{expr2}. +@end table + +@code{find} searches the directory tree rooted at each file name by +evaluating the expression from left to right, according to the rules +of precedence, until the outcome is known (the left hand side is false +for @samp{-and}, true for @samp{-or}), at which point @code{find} +moves on to the next file name. + +There are two other tests that can be useful in complex expressions: + +@deffn Test -true +Always true. +@end deffn + +@deffn Test -false +Always false. +@end deffn + +@node Actions +@chapter Actions + +There are several ways you can print information about the files that +match the criteria you gave in the @code{find} expression. You can +print the information either to the standard output or to a file that +you name. You can also execute commands that have the file names as +arguments. You can use those commands as further filters to select +files. + +@menu +* Print File Name:: +* Print File Information:: +* Run Commands:: +* Delete Files:: +* Adding Tests:: +@end menu + +@node Print File Name +@section Print File Name + +@deffn Action -print +True; print the entire file name on the standard output, followed by a +newline. If there is the faintest possibility that one of the files +for which you are searching might contain a newline, you should use +@samp{-print0} instead. +@end deffn + +@deffn Action -fprint file +True; print the entire file name into file @var{file}, followed by a +newline. If @var{file} does not exist when @code{find} is run, it is +created; if it does exist, it is truncated to 0 bytes. The named +output file is always created, even if no output is sent to it. The +file names @file{/dev/stdout} and @file{/dev/stderr} are handled +specially; they refer to the standard output and standard error +output, respectively. + +If there is the faintest possibility that one of the files for which +you are searching might contain a newline, you should use +@samp{-fprint0} instead. +@end deffn + + +@c @deffn Option -show-control-chars how +@c This option affects how some of @code{find}'s actions treat +@c unprintable characters in file names. If @samp{how} is +@c @samp{literal}, any subsequent actions (i.e., actions further on in the +@c command line) print file names as-is. +@c +@c If this option is not specified, it currently defaults to @samp{safe}. +@c If @samp{how} is @samp{safe}, C-like backslash escapes are used to +@c indicate the non-printable characters for @samp{-ls} and @samp{-fls}. +@c On the other hand, @samp{-print}, @samp{-fprint}, @samp{-fprintf} and +@c @code{-printf} all quote unprintable characters if the data is going +@c to a tty, and otherwise the data is emitted literally. +@c +@c @table @code +@c @item -ls +@c Escaped if @samp{how} is @samp{safe} +@c @item -fls +@c Escaped if @samp{how} is @samp{safe} +@c @item -print +@c Always quoted if stdout is a tty, +@c @samp{-show-control-chars} is ignored +@c @item -print0 +@c Always literal, never escaped +@c @item -fprint +@c Always quoted if the destination is a tty; +@c @samp{-show-control-chars} is ignored +@c @item -fprint0 +@c Always literal, never escaped +@c @item -fprintf +@c If the destination is a tty, the @samp{%f}, +@c @samp{%F}, @samp{%h}, @samp{%l}, @samp{%p}, +@c and @samp{%P} directives produce quoted +@c strings if stdout is a tty and are treated +@c literally otherwise. +@c @item -printf +@c As for @code{-fprintf}. +@c @end table +@c @end deffn + + +@node Print File Information +@section Print File Information + +@deffn Action -ls +True; list the current file in @samp{ls -dils} format on the standard +output. The output looks like this: + +@smallexample +204744 17 -rw-r--r-- 1 djm staff 17337 Nov 2 1992 ./lwall-quotes +@end smallexample + +The fields are: + +@enumerate +@item +The inode number of the file. @xref{Hard Links}, for how to find +files based on their inode number. + +@item +the number of blocks in the file. The block counts are of 1K blocks, +unless the environment variable @code{POSIXLY_CORRECT} is set, in +which case 512-byte blocks are used. @xref{Size}, for how to find +files based on their size. + +@item +The file's type and file mode bits. The type is shown as a dash for a +regular file; for other file types, a letter like for @samp{-type} is +used (@pxref{Type}). The file mode bits are read, write, and execute/search for +the file's owner, its group, and other users, respectively; a dash +means the permission is not granted. @xref{File Permissions}, for +more details about file permissions. @xref{Mode Bits}, for how to +find files based on their file mode bits. + +@item +The number of hard links to the file. + +@item +The user who owns the file. + +@item +The file's group. + +@item +The file's size in bytes. + +@item +The date the file was last modified. + +@item +The file's name. @samp{-ls} quotes non-printable characters in the +file names using C-like backslash escapes. This may change soon, as +the treatment of unprintable characters is harmonised for @samp{-ls}, +@samp{-fls}, @samp{-print}, @samp{-fprint}, @samp{-printf} and +@samp{-fprintf}. +@end enumerate +@end deffn + +@deffn Action -fls file +True; like @samp{-ls} but write to @var{file} like @samp{-fprint} +(@pxref{Print File Name}). The named output file is always created, +even if no output is sent to it. +@end deffn + +@deffn Action -printf format +True; print @var{format} on the standard output, interpreting @samp{\} +escapes and @samp{%} directives. Field widths and precisions can be +specified as with the @code{printf} C function. Format flags (like +@samp{#} for example) may not work as you expect because many of the +fields, even numeric ones, are printed with %s. Numeric flags which +are affected in this way include G, U, b, D, k and n. This difference +in behaviour means though that the format flag @samp{-} will work; it +forces left-alignment of the field. Unlike @samp{-print}, +@samp{-printf} does not add a newline at the end of the string. If +you want a newline at the end of the string, add a @samp{\n}. +@end deffn + +@deffn Action -fprintf file format +True; like @samp{-printf} but write to @var{file} like @samp{-fprint} +(@pxref{Print File Name}). The output file is always created, even if +no output is ever sent to it. +@end deffn + +@menu +* Escapes:: +* Format Directives:: +* Time Formats:: +@end menu + +@node Escapes +@subsection Escapes + +The escapes that @samp{-printf} and @samp{-fprintf} recognise are: + +@table @code +@item \a +Alarm bell. +@item \b +Backspace. +@item \c +Stop printing from this format immediately and flush the output. +@item \f +Form feed. +@item \n +Newline. +@item \r +Carriage return. +@item \t +Horizontal tab. +@item \v +Vertical tab. +@item \\ +A literal backslash (@samp{\}). +@item \0 +ASCII NUL. +@item \NNN +The character whose ASCII code is NNN (octal). +@end table + +A @samp{\} character followed by any other character is treated as an +ordinary character, so they both are printed, and a warning message is +printed to the standard error output (because it was probably a typo). + +@node Format Directives +@subsection Format Directives + +@samp{-printf} and @samp{-fprintf} support the following format +directives to print information about the file being processed. The C +@code{printf} function, field width and precision specifiers are +supported, as applied to string (%s) types. That is, you can specify +"minimum field width"."maximum field width" for each directive. +Format flags (like @samp{#} for example) may not work as you expect +because many of the fields, even numeric ones, are printed with %s. +The format flag @samp{-} does work; it forces left-alignment of the +field. + +@samp{%%} is a literal percent sign. A @samp{%} character followed by +an unrecognised character (i.e., not a known directive or @code{printf} +field width and precision specifier), is discarded (but the +unrecognised character is printed), and a warning message is printed +to the standard error output (because it was probably a typo). Don't +rely on this behaviour, because other directives may be added in the +future. + +A @samp{%} at the end of the format argument causes undefined +behaviour since there is no following character. In some locales, it +may hide your door keys, while in others it may remove the final page +from the novel you are reading. + +@menu +* Name Directives:: +* Ownership Directives:: +* Size Directives:: +* Location Directives:: +* Time Directives:: +* Formatting Flags:: +@end menu + +@node Name Directives +@subsubsection Name Directives + +@table @code +@item %p +@c supports %-X.Yp +File's name (not the absolute path name, but the name of the file as +it was encountered by @code{find} - that is, as a relative path from +one of the starting points). +@item %f +File's name with any leading directories removed (only the last +element). +@c supports %-X.Yf +@item %h +Leading directories of file's name (all but the last element and the +slash before it). If the file's name contains no slashes (for example +because it was named on the command line and is in the current working +directory), then ``%h'' expands to ``.''. This prevents ``%h/%f'' +expanding to ``/foo'', which would be surprising and probably not +desirable. +@c supports %-X.Yh +@item %P +File's name with the name of the command line argument under which +it was found removed from the beginning. +@c supports %-X.YP +@item %H +Command line argument under which file was found. +@c supports %-X.YH +@end table + +@node Ownership Directives +@subsubsection Ownership Directives + +@table @code +@item %g +@c supports %-X.Yg +File's group name, or numeric group ID if the group has no name. +@item %G +@c supports %-X.Yg +@c TODO: Needs to support # flag and 0 flag +File's numeric group ID. +@item %u +@c supports %-X.Yu +File's user name, or numeric user ID if the user has no name. +@item %U +@c supports %-X.Yu +@c TODO: Needs to support # flag +File's numeric user ID. +@item %m +@c full support, including # and 0. +File's mode bits (in octal). If you always want to have a leading +zero on the number, use the '#' format flag, for example '%#m'. + +The file mode bit numbers used are the traditional Unix +numbers, which will be as expected on most systems, but if your +system's file mode bit layout differs from the traditional Unix +semantics, you will see a difference between the mode as printed by +@samp{%m} and the mode as it appears in @code{struct stat}. + +@item %M +File's type and mode bits (in symbolic form, as for @code{ls}). This +directive is supported in findutils 4.2.5 and later. +@end table + +@node Size Directives +@subsubsection Size Directives + +@table @code +@item %k +The amount of disk space used for this file in 1K blocks. Since disk +space is allocated in multiples of the filesystem block size this is +usually greater than %s/1024, but it can also be smaller if the file +is a sparse file (that is, it has ``holes''). +@item %b +The amount of disk space used for this file in 512-byte blocks. Since +disk space is allocated in multiples of the filesystem block size this +is usually greater than %s/512, but it can also be smaller if the +file is a sparse file (that is, it has ``holes''). +@item %s +File's size in bytes. +@item %S +File's sparseness. This is calculated as @code{(BLOCKSIZE*st_blocks / +st_size)}. The exact value you will get for an ordinary file of a +certain length is system-dependent. However, normally sparse files +will have values less than 1.0, and files which use indirect blocks +and have few holes may have a value which is greater than 1.0. The +value used for BLOCKSIZE is system-dependent, but is usually 512 +bytes. If the file size is zero, the value printed is undefined. On +systems which lack support for st_blocks, a file's sparseness is +assumed to be 1.0. +@end table + +@node Location Directives +@subsubsection Location Directives + +@table @code +@item %d +File's depth in the directory tree (depth below a file named on the +command line, not depth below the root directory). Files named on the +command line have a depth of 0. Subdirectories immediately below them +have a depth of 1, and so on. +@item %D +The device number on which the file exists (the @code{st_dev} field of +@code{struct stat}), in decimal. +@item %F +Type of the filesystem the file is on; this value can be used for +@samp{-fstype} (@pxref{Directories}). +@item %l +Object of symbolic link (empty string if file is not a symbolic link). +@item %i +File's inode number (in decimal). +@item %n +Number of hard links to file. +@item %y +Type of the file as used with @samp{-type}. If the file is a symbolic +link, @samp{l} will be printed. +@item %Y +Type of the file as used with @samp{-type}. If the file is a symbolic +link, it is dereferenced. If the file is a broken symbolic link, +@samp{N} is printed. + +@end table + +@node Time Directives +@subsubsection Time Directives + +Some of these directives use the C @code{ctime} function. Its output +depends on the current locale, but it typically looks like + +@example +Wed Nov 2 00:42:36 1994 +@end example + +@table @code +@item %a +File's last access time in the format returned by the C @code{ctime} +function. +@item %A@var{k} +File's last access time in the format specified by @var{k} +(@pxref{Time Formats}). +@item %c +File's last status change time in the format returned by the C +@code{ctime} function. +@item %C@var{k} +File's last status change time in the format specified by @var{k} +(@pxref{Time Formats}). +@item %t +File's last modification time in the format returned by the C +@code{ctime} function. +@item %T@var{k} +File's last modification time in the format specified by @var{k} +(@pxref{Time Formats}). +@end table + +@node Time Formats +@subsection Time Formats + +Below are the formats for the directives @samp{%A}, @samp{%C}, and +@samp{%T}, which print the file's timestamps. Some of these formats +might not be available on all systems, due to differences in the C +@code{strftime} function between systems. + +@menu +* Time Components:: +* Date Components:: +* Combined Time Formats:: +@end menu + +@node Time Components +@subsubsection Time Components + +The following format directives print single components of the time. + +@table @code +@item H +hour (00..23) +@item I +hour (01..12) +@item k +hour ( 0..23) +@item l +hour ( 1..12) +@item p +locale's AM or PM +@item Z +time zone (e.g., EDT), or nothing if no time zone is determinable +@item M +minute (00..59) +@item S +second (00..61). There is a fractional part. +@item @@ +seconds since Jan. 1, 1970, 00:00 GMT, with fractional part. +@end table + +The fractional part of the seconds field is of indeterminate length +and precision. That is, the length of the fractional part of the +seconds field will in general vary between findutils releases and +between systems. This means that it is unwise to assume that field +has any specific length. The length of this field is not usually a +guide to the precision of timestamps in the underlying file system. + + + +@node Date Components +@subsubsection Date Components + +The following format directives print single components of the date. + +@table @code +@item a +locale's abbreviated weekday name (Sun..Sat) +@item A +locale's full weekday name, variable length (Sunday..Saturday) +@item b +@itemx h +locale's abbreviated month name (Jan..Dec) +@item B +locale's full month name, variable length (January..December) +@item m +month (01..12) +@item d +day of month (01..31) +@item w +day of week (0..6) +@item j +day of year (001..366) +@item U +week number of year with Sunday as first day of week (00..53) +@item W +week number of year with Monday as first day of week (00..53) +@item Y +year (1970@dots{}) +@item y +last two digits of year (00..99) +@end table + +@node Combined Time Formats +@subsubsection Combined Time Formats + +The following format directives print combinations of time and date +components. + +@table @code +@item r +time, 12-hour (hh:mm:ss [AP]M) +@item T +time, 24-hour (hh:mm:ss) +@item X +locale's time representation (H:M:S) +@item c +locale's date and time in ctime format (Sat Nov 04 12:02:33 EST +1989). This format does not include any fractional part in the +seconds field. +@item D +date (mm/dd/yy) +@item x +locale's date representation (mm/dd/yy) +@item + +Date and time, separated by '+', for example +`2004-04-28+22:22:05.0000000000'. +The time is given in the current timezone (which may be affected by +setting the TZ environment variable). This is a GNU extension. The +seconds field includes a fractional part. +@end table + +@node Formatting Flags +@subsubsection Formatting Flags + +The @samp{%m} and @samp{%d} directives support the @samp{#}, @samp{0} +and @samp{+} flags, but the other directives do not, even if they +print numbers. Numeric directives that do not support these flags +include + +@samp{G}, +@samp{U}, +@samp{b}, +@samp{D}, +@samp{k} and +@samp{n}. + +All fields support the format flag @samp{-}, which makes fields +left-aligned. That is, if the field width is greater than the actual +contents of the field, the requisite number of spaces are printed +after the field content instead of before it. + +@node Run Commands +@section Run Commands + +You can use the list of file names created by @code{find} or +@code{locate} as arguments to other commands. In this way you can +perform arbitrary actions on the files. + +@menu +* Single File:: +* Multiple Files:: +* Querying:: +@end menu + +@node Single File +@subsection Single File + +Here is how to run a command on one file at a time. + +@deffn Action -execdir command ; +Execute @var{command}; true if zero status is returned. @code{find} +takes all arguments after @samp{-exec} to be part of the command until +an argument consisting of @samp{;} is reached. It replaces the string +@samp{@{@}} by the current file name being processed everywhere it +occurs in the command. Both of these constructions need to be escaped +(with a @samp{\}) or quoted to protect them from expansion by the +shell. The command is executed in the directory in which @code{find} +was run. + +For example, to compare each C header file in or below the current +directory with the file @file{/tmp/master}: + +@example +find . -name '*.h' -execdir diff -u '@{@}' /tmp/master ';' +@end example +@end deffn + +If you use @samp{-execdir}, you must ensure that the @samp{$PATH} +variable contains only absolute directory names. Having an empty +element in @samp{$PATH} or explicitly including @samp{.} (or any other +non-absolute name) is insecure. GNU find will refuse to run if you +use @samp{-execdir} and it thinks your @samp{$PATH} setting is +insecure. For example: + +@table @samp +@item /bin:/usr/bin: +Insecure; empty path element (at the end) +@item :/bin:/usr/bin:/usr/local/bin +Insecure; empty path element (at the start) +@item /bin:/usr/bin::/usr/local/bin +Insecure; empty path element (two colons in a row) +@item /bin:/usr/bin:.:/usr/local/bin +Insecure; @samp{.} is a path element (@file{.} is not an absolute file name) +@item /bin:/usr/bin:sbin:/usr/local/bin +Insecure; @samp{sbin} is not an absolute file name +@item /bin:/usr/bin:/sbin:/usr/local/bin +Secure (if you control the contents of those directories and any access to them) +@end table + +Another similar option, @samp{-exec} is supported, but is less secure. +@xref{Security Considerations}, for a discussion of the security +problems surrounding @samp{-exec}. + + +@deffn Action -exec command ; +This insecure variant of the @samp{-execdir} action is specified by +POSIX. The main difference is that the command is executed in the +directory from which @code{find} was invoked, meaning that @samp{@{@}} +is expanded to a relative path starting with the name of one of the +starting directories, rather than just the basename of the matched +file. + +While some implementations of @code{find} replace the @samp{@{@}} only +where it appears on its own in an argument, GNU @code{find} replaces +@samp{@{@}} wherever it appears. +@end deffn + + +@node Multiple Files +@subsection Multiple Files + +Sometimes you need to process files one at a time. But usually this +is not necessary, and, it is faster to run a command on as many files +as possible at a time, rather than once per file. Doing this saves on +the time it takes to start up the command each time. + +The @samp{-execdir} and @samp{-exec} actions have variants that build +command lines containing as many matched files as possible. + +@deffn Action -execdir command @{@} + +This works as for @samp{-execdir command ;}, except that the +@samp{@{@}} at the end of the command is expanded to a list of names +of matching files. This expansion is done in such a way as to avoid +exceeding the maximum command line length available on the system. +Only one @samp{@{@}} is allowed within the command, and it must appear +at the end, immediately before the @samp{+}. A @samp{+} appearing in +any position other than immediately after @samp{@{@}} is not +considered to be special (that is, it does not terminate the command). +@end deffn + + +@deffn Action -exec command @{@} + +This insecure variant of the @samp{-execdir} action is specified by +POSIX. The main difference is that the command is executed in the +directory from which @code{find} was invoked, meaning that @samp{@{@}} +is expanded to a relative path starting with the name of one of the +starting directories, rather than just the basename of the matched +file. +@end deffn + +Before @code{find} exits, any partially-built command lines are +executed. This happens even if the exit was caused by the +@samp{-quit} action. However, some types of error (for example not +being able to invoke @code{stat()} on the current directory) can cause +an immediate fatal exit. In this situation, any partially-built +command lines will not be invoked (this prevents possible infinite +loops). + +At first sight, it looks like the list of filenames to be processed +can only be at the end of the command line, and that this might be a +problem for some comamnds (@code{cp} and @code{rsync} for example). + +However, there is a slightly obscure but powerful workarouund for this +problem which takes advantage of the behaviour of @code{sh -c}:- + +@example +find startpoint -tests @dots{} -exec sh -c 'scp "$@@" remote:/dest' sh @{@} + +@end example + +In the example above, the filenames we want to work on need to occur +on the @code{scp} command line before the name of the destination. We +use the shell to invoke the command @code{scp "$@@" remote:/dest} and +the shell expands @code{"$@@"} to the list of filenames we want to +process. + +Another, but less secure, way to run a command on more than one file +at once, is to use the @code{xargs} command, which is invoked like +this: + +@example +xargs @r{[}@var{option}@dots{}@r{]} @r{[}@var{command} @r{[}@var{initial-arguments}@r{]}@r{]} +@end example + +@code{xargs} normally reads arguments from the standard input. These +arguments are delimited by blanks (which can be protected with double +or single quotes or a backslash) or newlines. It executes the +@var{command} (default is @file{/bin/echo}) one or more times with any +@var{initial-arguments} followed by arguments read from standard +input. Blank lines on the standard input are ignored. If the +@samp{-L} option is in use, trailing blanks indicate that @code{xargs} +should consider the following line to be part of this one. + +Instead of blank-delimited names, it is safer to use @samp{find +-print0} or @samp{find -fprint0} and process the output by giving the +@samp{-0} or @samp{--null} option to GNU @code{xargs}, GNU @code{tar}, +GNU @code{cpio}, or @code{perl}. The @code{locate} command also has a +@samp{-0} or @samp{--null} option which does the same thing. + +You can use shell command substitution (backquotes) to process a list +of arguments, like this: + +@example +grep -l sprintf `find $HOME -name '*.c' -print` +@end example + +However, that method produces an error if the length of the @samp{.c} +file names exceeds the operating system's command line length limit. +@code{xargs} avoids that problem by running the command as many times +as necessary without exceeding the limit: + +@example +find $HOME -name '*.c' -print | xargs grep -l sprintf +@end example + +However, if the command needs to have its standard input be a terminal +(@code{less}, for example), you have to use the shell command +substitution method or use the @samp{--arg-file} option of +@code{xargs}. + +The @code{xargs} command will process all its input, building command +lines and executing them, unless one of the commands exits with a +status of 255 (this will cause xargs to issue an error message and +stop) or it reads a line contains the end of file string specified +with the @samp{--eof} option. + +@menu +* Unsafe File Name Handling:: +* Safe File Name Handling:: +* Unusual Characters in File Names:: +* Limiting Command Size:: +* Interspersing File Names:: +@end menu + +@node Unsafe File Name Handling +@subsubsection Unsafe File Name Handling + +Because file names can contain quotes, backslashes, blank characters, +and even newlines, it is not safe to process them using @code{xargs} +in its default mode of operation. But since most files' names do not +contain blanks, this problem occurs only infrequently. If you are +only searching through files that you know have safe names, then you +need not be concerned about it. + +Error messages issued by @code{find} and @code{locate} quote unusual +characters in file names in order to prevent unwanted changes in the +terminal's state. + + +@c This example is adapted from: +@c From: pfalstad@stone.Princeton.EDU (Paul John Falstad) +@c Newsgroups: comp.unix.shell +@c Subject: Re: Beware xargs security holes +@c Date: 16 Oct 90 19:12:06 GMT +@c +In many applications, if @code{xargs} botches processing a file +because its name contains special characters, some data might be lost. +The importance of this problem depends on the importance of the data +and whether anyone notices the loss soon enough to correct it. +However, here is an extreme example of the problems that using +blank-delimited names can cause. If the following command is run +daily from @code{cron}, then any user can remove any file on the +system: + +@example +find / -name '#*' -atime +7 -print | xargs rm +@end example + +For example, you could do something like this: + +@example +eg$ echo > '# +vmunix' +@end example + +@noindent +and then @code{cron} would delete @file{/vmunix}, if it ran +@code{xargs} with @file{/} as its current directory. + +To delete other files, for example @file{/u/joeuser/.plan}, you could +do this: + +@example +eg$ mkdir '# +' +eg$ cd '# +' +eg$ mkdir u u/joeuser u/joeuser/.plan' +' +eg$ echo > u/joeuser/.plan' +/#foo' +eg$ cd .. +eg$ find . -name '#*' -print | xargs echo +./# ./# /u/joeuser/.plan /#foo +@end example + +@node Safe File Name Handling +@subsubsection Safe File Name Handling + +Here is how to make @code{find} output file names so that they can be +used by other programs without being mangled or misinterpreted. You +can process file names generated this way by giving the @samp{-0} or +@samp{--null} option to GNU @code{xargs}, GNU @code{tar}, GNU +@code{cpio}, or @code{perl}. + +@deffn Action -print0 +True; print the entire file name on the standard output, followed by a +null character. +@end deffn + +@deffn Action -fprint0 file +True; like @samp{-print0} but write to @var{file} like @samp{-fprint} +(@pxref{Print File Name}). The output file is always created. +@end deffn + +As of findutils version 4.2.4, the @code{locate} program also has a +@samp{--null} option which does the same thing. For similarity with +@code{xargs}, the short form of the option @samp{-0} can also be used. + +If you want to be able to handle file names safely but need to run +commands which want to be connected to a terminal on their input, you +can use the @samp{--arg-file} option to @code{xargs} like this: + +@example +find / -name xyzzy -print0 > list +xargs --null --arg-file=list munge +@end example + +The example above runs the @code{munge} program on all the files named +@file{xyzzy} that we can find, but @code{munge}'s input will still be +the terminal (or whatever the shell was using as standard input). If +your shell has the ``process substitution'' feature @samp{<(...)}, you +can do this in just one step: + +@example +xargs --null --arg-file=<(find / -name xyzzy -print0) munge +@end example + +@node Unusual Characters in File Names +@subsubsection Unusual Characters in File Names +As discussed above, you often need to be careful about how the names +of files are handled by @code{find} and other programs. If the output +of @code{find} is not going to another program but instead is being +shown on a terminal, this can still be a problem. For example, some +character sequences can reprogram the function keys on some terminals. +@xref{Security Considerations}, for a discussion of other security +problems relating to @code{find}. + +Unusual characters are handled differently by various +actions, as described below. + +@table @samp +@item -print0 +@itemx -fprint0 +Always print the exact file name, unchanged, even if the output is +going to a terminal. +@item -ok +@itemx -okdir +Always print the exact file name, unchanged. This will probably +change in a future release. +@item -ls +@itemx -fls +Unusual characters are always escaped. White space, backslash, and +double quote characters are printed using C-style escaping (for +example @samp{\f}, @samp{\"}). Other unusual characters are printed +using an octal escape. Other printable characters (for @samp{-ls} and +@samp{-fls} these are the characters between octal 041 and 0176) are +printed as-is. +@item -printf +@itemx -fprintf +If the output is not going to a terminal, it is printed as-is. +Otherwise, the result depends on which directive is in use: + +@table @asis +@item %D, %F, %H, %Y, %y +These expand to values which are not under control of files' owners, +and so are printed as-is. +@item %a, %b, %c, %d, %g, %G, %i, %k, %m, %M, %n, %s, %t, %u, %U +These have values which are under the control of files' owners but +which cannot be used to send arbitrary data to the terminal, and so +these are printed as-is. +@item %f, %h, %l, %p, %P +The output of these directives is quoted if the output is going to a +terminal. + +This quoting is performed in the same way as for GNU @code{ls}. This +is not the same quoting mechanism as the one used for @samp{-ls} and +@samp{fls}. If you are able to decide what format to use for the +output of @code{find} then it is normally better to use @samp{\0} as a +terminator than to use newline, as file names can contain white space +and newline characters. +@end table +@item -print +@itemx -fprint +Quoting is handled in the same way as for the @samp{%p} directive of +@samp{-printf} and @samp{-fprintf}. If you are using @code{find} in a +script or in a situation where the matched files might have arbitrary +names, you should consider using @samp{-print0} instead of +@samp{-print}. +@end table + + +The @code{locate} program quotes and escapes unusual characters in +file names in the same way as @code{find}'s @samp{-print} action. + +The behaviours described above may change soon, as the treatment of +unprintable characters is harmonised for @samp{-ls}, @samp{-fls}, +@samp{-print}, @samp{-fprint}, @samp{-printf} and @samp{-fprintf}. + +@node Limiting Command Size +@subsubsection Limiting Command Size + +@code{xargs} gives you control over how many arguments it passes to +the command each time it executes it. By default, it uses up to +@code{ARG_MAX} - 2k, or 128k, whichever is smaller, characters per +command. It uses as many lines and arguments as fit within that +limit. The following options modify those values. + +@table @code +@item --no-run-if-empty +@itemx -r +If the standard input does not contain any nonblanks, do not run the +command. By default, the command is run once even if there is no +input. This option is a GNU extension. + +@item --max-lines@r{[}=@var{max-lines}@r{]} +@itemx -L @var{max-lines} +@itemx -l@r{[}@var{max-lines}@r{]} +Use at most @var{max-lines} nonblank input lines per command line; +@var{max-lines} defaults to 1 if omitted; omitting the argument is not +allowed in the case of the @samp{-L} option. Trailing blanks cause an +input line to be logically continued on the next input line, for the +purpose of counting the lines. Implies @samp{-x}. The preferred name +for this option is @samp{-L} as this is specified by POSIX. + +@item --max-args=@var{max-args} +@itemx -n @var{max-args} +Use at most @var{max-args} arguments per command line. Fewer than +@var{max-args} arguments will be used if the size (see the @samp{-s} +option) is exceeded, unless the @samp{-x} option is given, in which +case @code{xargs} will exit. + +@item --max-chars=@var{max-chars} +@itemx -s @var{max-chars} +Use at most @var{max-chars} characters per command line, including the +command initial arguments and the terminating nulls at the ends of the +argument strings. If you specify a value for this option which is too +large or small, a warning message is printed and the appropriate upper +or lower limit is used instead. You can use @samp{--show-limits} +option to understand the command-line limits applying to @code{xargs} +and how this is affected by any other options. The POSIX limits shown +when you do this have already been adjusted to take into account the +size of your environment variables. + +The largest allowed value is system-dependent, and is calculated as +the argument length limit for exec, less the size of your environment, +less 2048 bytes of headroom. If this value is more than 128KiB, +128Kib is used as the default value; otherwise, the default value is +the maximum. + + +@item --max-procs=@var{max-procs} +@itemx -P @var{max-procs} +Run up to @var{max-procs} processes at a time; the default is 1. If +@var{max-procs} is 0, @code{xargs} will run as many processes as +possible at a time. Use the @samp{-n}, @samp{-s}, or @samp{-L} option +with @samp{-P}; otherwise chances are that the command will be run +only once. +@end table + +@node Interspersing File Names +@subsubsection Interspersing File Names + +@code{xargs} can insert the name of the file it is processing between +arguments you give for the command. Unless you also give options to +limit the command size (@pxref{Limiting Command Size}), this mode of +operation is equivalent to @samp{find -exec} (@pxref{Single File}). + +@table @code +@item --replace@r{[}=@var{replace-str}@r{]} +@itemx -I @var{replace-str} +@itemx -i @var{replace-str} +Replace occurrences of @var{replace-str} in the initial arguments with +names read from the input. Also, unquoted blanks do not terminate +arguments; instead, the input is split at newlines only. For the +@samp{-i} option, if @var{replace-str} is omitted for @samp{--replace} +or @samp{-i}, it defaults to @samp{@{@}} (like for @samp{find -exec}). +Implies @samp{-x} and @samp{-l 1}. @samp{-i} is deprecated in favour +of @samp{-I}. As an example, to sort each file in the @file{bills} +directory, leaving the output in that file name with @file{.sorted} +appended, you could do: + +@example +find bills -type f | xargs -I XX sort -o XX.sorted XX +@end example + +@noindent +The equivalent command using @samp{find -execdir} is: + +@example +find bills -type f -execdir sort -o '@{@}.sorted' '@{@}' ';' +@end example +@end table + + +When you use the @samp{-I} option, each line read from the input is +buffered internally. This means that there is an upper limit on the +length of input line that xargs will accept when used with the +@samp{-I} option. To work around this limitation, you can use the +@samp{-s} option to increase the amount of buffer space that xargs +uses, and you can also use an extra invocation of xargs to ensure that +very long lines do not occur. For example: + +@example +somecommand | xargs -s 50000 echo | xargs -I '@{@}' -s 100000 rm '@{@}' +@end example + +Here, the first invocation of @code{xargs} has no input line length +limit because it doesn't use the @samp{-I} option. The second +invocation of @code{xargs} does have such a limit, but we have ensured +that the it never encounters a line which is longer than it can +handle. + +This is not an ideal solution. Instead, the @samp{-I} option should +not impose a line length limit (apart from any limit imposed by the +operating system) and so one might consider this limitation to be a +bug. A better solution would be to allow @code{xargs -I} to +automatically move to a larger value for the @samp{-s} option when +this is needed. + +This sort of problem doesn't occur with the output of @code{find} +because it emits just one filename per line. + +@node Querying +@subsection Querying + +To ask the user whether to execute a command on a single file, you can +use the @code{find} primary @samp{-okdir} instead of @samp{-execdir}, +and the @code{find} primary @samp{-ok} instead of @samp{-exec}: + +@deffn Action -okdir command ; +Like @samp{-execdir} (@pxref{Single File}), but ask the user first (on +the standard input); if the response does not start with @samp{y} or +@samp{Y}, do not run the command, and return false. If the command is +run, its standard input is redirected from @file{/dev/null}. +@end deffn + +@deffn Action -ok command ; +This insecure variant of the @samp{-okdir} action is specified by +POSIX. The main difference is that the command is executed in the +directory from which @code{find} was invoked, meaning that @samp{@{@}} +is expanded to a relative path starting with the name of one of the +starting directories, rather than just the basename of the matched +file. If the command is run, its standard input is redirected from +@file{/dev/null}. +@end deffn + +When processing multiple files with a single command, to query the +user you give @code{xargs} the following option. When using this +option, you might find it useful to control the number of files +processed per invocation of the command (@pxref{Limiting Command +Size}). + +@table @code +@item --interactive +@itemx -p +Prompt the user about whether to run each command line and read a line +from the terminal. Only run the command line if the response starts +with @samp{y} or @samp{Y}. Implies @samp{-t}. +@end table + +@node Delete Files +@section Delete Files + +@deffn Action -delete +Delete files or directories; true if removal succeeded. If the +removal failed, an error message is issued. + +The use of the @samp{-delete} action on the command line automatically +turns on the @samp{-depth} option (@pxref{find Expressions}). This +can be surprising if you were previously just testing with +@samp{-print}, so it is usually best to remember to use @samp{-depth} +explicitly. +@end deffn + +@node Adding Tests +@section Adding Tests + +You can test for file attributes that none of the @code{find} builtin +tests check. To do this, use @code{xargs} to run a program that +filters a list of files printed by @code{find}. If possible, use +@code{find} builtin tests to pare down the list, so the program run by +@code{xargs} has less work to do. The tests builtin to @code{find} +will likely run faster than tests that other programs perform. + +For reasons of efficiency it is often useful to limit the number of +times an external program has to be run. For this reason, it is often +a good idea to implement ``extended'' tests by using @code{xargs}. + +For example, here is a way to print the names of all of the unstripped +binaries in the @file{/usr/local} directory tree. Builtin tests avoid +running @code{file} on files that are not regular files or are not +executable. + +@example +find /usr/local -type f -perm /a=x | xargs file | + grep 'not stripped' | cut -d: -f1 +@end example + +@noindent +The @code{cut} program removes everything after the file name from the +output of @code{file}. + +However, using @code{xargs} can present important security problems +(@pxref{Security Considerations}). These can be avoided by using +@samp{-execdir}. The @samp{-execdir} action is also a useful way of +putting your own test in the middle of a set of other tests or actions +for @code{find} (for example, you might want to use @samp{-prune}). + +@c Idea from Martin Weitzel. +To place a special test somewhere in the middle of a @code{find} +expression, you can use @samp{-execdir} (or, less securely, +@samp{-exec}) to run a program that performs the test. Because +@samp{-execdir} evaluates to the exit status of the executed program, +you can use a program (which can be a shell script) that tests for a +special attribute and make it exit with a true (zero) or false +(non-zero) status. It is a good idea to place such a special test +@emph{after} the builtin tests, because it starts a new process which +could be avoided if a builtin test evaluates to false. + +Here is a shell script called @code{unstripped} that checks whether +its argument is an unstripped binary file: + +@example +#! /bin/sh +file "$1" | grep -q "not stripped" +@end example + + +This script relies on the shell exiting with the status of +the last command in the pipeline, in this case @code{grep}. The +@code{grep} command exits with a true status if it found any matches, +false if not. Here is an example of using the script (assuming it is +in your search path). It lists the stripped executables (and shell +scripts) in the file @file{sbins} and the unstripped ones in +@file{ubins}. + +@example +find /usr/local -type f -perm /a=x \ + \( -execdir unstripped '@{@}' \; -fprint ubins -o -fprint sbins \) +@end example + + +@node Databases +@chapter File Name Databases + +The file name databases used by @code{locate} contain lists of files +that were in particular directory trees when the databases were last +updated. The file name of the default database is determined when +@code{locate} and @code{updatedb} are configured and installed. The +frequency with which the databases are updated and the directories for +which they contain entries depend on how often @code{updatedb} is run, +and with which arguments. + +You can obtain some statistics about the databases by using +@samp{locate --statistics}. + +@menu +* Database Locations:: +* Database Formats:: +* Newline Handling:: +@end menu + + +@node Database Locations +@section Database Locations + +There can be multiple file name databases. Users can select which +databases @code{locate} searches using the @code{LOCATE_PATH} +environment variable or a command line option. The system +administrator can choose the file name of the default database, the +frequency with which the databases are updated, and the directories +for which they contain entries. File name databases are updated by +running the @code{updatedb} program, typically nightly. + +In networked environments, it often makes sense to build a database at +the root of each filesystem, containing the entries for that +filesystem. @code{updatedb} is then run for each filesystem on the +fileserver where that filesystem is on a local disk, to prevent +thrashing the network. + +@xref{Invoking updatedb}, for the description of the options to +@code{updatedb}. These options can be used to specify which +directories are indexed by each database file. + +The default location for the locate database depends on how findutils +is built, but the findutils installation accompanying this manual uses +the default location @file{@value{LOCATE_DB}}. + +If no database exists at @file{@value{LOCATE_DB}} but the user did not +specify where to look (by using @samp{-d} or setting +@code{LOCATE_PATH}), then @code{locate} will also check for a +``secure'' database in @file{/var/lib/slocate/slocate.db}. + +@node Database Formats +@section Database Formats + +The file name databases contain lists of files that were in particular +directory trees when the databases were last updated. The file name +database format changed starting with GNU @code{locate} version 4.0 to +allow machines with different byte orderings to share the databases. + +GNU @code{locate} can read both the old and new database formats. +However, old versions of @code{locate} (on other Unix systems, or GNU +@code{locate} before version 4.0) produce incorrect results if run +against a database in something other than the old format. + +Support for the old database format will eventually be discontinued, +first in @code{updatedb} and later in @code{locate}. + +If you run @samp{locate --statistics}, the resulting summary indicates +the type of each @code{locate} database. You select which database +format @code{updatedb} will use with the @samp{--dbformat} option. + + +@menu +* LOCATE02 Database Format:: +* Sample LOCATE02 Database:: +* slocate Database Format:: +* Old Database Format:: +@end menu + +@node LOCATE02 Database Format +@subsection LOCATE02 Database Format + +@code{updatedb} runs a program called @code{frcode} to +@dfn{front-compress} the list of file names, which reduces the +database size by a factor of 4 to 5. Front-compression (also known as +incremental encoding) works as follows. + +The database entries are a sorted list (case-insensitively, for users' +convenience). Since the list is sorted, each entry is likely to share +a prefix (initial string) with the previous entry. Each database +entry begins with an offset-differential count byte, which is the +additional number of characters of prefix of the preceding entry to +use beyond the number that the preceding entry is using of its +predecessor. (The counts can be negative.) Following the count is a +null-terminated ASCII remainder---the part of the name that follows +the shared prefix. + +If the offset-differential count is larger than can be stored in a +byte (+/-127), the byte has the value 0x80 and the count follows in a +2-byte word, with the high byte first (network byte order). + +Every database begins with a dummy entry for a file called +@file{LOCATE02}, which @code{locate} checks for to ensure that the +database file has the correct format; it ignores the entry in doing +the search. + +Databases cannot be concatenated together, even if the first (dummy) +entry is trimmed from all but the first database. This is because the +offset-differential count in the first entry of the second and +following databases will be wrong. + +In the output of @samp{locate --statistics}, the new database format +is referred to as @samp{LOCATE02}. + +@node Sample LOCATE02 Database +@subsection Sample LOCATE02 Database + +Sample input to @code{frcode}: +@c with nulls changed to newlines: + +@example +/usr/src +/usr/src/cmd/aardvark.c +/usr/src/cmd/armadillo.c +/usr/tmp/zoo +@end example + +Length of the longest prefix of the preceding entry to share: + +@example +0 /usr/src +8 /cmd/aardvark.c +14 rmadillo.c +5 tmp/zoo +@end example + +Output from @code{frcode}, with trailing nulls changed to newlines +and count bytes made printable: + +@example +0 LOCATE02 +0 /usr/src +8 /cmd/aardvark.c +6 rmadillo.c +-9 tmp/zoo +@end example + +(6 = 14 - 8, and -9 = 5 - 14) + +@node slocate Database Format +@subsection slocate Database Format + +The @code{slocate} program uses a database format similar to, but not +quite the same as, GNU @code{locate}. The first byte of the database +specifies its @dfn{security level}. If the security level is 0, +@code{slocate} will read, match and print filenames on the basis of +the information in the database only. However, if the security level +byte is 1, @code{slocate} omits entries from its output if the +invoking user is unable to access them. The second byte of the +database is zero. The second byte is immediately followed by the +first database entry. The first entry in the database is not preceded +by any differential count or dummy entry. Instead the differential +count for the first item is assumed to be zero. +.P +Starting with the second entry (if any) in the database, data is +interpreted as for the GNU LOCATE02 format. + +@node Old Database Format +@subsection Old Database Format + +The old database format is used by Unix @code{locate} and @code{find} +programs and earlier releases of the GNU ones. @code{updatedb} +produces this format if given the @samp{--old-format} option. + +@code{updatedb} runs programs called @code{bigram} and @code{code} to +produce old-format databases. The old format differs from the new one +in the following ways. Instead of each entry starting with an +offset-differential count byte and ending with a null, byte values +from 0 through 28 indicate offset-differential counts from -14 through +14. The byte value indicating that a long offset-differential count +follows is 0x1e (30), not 0x80. The long counts are stored in host +byte order, which is not necessarily network byte order, and host +integer word size, which is usually 4 bytes. They also represent a +count 14 less than their value. The database lines have no +termination byte; the start of the next line is indicated by its first +byte having a value <= 30. + +In addition, instead of starting with a dummy entry, the old database +format starts with a 256 byte table containing the 128 most common +bigrams in the file list. A bigram is a pair of adjacent bytes. +Bytes in the database that have the high bit set are indexes (with the +high bit cleared) into the bigram table. The bigram and +offset-differential count coding makes these databases 20-25% smaller +than the new format, but makes them not 8-bit clean. Any byte in a +file name that is in the ranges used for the special codes is replaced +in the database by a question mark, which not coincidentally is the +shell wildcard to match a single character. + +The old format therefore cannot faithfully store entries with +non-ASCII characters. It therefore should not be used in +internationalised environments. That is, most installations should +not use it. + +Because the long counts are stored by the @code{code} program as +native-order machine words, the database format is not eaily used in +environments which differ in terms of byte order. If locate databases +are to be shared between machines, the LOCATE02 database format should +be used. This has other benefits as discussed above. However, the +length of the filename currently being processed can normally be used +to place reasonable limits on the long counts and so this information +is used by locate to help it guess the byte ordering of the old format +database. Unless it finds evidence to the contrary, @code{locate} +will assume that the byte order of the database is the same as the +native byte order of the machine running @code{locate}. The output of +@samp{locate --statistics} also includes information about the byte +order of old-format databases. + +The output of @samp{locate --statistics} will give an incorrect count +of the number of file names containing newlines or high-bit characters +for old-format databases. + +Old versions of GNU @code{locate} fail to correctly handle very long +file names, possibly leading to security problems relating to a heap +buffer overrun. @xref{Security Considerations for locate}, for a +detailed explanation. + +@node Newline Handling +@section Newline Handling + +Within the database, file names are terminated with a null character. +This is the case for both the old and the new format. + +When the new database format is being used, the compression technique +used to generate the database though relies on the ability to sort the +list of files before they are presented to @code{frcode}. + +If the system's sort command allows its input list of files to be +separated with null characters via the @samp{-z} option, this option +is used and therefore @code{updatedb} and @code{locate} will both +correctly handle file names containing newlines. If the @code{sort} +command lacks support for this, the list of files is delimited with +the newline character, meaning that parts of file names containing +newlines will be incorrectly sorted. This can result in both +incorrect matches and incorrect failures to match. + +On the other hand, if you are using the old database format, file +names with embedded newlines are not correctly handled. There is no +technical limitation which enforces this, it's just that the +@code{bigram} program has not been updated to support lists of file +names separated by nulls. + +So, if you are using the new database format (this is the default) and +your system uses GNU @code{sort}, newlines will be correctly handled +at all times. Otherwise, newlines may not be correctly handled. + +@node File Permissions +@chapter File Permissions + +@include perm.texi + +@include getdate.texi + +@node Reference +@chapter Reference + +Below are summaries of the command line syntax for the programs +discussed in this manual. + +@menu +* Invoking find:: +* Invoking locate:: +* Invoking updatedb:: +* Invoking xargs:: +* Regular Expressions:: +* Environment Variables:: +@end menu + +@node Invoking find +@section Invoking @code{find} + +@example +find @r{[-H] [-L] [-P] [-D @var{debugoptions}] [-O@var{level}]} @r{[}@var{file}@dots{}@r{]} @r{[}@var{expression}@r{]} +@end example + +@code{find} searches the directory tree rooted at each file name +@var{file} by evaluating the @var{expression} on each file it finds in +the tree. + +The command line may begin with the @samp{-H}, @samp{-L}, @samp{-P}, +@samp{-D} and @samp{-O} options. These are followed by a list of +files or directories that should be searched. If no files to search +are specified, the current directory (@file{.}) is used. + +This list of files to search is followed by a list of expressions +describing the files we wish to search for. The first part of the +expression is recognised by the fact that it begins with @samp{-} +followed by some other letters (for example @samp{-print}), or is +either @samp{(} or @samp{!}. Any arguments after it are the rest of +the expression. + +If no expression is given, the expression @samp{-print} is used. + +The @code{find} command exits with status zero if all files matched +are processed successfully, greater than zero if errors occur. + +The @code{find} program also recognises two options for administrative +use: + +@table @samp +@item --help +Print a summary of the command line usage and exit. +@item --version +Print the version number of @code{find} and exit. +@end table + +The @samp{-version} option is a synonym for @samp{--version} + + +@menu +* Filesystem Traversal Options:: +* Warning Messages:: +* Optimisation Options:: +* Debug Options:: +* Find Expressions:: +@end menu + +@node Filesystem Traversal Options +@subsection Filesystem Traversal Options + +The options @samp{-H}, @samp{-L} or @samp{-P} may be specified at the +start of the command line (if none of these is specified, @samp{-P} is +assumed). If you specify more than one of these options, the last one +specified takes effect (but note that the @samp{-follow} option is +equivalent to @samp{-L}). + +@table @code +@item -P +Never follow symbolic links (this is the default), except in the case +of the @samp{-xtype} predicate. +@item -L +Always follow symbolic links, except in the case of the @samp{-xtype} +predicate. +@item -H +Follow symbolic links specified in the list of files to search, or +which are otherwise specified on the command line. +@end table + +If @code{find} would follow a symbolic link, but cannot for any reason +(for example, because it has insufficient permissions or the link is +broken), it falls back on using the properties of the symbolic link +itself. @ref{Symbolic Links} for a more complete description of how +symbolic links are handled. + +@node Warning Messages +@subsection Warning Messages + +If there is an error on the @code{find} command line, an error message +is normally issued. However, there are some usages that are +inadvisable but which @code{find} should still accept. Under these +circumstances, @code{find} may issue a warning message. + +By default, warnings are enabled only if @code{find} is being run +interactively (specifically, if the standard input is a terminal) and +the POSIXLY_CORRECT environment variable is not set. Warning messages +can be controlled explicitly by the use of options on the command +line: + +@table @code +@item -warn +Issue warning messages where appropriate. +@item -nowarn +Do not issue warning messages. +@end table + +These options take effect at the point on the command line where they +are specified. Therefore it's not useful to specify @samp{-nowarn} at +the end of the command line. The warning messages affected by the +above options are triggered by: + +@itemize @minus +@item +Use of the @samp{-d} option which is deprecated; please use +@samp{-depth} instead, since the latter is POSIX-compliant. +@item +Use of the @samp{-ipath} option which is deprecated; please use +@samp{-iwholename} instead. +@item +Specifying an option (for example @samp{-mindepth}) after a non-option +(for example @samp{-type} or @samp{-print}) on the command line. +@item +Use of the @samp{-name} or @samp{-iname} option with a slash character +in the pattern. Since the name predicates only compare against the +basename of the visited files, the only file that can match a slash is +the root directory itself. +@end itemize + +The default behaviour above is designed to work in that way so that +existing shell scripts don't generate spurious errors, but people will +be made aware of the problem. + +Some warning messages are issued for less common or more serious +problems, and consequently cannot be turned off: + +@itemize @minus +@item +Use of an unrecognised backslash escape sequence with @samp{-fprintf} +@item +Use of an unrecognised formatting directive with @samp{-fprintf} +@end itemize + +@node Optimisation Options +@subsection Optimisation Options + +The @samp{-O@var{level}} option sets @code{find}'s optimisation level +to @var{level}. The default optimisation level is 1. + +At certain optimisation levels, @code{find} reorders tests to speed up +execution while preserving the overall effect; that is, predicates +with side effects are not reordered relative to each other. The +optimisations performed at each optimisation level are as follows. + +@table @samp +@item 0 +Currently equivalent to optimisation level 1. + +@item 1 +This is the default optimisation level and corresponds to the +traditional behaviour. Expressions are reordered so that tests based +only on the names of files (for example@samp{ -name} and +@samp{-regex}) are performed first. + +@item 2 +Any @samp{-type} or @samp{-xtype} tests are performed after any tests +based only on the names of files, but before any tests that require +information from the inode. On many modern versions of Unix, file +types are returned by @code{readdir()} and so these predicates are +faster to evaluate than predicates which need to stat the file first. + +@item 3 +At this optimisation level, the full cost-based query optimiser is +enabled. The order of tests is modified so that cheap (i.e., fast) +tests are performed first and more expensive ones are performed later, +if necessary. Within each cost band, predicates are evaluated earlier +or later according to whether they are likely to succeed or not. For +@samp{-o}, predicates which are likely to succeed are evaluated +earlier, and for @samp{-a}, predicates which are likely to fail are +evaluated earlier. +@end table + + +@node Debug Options +@subsection Debug Options + +The @samp{-D} option makes @code{find} produce diagnostic output. +Much of the information is useful only for diagnosing problems, and so +most people will not find this option helpful. + +The list of debug options should be comma separated. Compatibility of +the debug options is not guaranteed between releases of findutils. +For a complete list of valid debug options, see the output of +@code{find -D help}. Valid debug options include: +@table @samp +@item help +Explain the debugging options. +@item tree +Show the expression tree in its original and optimised form. +@item stat +Print messages as files are examined with the stat and lstat system +calls. The find program tries to minimise such calls. +@item opt +Prints diagnostic information relating to the optimisation of the +expression tree; see the @samp{-O} option. +@item rates +Prints a summary indicating how often each predicate succeeded or +failed. +@end table + +@node Find Expressions +@subsection Find Expressions + +The final part of the @code{find} command line is a list of +expressions. @xref{Primary Index}, for a summary of all of the tests, +actions, and options that the expression can contain. If the +expression is missing, @samp{-print} is assumed. + +@node Invoking locate +@section Invoking @code{locate} + +@example +locate @r{[}@var{option}@dots{}@r{]} @var{pattern}@dots{} +@end example + +For each @var{pattern} given @code{locate} searches one or more file +name databases returning each match of @var{pattern}. + +For each @var{pattern} given @code{locate} searches one or more file +name databases returning each match of @var{pattern}. + +@table @code +@item --all +@itemx -A +Print only names which match all non-option arguments, not those +matching one or more non-option arguments. + +@item --basename +@itemx -b +The specified pattern is matched against just the last component of +the name of a file in the @code{locate} database. This last +component is also called the ``base name''. For example, the base +name of @file{/tmp/mystuff/foo.old.c} is @file{foo.old.c}. If the +pattern contains metacharacters, it must match the base name exactly. +If not, it must match part of the base name. + +@item --count +@itemx -c +Instead of printing the matched file names, just print the total +number of matches found, unless @samp{--print} (@samp{-p}) is also +present. + + +@item --database=@var{path} +@itemx -d @var{path} +Instead of searching the default @code{locate} database +@file{@value{LOCATE_DB}}, @code{locate} searches the file +name databases in @var{path}, which is a colon-separated list of +database file names. You can also use the environment variable +@code{LOCATE_PATH} to set the list of database files to search. The +option overrides the environment variable if both are used. Empty +elements in @var{path} (that is, a leading or trailing colon, or two +colons in a row) are taken to stand for the default database. +A database can be supplied on stdin, using @samp{-} as an element +of @samp{path}. If more than one element of @samp{path} is @samp{-}, +later instances are ignored (but a warning message is printed). + +@item --existing +@itemx -e +Only print out such names which currently exist (instead of such names +which existed when the database was created). Note that this may slow +down the program a lot, if there are many matches in the database. +The way in which broken symbolic links are treated is affected by the +@samp{-L}, @samp{-P} and @samp{-H} options. Please note that it is +possible for the file to be deleted after @code{locate} has checked +that it exists, but before you use it. This option is automatically +turned on when reading an @code{slocate} database in secure mode +(@pxref{slocate Database Format}). + +@item --non-existing +@itemx -E +Only print out such names which currently do not exist (instead of +such names which existed when the database was created). Note that +this may slow down the program a lot, if there are many matches in the +database. The way in which broken symbolic links are treated is +affected by the @samp{-L}, @samp{-P} and @samp{-H} options. Please +note that @code{locate} checks that the file does not exist, but a +file of the same name might be created after @code{locate}'s check but +before you read @code{locate}'s output. + +@item --follow +@itemx -L +If testing for the existence of files (with the @samp{-e} or @samp{-E} +options), consider broken symbolic links to be non-existing. This is +the default behaviour. + +@item --nofollow +@itemx -P +@itemx -H +If testing for the existence of files (with the @samp{-e} or @samp{-E} +options), treat broken symbolic links as if they were existing files. +The @samp{-H} form of this option is provided purely for similarity +with @code{find}; the use of @samp{-P} is recommended over @samp{-H}. + +@item --ignore-case +@itemx -i +Ignore case distinctions in both the pattern and the file names. + +@item --limit=N +@itemx -l N +Limit the number of results printed to N. When used with the +@samp{--count} option, the value printed will never be larger than +this limit. +@item --max-database-age=D +Normally, @code{locate} will issue a warning message when it searches +a database which is more than 8 days old. This option changes that +value to something other than 8. The effect of specifying a negative +value is undefined. +@item --mmap +@itemx -m +Accepted but does nothing. The option is supported only to provide +compatibility with BSD's @code{locate}. + +@item --null +@itemx -0 +Results are separated with the ASCII NUL character rather than the +newline character. To get the full benefit of the use of this option, +use the new @code{locate} database format (that is the default +anyway). + +@item --print +@itemx -p +Print search results when they normally would not, because of the +presence of @samp{--statistics} (@samp{-S}) or @samp{--count} +(@samp{-c}). + +@item --wholename +@itemx -w +The specified pattern is matched against the whole name of the file in +the @code{locate} database. If the pattern contains metacharacters, +it must match exactly. If not, it must match part of the whole file +name. This is the default behaviour. + +@item --regex +@itemx -r +Instead of using substring or shell glob matching, the pattern +specified on the command line is understood to be a regular +expression. GNU Emacs-style regular expressions are assumed unless +the @samp{--regextype} option is also given. File names from the +@code{locate} database are matched using the specified regular +expression. If the @samp{-i} flag is also given, matching is +case-insensitive. Matches are performed against the whole path name, +and so by default a pathname will be matched if any part of it matches +the specified regular expression. The regular expression may use +@samp{^} or @samp{$} to anchor a match at the beginning or end of a +pathname. + +@item --regextype +This option changes the regular expression syntax and behaviour used +by the @samp{--regex} option. @ref{Regular Expressions} for more +information on the regular expression dialects understood by GNU +findutils. + +@item --stdio +@itemx -s +Accepted but does nothing. The option is supported only to provide +compatibility with BSD's @code{locate}. + +@item --statistics +@itemx -S +Print some summary information for each @code{locate} database. No +search is performed unless non-option arguments are given. +Although the BSD version of locate also has this option, the format of the +output is different. + +@item --help +Print a summary of the command line usage for @code{locate} and exit. + +@item --version +Print the version number of @code{locate} and exit. +@end table + +@node Invoking updatedb +@section Invoking @code{updatedb} + +@example +updatedb @r{[}@var{option}@dots{}@r{]} +@end example + +@code{updatedb} creates and updates the database of file names used by +@code{locate}. @code{updatedb} generates a list of files similar to +the output of @code{find} and then uses utilities for optimizing the +database for performance. @code{updatedb} is often run periodically +as a @code{cron} job and configured with environment variables or +command options. Typically, operating systems have a shell script +that ``exports'' configurations for variable definitions and uses +another shell script that ``sources'' the configuration file into the +environment and then executes @code{updatedb} in the environment. + +@code{updatedb} creates and updates the database of file names used by +@code{locate}. @code{updatedb} generates a list of files similar to +the output of @code{find} and then uses utilities for optimizing the +database for performance. @code{updatedb} is often run periodically +as a @code{cron} job and configured with environment variables or +command options. Typically, operating systems have a shell script +that ``exports'' configurations for variable definitions and uses +another shell script that ``sources'' the configuration file into the +environment and then executes @code{updatedb} in the environment. + +@table @code +@item --findoptions='@var{OPTION}@dots{}' +Global options to pass on to @code{find}. +The environment variable @code{FINDOPTIONS} also sets this value. +Default is none. + +@item --localpaths='@var{path}@dots{}' +Non-network directories to put in the database. +Default is @file{/}. + +@item --netpaths='@var{path}@dots{}' +Network (NFS, AFS, RFS, etc.) directories to put in the database. +The environment variable @code{NETPATHS} also sets this value. +Default is none. + +@item --prunepaths='@var{path}@dots{}' +Directories to omit from the database, which would otherwise be +included. The environment variable @code{PRUNEPATHS} also sets this +value. Default is @file{/tmp /usr/tmp /var/tmp /afs}. The paths are +used as regular expressions (with @code{find ... -regex}, so you need +to specify these paths in the same way that @code{find} will encounter +them. This means for example that the paths must not include trailing +slashes. + +@item --prunefs='@var{path}@dots{}' +Filesystems to omit from the database, which would otherwise be +included. Note that files are pruned when a filesystem is reached; +Any filesystem mounted under an undesired filesystem will be ignored. +The environment variable @code{PRUNEFS} also sets this value. Default +is @file{nfs NFS proc}. + +@item --output=@var{dbfile} +The database file to build. The default is system-dependent, but +when this document was formatted it was @file{@value{LOCATE_DB}}. + +@item --localuser=@var{user} +The user to search the non-network directories as, using @code{su}. +Default is to search the non-network directories as the current user. +You can also use the environment variable @code{LOCALUSER} to set this user. + +@item --netuser=@var{user} +The user to search network directories as, using @code{su}. Default +@code{user} is @code{daemon}. You can also use the environment variable +@code{NETUSER} to set this user. + +@item --old-format +Generate a @code{locate} database in the old format, for compatibility +with versions of @code{locate} other than GNU @code{locate}. Using +this option means that @code{locate} will not be able to properly +handle non-ASCII characters in file names (that is, file names +containing characters which have the eighth bit set, such as many of +the characters from the ISO-8859-1 character set). @xref{Database +Formats}, for a detailed description of the supported database +formats. + +@item --dbformat=@var{FORMAT} +Generate the locate database in format @code{FORMAT}. Supported +database formats include @code{LOCATE02} (which is the default), +@code{old} and @code{slocate}. The @code{old} format exists for +compatibility with implementations of @code{locate} on other Unix +systems. The @code{slocate} format exists for compatibility with +@code{slocate}. @xref{Database Formats}, for a detailed description +of each format. + +@item --help +Print a summary of the command line usage and exit. +@item --version +Print the version number of @code{updatedb} and exit. +@end table + +@node Invoking xargs +@section Invoking @code{xargs} + +@example +xargs @r{[}@var{option}@dots{}@r{]} @r{[}@var{command} @r{[}@var{initial-arguments}@r{]}@r{]} +@end example + +@code{xargs} exits with the following status: + +@table @asis +@item 0 +if it succeeds +@item 123 +if any invocation of the command exited with status 1-125 +@item 124 +if the command exited with status 255 +@item 125 +if the command is killed by a signal +@item 126 +if the command cannot be run +@item 127 +if the command is not found +@item 1 +if some other error occurred. +@end table + +Exit codes greater than 128 are used by the shell to indicate that +a program died due to a fatal signal. + +@table @code +@item --arg-file@r{=@var{inputfile}} +@itemx -a @r{@var{inputfile}} +Read names from the file @var{inputfile} instead of standard input. +If you use this option, the standard input stream remains unchanged +when commands are run. Otherwise, stdin is redirected from +@file{/dev/null}. + +@item --null +@itemx -0 +Input file names are terminated by a null character instead of by +whitespace, and any quotes and backslash characters are not considered +special (every character is taken literally). Disables the end of +file string, which is treated like any other argument. + +@item --delimiter @var{delim} +@itemx -d @var{delim} + +Input file names are terminated by the specified character @var{delim} +instead of by whitespace, and any quotes and backslash characters are +not considered special (every character is taken literally). Disables +the end of file string, which is treated like any other argument. + +The specified delimiter may be a single character, a C-style character +escape such as @samp{\n}, or an octal or hexadecimal escape code. +Octal and hexadecimal escape codes are understood as for the +@code{printf} command. Multibyte characters are not supported. + + +@item -E @var{eof-str} +@itemx --eof@r{[}=@var{eof-str}@r{]} +@itemx -e@r{[}@var{eof-str}@r{]} +Set the end of file string to @var{eof-str}. If the end of file +string occurs as a line of input, the rest of the input is ignored. +If @var{eof-str} is omitted (@samp{-e}) or blank (either @samp{-e} or +@samp{-E}), there is no end of file string. The @samp{-e} form of +this option is deprecated in favour of the POSIX-compliant @samp{-E} +option, which you should use instead. As of GNU xargs version 4.2.9, +the default behaviour of xargs is not to have a logical end-of-file +marker. The POSIX standard (IEEE Std 1003.1, 2004 Edition) allows +this. + +@item --help +Print a summary of the options to @code{xargs} and exit. + +@item -I @var{replace-str} +@itemx --replace@r{[}=@var{replace-str}@r{]} +@itemx -i@r{[}@var{replace-str}@r{]} +Replace occurrences of @var{replace-str} in the initial arguments with +names read from standard input. Also, unquoted blanks do not +terminate arguments; instead, the input is split at newlines only. If +@var{replace-str} is omitted (omitting it is allowed only for +@samp{-i}), it defaults to @samp{@{@}} (like for @samp{find -exec}). +Implies @samp{-x} and @samp{-l 1}. The @samp{-i} option is deprecated +in favour of the @samp{-I} option. + +@item -L @var{max-lines} +@itemx --max-lines@r{[}=@var{max-lines}@r{]} +@itemx -l@r{[}@var{max-lines}@r{]} +Use at most @var{max-lines} non-blank input lines per command line. +For @samp{-l}, @var{max-lines} defaults to 1 if omitted. For +@samp{-L}, the argument is mandatory. Trailing blanks cause an input +line to be logically continued on the next input line, for the purpose +of counting the lines. Implies @samp{-x}. The @samp{-l} form of this +option is deprecated in favour of the POSIX-compliant @samp{-L} +option. + +@item --max-args=@var{max-args} +@itemx -n @var{max-args} +Use at most @var{max-args} arguments per command line. Fewer than +@var{max-args} arguments will be used if the size (see the @samp{-s} +option) is exceeded, unless the @samp{-x} option is given, in which +case @code{xargs} will exit. + +@item --interactive +@itemx -p +Prompt the user about whether to run each command line and read a line +from the terminal. Only run the command line if the response starts +with @samp{y} or @samp{Y}. Implies @samp{-t}. + +@item --no-run-if-empty +@itemx -r +If the standard input is completely empty, do not run the +command. By default, the command is run once even if there is no +input. + +@item --max-chars=@var{max-chars} +@itemx -s @var{max-chars} +Use at most @var{max-chars} characters per command line, including the +command, initial arguments and any terminating nulls at the ends of +the argument strings. + +@item --show-limits +Display the limits on the command-line length which are imposed by the +operating system, @code{xargs}' choice of buffer size and the +@samp{-s} option. Pipe the input from @file{/dev/null} (and perhaps +specify @samp{--no-run-if-empty}) if you don't want @code{xargs} to do +anything. + +@item --verbose +@itemx -t +Print the command line on the standard error output before executing +it. + +@item --version +Print the version number of @code{xargs} and exit. + +@item --exit +@itemx -x +Exit if the size (see the @samp{-s} option) is exceeded. + + +@item --max-procs=@var{max-procs} +@itemx -P @var{max-procs} +Run simultaneously up to @var{max-procs} processes at once; the default is 1. If +@var{max-procs} is 0, @code{xargs} will run as many processes as +possible simultaneously. +@end table + + +@node Regular Expressions +@section Regular Expressions + +The @samp{-regex} and @samp{-iregex} tests of @code{find} allow +matching by regular expression, as does the @samp{--regex} option of +@code{locate}. There are many different types of Regular Expression, +but the type used by @code{find} and @code{locate} is the same as is +used in GNU Emacs. Both programs provide an option which allows you +to select an alternative regular expression syntax; for @code{find} +this is the @samp{-regextype} option, and for @code{locate} this is +the @samp{--regextype} option. + +These options take a single argument, which indicates the specific +regular expression syntax and behaviour that should be used. This +should be one of the following: + +@include regexprops.texi + +@node Environment Variables +@section Environment Variables +@table @var +@item LANG +Provides a default value for the internationalisation variables that +are unset or null. +@item LC_ALL +If set to a non-empty string value, override the values of all the +other internationalisation variables. +@item LC_COLLATE +The POSIX standard specifies that this variable affects the pattern +matching to be used for the `\-name' option. GNU find uses the +GNU version of the @code{fnmatch} library function. + +POSIX also specifies that the `LC_COLLATE' environment +variable affects the interpretation of the user's response to the +query issued by `\-ok', but this is not the case for GNU find. +@item LC_CTYPE +This variable affects the treatment of character classes used with +the @samp{-name} test, if the system's +@code{fnmatch} library function supports this. It has no effect on the behaviour +of the @samp{-ok} expression. +@item LC_MESSAGES +Determines the locale to be used for internationalised messages. +@item NLSPATH +Determines the location of the internationalisation message catalogues. +@item PATH +Affects the directories which are searched to find the executables +invoked by @samp{-exec}, @samp{-execdir} @samp{-ok} and @samp{-okdir}. +If the @var{PATH} environment variable includes the current directory +(by explicitly including @samp{.} or by having an empty element), and +the find command line includes @samp{-execdir} or @samp{-okdir}, +@code{find} will refuse to run. @xref{Security Considerations}, for a +more detailed discussion of security matters. + +@item POSIXLY_CORRECT +Determines the block size used by @samp{-ls} and @samp{-fls}. +If @var{POSIXLY_CORRECT} is set, blocks are units of 512 bytes. Otherwise +they are units of 1024 bytes. + +Setting this variable also turns off warning messages (that is, implies +@samp{-nowarn}) by default, because POSIX requires that apart from +the output for @samp{-ok}, all messages printed on stderr are +diagnositcs and must result in a non-zero exit status. + +Arguments to @samp{-perm} beginning with @samp{+} are treated +differently when POSIXLY_CORRECT is set. See +@ref{Mode Bits,-perm,File Mode Bits}. + +@item TZ +Affects the time zone used for some of the time-related format +directives of @samp{-printf} and @samp{-fprintf}. +@end table + + + +@node Common Tasks +@chapter Common Tasks + +The sections that follow contain some extended examples that both give +a good idea of the power of these programs, and show you how to solve +common real-world problems. + +@menu +* Viewing And Editing:: +* Archiving:: +* Cleaning Up:: +* Strange File Names:: +* Fixing Permissions:: +* Classifying Files:: +@end menu + +@node Viewing And Editing +@section Viewing And Editing + +To view a list of files that meet certain criteria, simply run your +file viewing program with the file names as arguments. Shells +substitute a command enclosed in backquotes with its output, so the +whole command looks like this: + +@example +less `find /usr/include -name '*.h' | xargs grep -l mode_t` +@end example + +@noindent +You can edit those files by giving an editor name instead of a file +viewing program: + +@example +emacs `find /usr/include -name '*.h' | xargs grep -l mode_t` +@end example + +Because there is a limit to the length of any individual command line, +there is a limit to the number of files that can be handled in this +way. We can get around this difficulty by using xargs like this: + +@example +find /usr/include -name '*.h' | xargs grep -l mode_t > todo +xargs --arg-file=todo emacs +@end example + +Here, @code{xargs} will run @code{emacs} as many times as necessary to +visit all of the files listed in the file @file{todo}. + +@node Archiving +@section Archiving + +You can pass a list of files produced by @code{find} to a file +archiving program. GNU @code{tar} and @code{cpio} can both read lists +of file names from the standard input---either delimited by nulls (the +safe way) or by blanks (the lazy, risky default way). To use +null-delimited names, give them the @samp{--null} option. You can +store a file archive in a file, write it on a tape, or send it over a +network to extract on another machine. + +One common use of @code{find} to archive files is to send a list of +the files in a directory tree to @code{cpio}. Use @samp{-depth} so if +a directory does not have write permission for its owner, its contents +can still be restored from the archive since the directory's +permissions are restored after its contents. Here is an example of +doing this using @code{cpio}; you could use a more complex @code{find} +expression to archive only certain files. + +@example +find . -depth -print0 | + cpio --create --null --format=crc --file=/dev/nrst0 +@end example + +You could restore that archive using this command: + +@example +cpio --extract --null --make-dir --unconditional \ + --preserve --file=/dev/nrst0 +@end example + +Here are the commands to do the same things using @code{tar}: + +@example +find . -depth -print0 | + tar --create --null --files-from=- --file=/dev/nrst0 + +tar --extract --null --preserve-perm --same-owner \ + --file=/dev/nrst0 +@end example + +@c Idea from Rick Sladkey. +Here is an example of copying a directory from one machine to another: + +@example +find . -depth -print0 | cpio -0o -Hnewc | + rsh @var{other-machine} "cd `pwd` && cpio -i0dum" +@end example + +@node Cleaning Up +@section Cleaning Up + +@c Idea from Jim Meyering. +This section gives examples of removing unwanted files in various +situations. Here is a command to remove the CVS backup files created +when an update requires a merge: + +@example +find . -name '.#*' -print0 | xargs -0r rm -f +@end example + +The command above works, but the following is safer: + +@example +find . -name '.#*' -depth -delete +@end example + +@c Idea from Franc,ois Pinard. +You can run this command to clean out your clutter in @file{/tmp}. +You might place it in the file your shell runs when you log out +(@file{.bash_logout}, @file{.logout}, or @file{.zlogout}, depending on +which shell you use). + +@example +find /tmp -depth -user "$LOGNAME" -type f -delete +@end example + +If your @code{find} command removes directories, you may find that +you get a spurious error message when @code{find} tries to recurse +into a directory that has now been removed. Using the @samp{-depth} +option will normally resolve this problem. + +@c Idea from Noah Friedman. +To remove old Emacs backup and auto-save files, you can use a command +like the following. It is especially important in this case to use +null-terminated file names because Emacs packages like the VM mailer +often create temporary file names with spaces in them, like +@file{#reply to David J. MacKenzie<1>#}. + +@example +find ~ \( -name '*~' -o -name '#*#' \) -print0 | + xargs --no-run-if-empty --null rm -vf +@end example + +Removing old files from @file{/tmp} is commonly done from @code{cron}: + +@c Idea from Kaveh Ghazi. +@example +find /tmp /var/tmp -depth -not -type d -mtime +3 -delete +find /tmp /var/tmp -depth -mindepth 1 -type d -empty -delete +@end example + +The second @code{find} command above cleans out empty directories +depth-first (@samp{-delete} implies @samp{-depth} anyway), hoping that +the parents become empty and can be removed too. It uses +@samp{-mindepth} to avoid removing @file{/tmp} itself if it becomes +totally empty. + + +Lastly, an example of a program that almost certainly does not do what +the user intended: + +@c inspired by Savannah bug #20865 (Bruno De Fraine) +@example +find dirname -delete -name quux +@end example + +If the user hoped to delete only files named @file{quux} they will get +an unpleasant surprise; this command will attempt to delete everything +at or below the starting point @file{dirname}. This is because +@code{find} evaluates the items on the command line as an expression. +The @code{find} program will normally execute an action if the +preceeding action succeeds. Here, there is no action or test before +the @samp{-delete} so it will always be executed. The @samp{-name +quux} test will be performed for files we successfully deleted, but +that test has no effect since @samp{-delete} also disables the default +@samp{-print} operation. So the above example will probably delete a +lot of files the user didn't want to delete. + +This command is also likely to do something you did not intend: +@example +find dirname -path dirname/foo -prune -o -delete +@end example + +Because @samp{-delete} turns on @samp{-depth}, the @samp{-prune} +action has no effect and files in @file{dirname/foo} will be deleted +too. + + +@node Strange File Names +@section Strange File Names + +@c Idea from: +@c From: tmatimar@isgtec.com (Ted Timar) +@c Newsgroups: comp.unix.questions,comp.unix.shell,comp.answers,news.answers +@c Subject: Unix - Frequently Asked Questions (2/7) [Frequent posting] +@c Subject: How do I remove a file with funny characters in the filename ? +@c Date: Thu Mar 18 17:16:55 EST 1993 +@code{find} can help you remove or rename a file with strange +characters in its name. People are sometimes stymied by files whose +names contain characters such as spaces, tabs, control characters, or +characters with the high bit set. The simplest way to remove such +files is: + +@example +rm -i @var{some*pattern*that*matches*the*problem*file} +@end example + +@code{rm} asks you whether to remove each file matching the given +pattern. If you are using an old shell, this approach might not work +if the file name contains a character with the high bit set; the shell +may strip it off. A more reliable way is: + +@example +find . -maxdepth 1 @var{tests} -okdir rm '@{@}' \; +@end example + +@noindent +where @var{tests} uniquely identify the file. The @samp{-maxdepth 1} +option prevents @code{find} from wasting time searching for the file +in any subdirectories; if there are no subdirectories, you may omit +it. A good way to uniquely identify the problem file is to figure out +its inode number; use + +@example +ls -i +@end example + +Suppose you have a file whose name contains control characters, and +you have found that its inode number is 12345. This command prompts +you for whether to remove it: + +@example +find . -maxdepth 1 -inum 12345 -okdir rm -f '@{@}' \; +@end example + +If you don't want to be asked, perhaps because the file name may +contain a strange character sequence that will mess up your screen +when printed, then use @samp{-execdir} instead of @samp{-okdir}. + +If you want to rename the file instead, you can use @code{mv} instead +of @code{rm}: + +@example +find . -maxdepth 1 -inum 12345 -okdir mv '@{@}' @var{new-file-name} \; +@end example + +@node Fixing Permissions +@section Fixing Permissions + +Suppose you want to make sure that everyone can write to the +directories in a certain directory tree. Here is a way to find +directories lacking either user or group write permission (or both), +and fix their permissions: + +@example +find . -type d -not -perm -ug=w | xargs chmod ug+w +@end example + +@noindent +You could also reverse the operations, if you want to make sure that +directories do @emph{not} have world write permission. + +@node Classifying Files +@section Classifying Files + +@c Idea from: +@c From: martin@mwtech.UUCP (Martin Weitzel) +@c Newsgroups: comp.unix.wizards,comp.unix.questions +@c Subject: Advanced usage of 'find' (Re: Unix security automating script) +@c Date: 22 Mar 90 15:05:19 GMT +If you want to classify a set of files into several groups based on +different criteria, you can use the comma operator to perform multiple +independent tests on the files. Here is an example: + +@example +find / -type d \( -perm -o=w -fprint allwrite , \ + -perm -o=x -fprint allexec \) + +echo "Directories that can be written to by everyone:" +cat allwrite +echo "" +echo "Directories with search permissions for everyone:" +cat allexec +@end example + +@code{find} has only to make one scan through the directory tree +(which is one of the most time consuming parts of its work). + +@node Worked Examples +@chapter Worked Examples + +The tools in the findutils package, and in particular @code{find}, +have a large number of options. This means that quite often, +there is more than one way to do things. Some of the options +and facilities only exist for compatibility with other tools, and +findutils provides improved ways of doing things. + +This chapter describes a number of useful tasks that are commonly +performed, and compares the different ways of achieving them. + +@menu +* Deleting Files:: +* Copying A Subset of Files:: +* Updating A Timestamp File:: +@end menu + +@node Deleting Files +@section Deleting Files + +One of the most common tasks that @code{find} is used for is locating +files that can be deleted. This might include: + +@itemize +@item +Files last modified more than 3 years ago which haven't been accessed +for at least 2 years +@item +Files belonging to a certain user +@item +Temporary files which are no longer required +@end itemize + +This example concentrates on the actual deletion task rather than on +sophisticated ways of locating the files that need to be deleted. +We'll assume that the files we want to delete are old files underneath +@file{/var/tmp/stuff}. + +@subsection The Traditional Way + +The traditional way to delete files in @file{/var/tmp/stuff} that have +not been modified in over 90 days would have been: + +@smallexample +find /var/tmp/stuff -mtime +90 -exec /bin/rm @{@} \; +@end smallexample + +The above command uses @samp{-exec} to run the @code{/bin/rm} command +to remove each file. This approach works and in fact would have +worked in Version 7 Unix in 1979. However, there are a number of +problems with this approach. + + +The most obvious problem with the approach above is that it causes +@code{find} to fork every time it finds a file that needs to delete, +and the child process then has to use the @code{exec} system call to +launch @code{/bin/rm}. All this is quite inefficient. If we are +going to use @code{/bin/rm} to do this job, it is better to make it +delete more than one file at a time. + +The most obvious way of doing this is to use the shell's command +expansion feature: + +@smallexample +/bin/rm `find /var/tmp/stuff -mtime +90 -print` +@end smallexample +or you could use the more modern form +@smallexample +/bin/rm $(find /var/tmp/stuff -mtime +90 -print) +@end smallexample + +The commands above are much more efficient than the first attempt. +However, there is a problem with them. The shell has a maximum +command length which is imposed by the operating system (the actual +limit varies between systems). This means that while the command +expansion technique will usually work, it will suddenly fail when +there are lots of files to delete. Since the task is to delete +unwanted files, this is precisely the time we don't want things to go +wrong. + +@subsection Making Use of xargs + +So, is there a way to be more efficient in the use of @code{fork()} +and @code{exec()} without running up against this limit? +Yes, we can be almost optimally efficient by making use +of the @code{xargs} command. The @code{xargs} command reads arguments +from its standard input and builds them into command lines. We can +use it like this: + +@smallexample +find /var/tmp/stuff -mtime +90 -print | xargs /bin/rm +@end smallexample + +For example if the files found by @code{find} are +@file{/var/tmp/stuff/A}, +@file{/var/tmp/stuff/B} and +@file{/var/tmp/stuff/C} then @code{xargs} might issue the commands + +@smallexample +/bin/rm /var/tmp/stuff/A /var/tmp/stuff/B +/bin/rm /var/tmp/stuff/C +@end smallexample + +The above assumes that @code{xargs} has a very small maximum command +line length. The real limit is much larger but the idea is that +@code{xargs} will run @code{/bin/rm} as many times as necessary to get +the job done, given the limits on command line length. + +This usage of @code{xargs} is pretty efficient, and the @code{xargs} +command is widely implemented (all modern versions of Unix offer it). +So far then, the news is all good. However, there is bad news too. + +@subsection Unusual characters in filenames + +Unix-like systems allow any characters to appear in file names with +the exception of the ASCII NUL character and the backslash. +Backslashes can occur in path names (as the directory separator) but +not in the names of actual directory entries. This means that the +list of files that @code{xargs} reads could in fact contain white space +characters --- spaces, tabs and newline characters. Since by default, +@code{xargs} assumes that the list of files it is reading uses white +space as an argument separator, it cannot correctly handle the case +where a filename actually includes white space. This makes the +default behaviour of @code{xargs} almost useless for handling +arbitrary data. + +To solve this problem, GNU findutils introduced the @samp{-print0} +action for @code{find}. This uses the ASCII NUL character to separate +the entries in the file list that it produces. This is the ideal +choice of separator since it is the only character that cannot appear +within a path name. The @samp{-0} option to @code{xargs} makes it +assume that arguments are separated with ASCII NUL instead of white +space. It also turns off another misfeature in the default behaviour +of @code{xargs}, which is that it pays attention to quote characters +in its input. Some versions of @code{xargs} also terminate when they +see a lone @samp{_} in the input, but GNU @code{find} no longer does +that (since it has become an optional behaviour in the Unix standard). + +So, putting @code{find -print0} together with @code{xargs -0} we get +this command: + +@smallexample +find /var/tmp/stuff -mtime +90 -print0 | xargs -0 /bin/rm +@end smallexample + +The result is an efficient way of proceeding that +correctly handles all the possible characters that could appear in the +list of files to delete. This is good news. However, there is, as +I'm sure you're expecting, also more bad news. The problem is that +this is not a portable construct; although other versions of Unix +(notably BSD-derived ones) support @samp{-print0}, it's not +universal. So, is there a more universal mechanism? + +@subsection Going back to -exec + +There is indeed a more universal mechanism, which is a slight +modification to the @samp{-exec} action. The normal @samp{-exec} +action assumes that the command to run is terminated with a semicolon +(the semicolon normally has to be quoted in order to protect it from +interpretation as the shell command separator). The SVR4 edition of +Unix introduced a slight variation, which involves terminating the +command with @samp{+} instead: + +@smallexample +find /var/tmp/stuff -mtime +90 -exec /bin/rm @{@} \+ +@end smallexample + +The above use of @samp{-exec} causes @code{find} to build up a long +command line and then issue it. This can be less efficient than some +uses of @code{xargs}; for example @code{xargs} allows new command +lines to be built up while the previous command is still executing, and +allows you to specify a number of commands to run in parallel. +However, the @code{find @dots{} -exec @dots{} +} construct has the advantage +of wide portability. GNU findutils did not support @samp{-exec @dots{} +} +until version 4.2.12; one of the reasons for this is that it already +had the @samp{-print0} action in any case. + + +@subsection A more secure version of -exec + +The command above seems to be efficient and portable. However, +within it lurks a security problem. The problem is shared with +all the commands we've tried in this worked example so far, too. The +security problem is a race condition; that is, if it is possible for +somebody to manipulate the filesystem that you are searching while you +are searching it, it is possible for them to persuade your @code{find} +command to cause the deletion of a file that you can delete but they +normally cannot. + +The problem occurs because the @samp{-exec} action is defined by the +@acronym{POSIX} standard to invoke its command with the same working directory +as @code{find} had when it was started. This means that the arguments +which replace the @{@} include a relative path from @code{find}'s +starting point down the file that needs to be deleted. For example, + +@smallexample +find /var/tmp/stuff -mtime +90 -exec /bin/rm @{@} \+ +@end smallexample + +might actually issue the command: + +@smallexample +/bin/rm /var/tmp/stuff/A /var/tmp/stuff/B /var/tmp/stuff/passwd +@end smallexample + +Notice the file @file{/var/tmp/stuff/passwd}. Likewise, the command: + +@smallexample +cd /var/tmp && find stuff -mtime +90 -exec /bin/rm @{@} \+ +@end smallexample + +might actually issue the command: + +@smallexample +/bin/rm stuff/A stuff/B stuff/passwd +@end smallexample + +If an attacker can rename @file{stuff} to something else (making use +of their write permissions in @file{/var/tmp}) they can replace it +with a symbolic link to @file{/etc}. That means that the +@code{/bin/rm} command will be invoked on @file{/etc/passwd}. If you +are running your @code{find} command as root, the attacker has just managed +to delete a vital file. All they needed to do to achieve this was +replace a subdirectory with a symbolic link at the vital moment. + +There is however, a simple solution to the problem. This is an action +which works a lot like @code{-exec} but doesn't need to traverse a +chain of directories to reach the file that it needs to work on. This +is the @samp{-execdir} action, which was introduced by the BSD family +of operating systems. The command, + +@smallexample +find /var/tmp/stuff -mtime +90 -execdir /bin/rm @{@} \+ +@end smallexample + +might delete a set of files by performing these actions: + +@enumerate +@item +Change directory to /var/tmp/stuff/foo +@item +Invoke @code{/bin/rm ./file1 ./file2 ./file3} +@item +Change directory to /var/tmp/stuff/bar +@item +Invoke @code{/bin/rm ./file99 ./file100 ./file101} +@end enumerate + +This is a much more secure method. We are no longer exposed to a race +condition. For many typical uses of @code{find}, this is the best +strategy. It's reasonably efficient, but the length of the command +line is limited not just by the operating system limits, but also by +how many files we actually need to delete from each directory. + +Is it possible to do any better? In the case of general file +processing, no. However, in the specific case of deleting files it is +indeed possible to do better. + +@subsection Using the -delete action + +The most efficient and secure method of solving this problem is to use +the @samp{-delete} action: + +@smallexample +find /var/tmp/stuff -mtime +90 -delete +@end smallexample + +This alternative is more efficient than any of the @samp{-exec} or +@samp{-execdir} actions, since it entirely avoids the overhead of +forking a new process and using @code{exec} to run @code{/bin/rm}. It +is also normally more efficient than @code{xargs} for the same +reason. The file deletion is performed from the directory containing +the entry to be deleted, so the @samp{-delete} action has the same +security advantages as the @samp{-execdir} action has. + +The @samp{-delete} action was introduced by the BSD family of +operating systems. + +@subsection Improving things still further + +Is it possible to improve things still further? Not without either +modifying the system library to the operating system or having more specific +knowledge of the layout of the filesystem and disk I/O subsystem, or +both. + +The @code{find} command traverses the filesystem, reading +directories. It then issues a separate system call for each file to +be deleted. If we could modify the operating system, there are +potential gains that could be made: + +@itemize +@item +We could have a system call to which we pass more than one filename +for deletion +@item +Alternatively, we could pass in a list of inode numbers (on GNU/Linux +systems, @code{readdir()} also returns the inode number of each +directory entry) to be deleted. +@end itemize + +The above possibilities sound interesting, but from the kernel's point +of view it is difficult to enforce standard Unix access controls for +such processing by inode number. Such a facility would probably +need to be restricted to the superuser. + +Another way of improving performance would be to increase the +parallelism of the process. For example if the directory hierarchy we +are searching is actually spread across a number of disks, we might +somehow be able to arrange for @code{find} to process each disk in +parallel. In practice GNU @code{find} doesn't have such an intimate +understanding of the system's filesystem layout and disk I/O +subsystem. + +However, since the system administrator can have such an understanding +they can take advantage of it like so: + +@smallexample +find /var/tmp/stuff1 -mtime +90 -delete & +find /var/tmp/stuff2 -mtime +90 -delete & +find /var/tmp/stuff3 -mtime +90 -delete & +find /var/tmp/stuff4 -mtime +90 -delete & +wait +@end smallexample + +In the example above, four separate instances of @code{find} are used +to search four subdirectories in parallel. The @code{wait} command +simply waits for all of these to complete. Whether this approach is +more or less efficient than a single instance of @code{find} depends +on a number of things: + +@itemize +@item +Are the directories being searched in parallel actually on separate +disks? If not, this parallel search might just result in a lot of +disk head movement and so the speed might even be slower. +@item +Other activity - are other programs also doing things on those disks? +@end itemize + + +@subsection Conclusion + +The fastest and most secure way to delete files with the help of +@code{find} is to use @samp{-delete}. Using @code{xargs -0 -P N} can +also make effective use of the disk, but it is not as secure. + +In the case where we're doing things other than deleting files, the +most secure alternative is @samp{-execdir @dots{} +}, but this is not as +portable as the insecure action @samp{-exec @dots{} +}. + +The @samp{-delete} action is not completely portable, but the only +other possibility which is as secure (@samp{-execdir}) is no more +portable. The most efficient portable alternative is @samp{-exec +@dots{}+}, but this is insecure and isn't supported by versions of GNU +findutils prior to 4.2.12. + +@node Copying A Subset of Files +@section Copying A Subset of Files + +Suppose you want to copy some files from @file{/source-dir} to +@file{/dest-dir}, but there are a small number of files in +@file{/source-dir} you don't want to copy. + +One option of course is @code{cp /source-dir /dest-dir} followed by +deletion of the unwanted material under @file{/dest-dir}. But often +that can be inconvenient, because for example we would have copied a +large amount of extraneous material, or because @file{/dest-dir} is +too small. Naturally there are many other possible reasons why this +strategy may be unsuitable. + +So we need to have some way of identifying which files we want to +copy, and we need to have a way of copying that file list. The second +part of this condition is met by @code{cpio -p}. Of course, we can +identify the files we wish to copy by using @code{find}. Here is a +command that solves our problem: + +@example +cd /source-dir +find . -name '.snapshot' -prune -o \( \! -name '*~' -print0 \) | +cpio -pmd0 /dest-dir +@end example + +The first part of the @code{find} command here identifies files or +directoires named @file{.snapshot} and tells @code{find} not to +recurse into them (since they do not need to be copied). The +combination @code{-name '.snapshot' -prune} yields false for anything +that didn't get pruned, but it is exactly those files we want to +copy. Therefore we need to use an OR (@samp{-o}) condition to +introduce the rest of our expression. The remainder of the expression +simply arranges for the name of any file not ending in @samp{~} to be +printed. + +Using @code{-print0} ensures that white space characters in file names +do not pose a problem. The @code{cpio} command does the actual work +of copying files. The program as a whole fails if the @code{cpio} +program returns nonzero. If the @code{find} command returns non-zero +on the other hand, the Unix shell will not diagnose a problem (since +@code{find} is not the last command in the pipeline). + + +@node Updating A Timestamp File +@section Updating A Timestamp File + +Suppose we have a directory full of files which is maintained with a +set of automated tools; perhaps one set of tools updates them and +another set of tools uses the result. In this situation, it might be +useful for the second set of tools to know if the files have recently +been changed. It might be useful, for example, to have a 'timestamp' +file which gives the timestamp on the newest file in the collection. + +We can use @code{find} to achieve this, but there are several +different ways to do it. + +@subsection Updating the Timestamp The Wrong Way + +The obvious but wrong answer is just to use @samp{-newer}:- + +@smallexample +find subdir -newer timestamp -exec touch -r @{@} timestamp \; +@end smallexample + +This does the right sort of thing but has a bug. Suppose that two +files in the subdirectory have been updated, and that these are called +@file{file1} and @file{file2}. The command above will update +@file{timestamp} with the modification time of @file{file1} or that of +@file{file2}, but we don't know which one. Since the timestamps on +@file{file1} and @file{file2} will in general be different, this could +well be the wrong value. + +One solution to this problem is to modify @code{find} to recheck the +modification time of @file{timestamp} every time a file is to be +compared against it, but that will reduce the performance of +@code{find}. + +@subsection Using the test utility to compare timestamps + +The @code{test} command can be used to compare timestamps: + +@smallexample +find subdir -exec test @{@} -nt timestamp \; -exec touch -r @{@} timestamp \; +@end smallexample + +This will ensure that any changes made to the modification time of +@file{timestamp} that take place during the execution of @code{find} +are taken into account. This resolves our earlier problem, but +unfortunately this runs much more slowly. + +@subsection A combined approach + +We can of course still use @samp{-newer} to cut down on the number of +calls to @code{test}: + +@smallexample +find subdir -newer timestamp -a \ + -exec test @{@} -nt timestamp \; -a \ + -exec touch -r @{@} timestamp \; +@end smallexample + +Here, the @samp{-newer} test excludes all the files which are +definitely older than the timestamp, but all the files which are newer +than the old value of the timestamp are compared against the current +updated timestamp. + +This is indeed faster in general, but the speed difference will depend +on how many updated files there are. + +@subsection Using -printf and sort to compare timestamps + +It is possible to use the @samp{-printf} action to abandon the use of +@code{test} entirely: + +@smallexample +newest=$(find subdir -newer timestamp -printf "%A@:%p\n" | + sort -n | + tail -1 | + cut -d: -f2- ) +touch -r "$@{newest:-timestamp@}" timestamp +@end smallexample + +The command above works by generating a list of the timestamps and +names of all the files which are newer than the timestamp. The +@code{sort}, @code{tail} and @code{cut} commands simply pull out the +name of the file with the largest timestamp value (that is, the latest +file). The @code{touch} command is then used to update the timestamp, + +The @code{"$@{newest:-timestamp@}"} expression simply expands to the +value of @code{$newest} if that variable is set, but to +@file{timestamp} otherwise. This ensures that an argument is always +given to the @samp{-r} option of the @code{touch} command. + +This approach seems quite efficient, but unfortunately it has a +problem. Many operating systems now keep file modification time +information at a granularity which is finer than one second. +Findutils version 4.3.3 and later will print a fractional part with +%A@@, but older versions will not. + + +@subsection Solving the problem with make + +Another tool which often works with timestamps is @code{make}. We can +use @code{find} to generate a @file{Makefile} file on the fly and then +use @code{make} to update the timestamps: + +@smallexample +makefile=$(mktemp) +find subdir \ + \( \! -xtype l \) \ + -newer timestamp \ + -printf "timestamp:: %p\n\ttouch -r %p timestamp\n\n" > "$makefile" +make -f "$makefile" +rm -f "$makefile" +@end smallexample + +Unfortunately although the solution above is quite elegant, it fails +to cope with white space within file names, and adjusting it to do so +would require a rather complex shell script. + + +@subsection Coping with odd filenames too + +We can fix both of these problems (looping and problems with white +space), and do things more efficiently too. The following command +works with newlines and doesn't need to sort the list of filenames. + +@smallexample +find subdir -newer timestamp -printf "%A@@:%p\0" | + perl -0 newest.pl | + xargs --no-run-if-empty --null -i \ + find @{@} -maxdepth 0 -newer timestamp -exec touch -r @{@} timestamp \; +@end smallexample + +The first @code{find} command generates a list of files which are +newer than the original timestamp file, and prints a list of them with +their timestamps. The @file{newest.pl} script simply filters out all +the filenames which have timestamps which are older than whatever the +newest file is:- + +@smallexample +@verbatim +#! /usr/bin/perl -0 +my @newest = (); +my $latest_stamp = undef; +while (<>) { + my ($stamp, $name) = split(/:/); + if (!defined($latest_stamp) || ($tstamp > $latest_stamp)) { + $latest_stamp = $stamp; + @newest = (); + } + if ($tstamp >= $latest_stamp) { + push @newest, $name; + } +} +print join("\0", @newest); +@end verbatim +@end smallexample + +This prints a list of zero or more files, all of which are newer than +the original timestamp file, and which have the same timestamp as each +other, to the nearest second. The second @code{find} command takes +each resulting file one at a time, and if that is newer than the +timestamp file, the timestamp is updated. + +@node Security Considerations +@chapter Security Considerations + +Security considerations are important if you are using @code{find} or +@code{xargs} to search for or process files that don't belong to you +or which other people have control. Security considerations +relating to @code{locate} may also apply if you have files which you +do not want others to see. + +The most severe forms of security problems affecting +@code{find} and related programs are when third parties bring +about a situation allowing them to do something +they would normally not be able to accomplish. This is called @emph{privilege +elevation}. This might include deleting files they would not normally +be able to delete. It is common for the operating system to periodically +invoke @code{find} for self-maintenance purposes. These invocations of +@code{find} are particularly problematic from a security point of view +as these are often invoked by the superuser and search the entire +filesystem hierarchy. Generally, the severity of any associated problem depends +on what the system is going to do with the files found by @code{find}. + +@menu +* Levels of Risk:: What is your level of exposure to security problems? +* Security Considerations for find:: Security problems with find +* Security Considerations for xargs:: Security problems with xargs +* Security Considerations for locate:: Security problems with locate +* Security Summary:: That was all very complex, what does it boil down to? +@end menu + + +@node Levels of Risk +@section Levels of Risk + +There are some security risks inherent in the use of @code{find}, +@code{xargs} and (to a lesser extent) @code{locate}. The severity of +these risks depends on what sort of system you are using: + +@table @strong +@item High risk +Multi-user systems where you do not control (or trust) the other +users, and on which you execute @code{find}, including areas where +those other users can manipulate the filesystem (for example beneath +@file{/home} or @file{/tmp}). + +@item Medium Risk +Systems where the actions of other users can create file names chosen +by them, but to which they don't have access while @code{find} is +being run. This access might include leaving programs running (shell +background jobs, @code{at} or @code{cron} tasks, for example). On +these sorts of systems, carefully written commands (avoiding use of +@samp{-print} for example) should not expose you to a high degree of +risk. Most systems fall into this category. + +@item Low Risk +Systems to which untrusted parties do not have access, cannot create +file names of their own choice (even remotely) and which contain no +security flaws which might enable an untrusted third party to gain +access. Most systems do not fall into this category because there are +many ways in which external parties can affect the names of files that +are created on your system. The system on which I am writing this for +example automatically downloads software updates from the Internet; +the names of the files in which these updates exist are chosen by +third parties@footnote{Of course, I trust these parties to a large +extent anyway, because I install software provided by them; I choose +to trust them in this way, and that's a deliberate choice}. +@end table + +In the discussion above, ``risk'' denotes the likelihood that someone +can cause @code{find}, @code{xargs}, @code{locate} or some other +program which is controlled by them to do something you did not +intend. The levels of risk suggested do not take any account of the +consequences of this sort of event. That is, if you operate a ``low +risk'' type system, but the consequences of a security problem are +disastrous, then you should still give serious thought to all the +possible security problems, many of which of course will not be +discussed here -- this section of the manual is intended to be +informative but not comprehensive or exhaustive. + +If you are responsible for the operation of a system where the +consequences of a security problem could be very important, you should +do two things:- + +@enumerate +@item Define a security policy which defines who is allowed to do what +on your system. +@item Seek competent advice on how to enforce your policy, detect +breaches of that policy, and take account of any potential problems +that might fall outside the scope of your policy. +@end enumerate + + +@node Security Considerations for find +@section Security Considerations for @code{find} + + +Some of the actions @code{find} might take have a direct effect; +these include @code{-exec} and @code{-delete}. However, it is also +common to use @code{-print} explicitly or implicitly, and so if +@code{find} produces the wrong list of file names, that can also be a +security problem; consider the case for example where @code{find} is +producing a list of files to be deleted. + +We normally assume that the @code{find} command line expresses the +file selection criteria and actions that the user had in mind -- that +is, the command line is ``trusted'' data. + +From a security analysis point of view, the output of @code{find} +should be correct; that is, the output should contain only the names +of those files which meet the user's criteria specified on the command +line. This applies for the @code{-exec} and @code{-delete} actions; +one can consider these to be part of the output. + +On the other hand, the contents of the filesystem can be manipulated +by other people, and hence we regard this as ``untrusted'' data. This +implies that the @code{find} command line is a filter which converts +the untrusted contents of the filesystem into a correct list of output +files. + +The filesystem will in general change while @code{find} is searching +it; in fact, most of the potential security problems with @code{find} +relate to this issue in some way. + +@dfn{Race conditions} are a general class of security problem where the +relative ordering of actions taken by @code{find} (for example) and +something else are critically important in getting the correct and expected result@footnote{This is more or less the +definition of the term ``race condition''} . + +For @code{find}, an attacker might move or rename files or directories in +the hope that an action might be taken against a file which was not +normally intended to be affected. Alternatively, this sort of attack +might be intended to persuade @code{find} to search part of the +filesystem which would not normally be included in the search +(defeating the @code{-prune} action for example). + +@menu +* Problems with -exec and filenames:: +* Changing the Current Working Directory:: +* Race Conditions with -exec:: +* Race Conditions with -print and -print0:: +@end menu + +@node Problems with -exec and filenames +@subsection Problems with -exec and filenames + +It is safe in many cases to use the @samp{-execdir} action with any +file name. Because @samp{-execdir} prefixes the arguments it passes +to programs with @samp{./}, you will not accidentally pass an argument +which is interpreted as an option. For example the file @file{-f} +would be passed to @code{rm} as @file{./-f}, which is harmless. + +However, your degree of safety does depend on the nature of the +program you are running. For example constructs such as these two commands + +@example +# risky +find -exec sh -c "something @{@}" \; +find -execdir sh -c "something @{@}" \; +@end example + +are very dangerous. The reason for this is that the @samp{@{@}} is +expanded to a filename which might contain a semicolon or other +characters special to the shell. If for example someone creates the +file @file{/tmp/foo; rm -rf $HOME} then the two commands above could +delete someone's home directory. + +So for this reason do not run any command which will pass untrusted +data (such as the names of files) to commands which interpret +arguments as commands to be further interpreted (for example +@samp{sh}). + +In the case of the shell, there is a clever workaround for this +problem: + +@example +# safer +find -exec sh -c 'something "$@@"' @{@} \; +find -execdir sh -c 'something "$@@"' @{@}\; +@end example + +This approach is not guaranteed to avoid every problem, but it is much +safer than substituting data of an attacker's choice into the text of +a shell command. + +@node Changing the Current Working Directory +@subsection Changing the Current Working Directory + +As @code{find} searches the filesystem, it finds subdirectories and +then searches within them by changing its working directory. First, +@code{find} reaches and recognises a subdirectory. It then decides if that +subdirectory meets the criteria for being searched; that is, any +@samp{-xdev} or @samp{-prune} expressions are taken into account. The +@code{find} program will then change working directory and proceed to +search the directory. + +A race condition attack might take the form that once the checks +relevant to @samp{-xdev} and @samp{-prune} have been done, an attacker +might rename the directory that was being considered, and put in its +place a symbolic link that actually points somewhere else. + +The idea behind this attack is to fool @code{find} into going into the +wrong directory. This would leave @code{find} with a working +directory chosen by an attacker, bypassing any protection apparently +provided by @samp{-xdev} and @samp{-prune}, and any protection +provided by being able to @emph{not} list particular directories on +the @code{find} command line. This form of attack is particularly +problematic if the attacker can predict when the @code{find} command +will be run, as is the case with @code{cron} tasks for example. + +GNU @code{find} has specific safeguards to prevent this general class +of problem. The exact form of these safeguards depends on the +properties of your system. + +@menu +* O_NOFOLLOW:: Safely changing directory using fchdir(). +* Systems without O_NOFOLLOW:: Checking for symbolic links after chdir(). +@end menu + +@node O_NOFOLLOW +@subsubsection O_NOFOLLOW + +If your system supports the O_NOFOLLOW flag @footnote{GNU/Linux +(kernel version 2.1.126 and later) and FreeBSD (3.0-CURRENT and later) +support this} to the @code{open(2)} system call, @code{find} uses it +when safely changing directory. The target directory is first opened +and then @code{find} changes working directory with the +@code{fchdir()} system call. This ensures that symbolic links are not +followed, preventing the sort of race condition attack in which use +is made of symbolic links. + +If for any reason this approach does not work, @code{find} will fall +back on the method which is normally used if O_NOFOLLOW is not +supported. + +You can tell if your system supports O_NOFOLLOW by running + +@example +find --version +@end example + +This will tell you the version number and which features are enabled. +For example, if I run this on my system now, this gives: +@example +GNU find version 4.2.18-CVS +Features enabled: D_TYPE O_NOFOLLOW(enabled) +@end example + +Here, you can see that I am running a version of @code{find} which was +built from the development (CVS) code prior to the release of +findutils-4.2.18, and that the D_TYPE and O_NOFOLLOW features are +present. O_NOFOLLOW is qualified with ``enabled''. This simply means +that the current system seems to support O_NOFOLLOW. This check is +needed because it is possible to build @code{find} on a system that +defines O_NOFOLLOW and then run it on a system that ignores the +O_NOFOLLOW flag. We try to detect such cases at startup by checking +the operating system and version number; when this happens you will +see ``O_NOFOLLOW(disabled)'' instead. + +@node Systems without O_NOFOLLOW +@subsubsection Systems without O_NOFOLLOW + +The strategy for preventing this type of problem on systems that lack +support for the O_NOFOLLOW flag is more complex. Each time +@code{find} changes directory, it examines the directory it is about +to move to, issues the @code{chdir()} system call, and then checks +that it has ended up in the subdirectory it expected. If all is as +expected, processing continues as normal. However, there are two main +reasons why the directory might change: the use of an automounter and +the someone removing the old directory and replacing it with something +else while @code{find} is trying to descend into it. + +Where a filesystem ``automounter'' is in use it can be the case that +the use of the @code{chdir()} system call can itself cause a new +filesystem to be mounted at that point. On systems that do not +support O_NOFOLLOW, this will cause @code{find}'s security check to +fail. + +However, this does not normally represent a security problem, since +the automounter configuration is normally set up by the system +administrator. Therefore, if the @code{chdir()} sanity check fails, +@code{find} will make one more attempt@footnote{This may not be the +case for the fts-based executable}. If that succeeds, execution +carries on as normal. This is the usual case for automounters. + +Where an attacker is trying to exploit a race condition, the problem +may not have gone away on the second attempt. If this is the case, +@code{find} will issue a warning message and then ignore that +subdirectory. When this happens, actions such as @samp{-exec} or +@samp{-print} may already have taken place for the problematic +subdirectory. This is because @code{find} applies tests and actions +to directories before searching within them (unless @samp{-depth} was +specified). + +Because of the nature of the directory-change operation and security +check, in the worst case the only things that @code{find} would have +done with the directory are to move into it and back out to the +original parent. No operations would have been performed within that +directory. + +@node Race Conditions with -exec +@subsection Race Conditions with -exec + +The @samp{-exec} action causes another program to be run. It passes +to the program the name of the file which is being considered at the +time. The invoked program will typically then perform some action +on that file. Once again, there is a race condition which can be +exploited here. We shall take as a specific example the command + +@example +find /tmp -path /tmp/umsp/passwd -exec /bin/rm +@end example + +In this simple example, we are identifying just one file to be deleted +and invoking @code{/bin/rm} to delete it. A problem exists because +there is a time gap between the point where @code{find} decides that +it needs to process the @samp{-exec} action and the point where the +@code{/bin/rm} command actually issues the @code{unlink()} system +call to delete the file from the filesystem. Within this time period, an attacker can rename the +@file{/tmp/umsp} directory, replacing it with a symbolic link to +@file{/etc}. There is no way for @code{/bin/rm} to determine that it +is working on the same file that @code{find} had in mind. Once the +symbolic link is in place, the attacker has persuaded @code{find} to +cause the deletion of the @file{/etc/passwd} file, which is not the +effect intended by the command which was actually invoked. + +One possible defence against this type of attack is to modify the +behaviour of @samp{-exec} so that the @code{/bin/rm} command is run +with the argument @file{./passwd} and a suitable choice of working +directory. This would allow the normal sanity check that @code{find} +performs to protect against this form of attack too. Unfortunately, +this strategy cannot be used as the POSIX standard specifies that the +current working directory for commands invoked with @samp{-exec} must +be the same as the current working directory from which @code{find} +was invoked. This means that the @samp{-exec} action is inherently +insecure and can't be fixed. + +GNU @code{find} implements a more secure variant of the @samp{-exec} +action, @samp{-execdir}. The @samp{-execdir} action +ensures that it is not necessary to dereference subdirectories to +process target files. The current directory used to invoke programs +is the same as the directory in which the file to be processed exists +(@file{/tmp/umsp} in our example, and only the basename of the file to +be processed is passed to the invoked command, with a @samp{./} +prepended (giving @file{./passwd} in our example). + +The @samp{-execdir} action refuses to do anything if the current +directory is included in the @var{$PATH} environment variable. This +is necessary because @samp{-execdir} runs programs in the same +directory in which it finds files -- in general, such a directory +might be writable by untrusted users. For similar reasons, +@samp{-execdir} does not allow @samp{@{@}} to appear in the name of +the command to be run. + +@node Race Conditions with -print and -print0 +@subsection Race Conditions with -print and -print0 + +The @samp{-print} and @samp{-print0} actions can be used to produce a +list of files matching some criteria, which can then be used with some +other command, perhaps with @code{xargs}. Unfortunately, this means +that there is an unavoidable time gap between @code{find} deciding +that one or more files meet its criteria and the relevant command +being executed. For this reason, the @samp{-print} and @samp{-print0} +actions are just as insecure as @samp{-exec}. + +In fact, since the construction + +@example +find @dots{} -print | xargs @enddots{} +@end example + +does not cope correctly with newlines or other ``white space'' in +file names, and copes poorly with file names containing quotes, the +@samp{-print} action is less secure even than @samp{-print0}. + + +@comment node-name, next, previous, up +@comment @node Security Considerations for xargs +@node Security Considerations for xargs +@section Security Considerations for @code{xargs} + +The description of the race conditions affecting the @samp{-print} +action of @code{find} shows that @code{xargs} cannot be secure if it +is possible for an attacker to modify a filesystem after @code{find} +has started but before @code{xargs} has completed all its actions. + +However, there are other security issues that exist even if it is not +possible for an attacker to have access to the filesystem in real +time. Firstly, if it is possible for an attacker to create files with +names of their choice on the filesystem, then @code{xargs} is +insecure unless the @samp{-0} option is used. If a file with the name +@file{/home/someuser/foo/bar\n/etc/passwd} exists (assume that +@samp{\n} stands for a newline character), then @code{find @dots{} -print} +can be persuaded to print three separate lines: + +@example +/home/someuser/foo/bar + +/etc/passwd +@end example + +If it finds a blank line in the input, @code{xargs} will ignore it. +Therefore, if some action is to be taken on the basis of this list of +files, the @file{/etc/passwd} file would be included even if this was +not the intent of the person running find. There are circumstances in +which an attacker can use this to their advantage. The same +consideration applies to file names containing ordinary spaces rather +than newlines, except that of course the list of file names will no +longer contain an ``extra'' newline. + +This problem is an unavoidable consequence of the default behaviour of +the @code{xargs} command, which is specified by the POSIX standard. +The only ways to avoid this problem are either to avoid all use of +@code{xargs} in favour for example of @samp{find -exec} or (where +available) @samp{find -execdir}, or to use the @samp{-0} option, which +ensures that @code{xargs} considers file names to be separated by +ASCII NUL characters rather than whitespace. However, useful as this +option is, the POSIX standard does not make it mandatory. + +POSIX also specifies that @code{xargs} interprets quoting and trailing +whitespace specially in filenames, too. This means that using +@code{find ... -print | xargs ...} can cause the commands run by +@code{xargs} to receive a list of file names which is not the same as +the list printed by @code{find}. The interpretation of quotes and +trailing whitespace is turned off by the @samp{-0} argument to +@code{xargs}, which is another reason to use that option. + +@comment node-name, next, previous, up +@node Security Considerations for locate +@section Security Considerations for @code{locate} + +@subsection Race Conditions +It is fairly unusual for the output of @code{locate} to be fed into +another command. However, if this were to be done, this would raise +the same set of security issues as the use of @samp{find @dots{} -print}. +Although the problems relating to whitespace in file names can be +resolved by using @code{locate}'s @samp{-0} option, this still leaves +the race condition problems associated with @samp{find @dots{} -print0}. +There is no way to avoid these problems in the case of @code{locate}. + +@subsection Long File Name Bugs with Old-Format Databases +Old versions of @code{locate} have a bug in the way that old-format +databases are read. This bug affects the following versions of +@code{locate}: + +@enumerate +@item All releases prior to 4.2.31 +@item All 4.3.x releases prior to 4.3.7 +@end enumerate + +The affected versions of @code{locate} read file names into a +fixed-length 1026 byte buffer, allocated on the heap. This buffer is +not extended if file names are too long to fit into the buffer. No +range checking on the length of the filename is performed. This could +in theory lead to a privilege escalation attack. Findutils versions +4.3.0 to 4.3.6 are also affected. + +On systems using the old database format and affected versions of +@code{locate}, carefully-chosen long file names could in theory allow +malicious users to run code of their choice as any user invoking +locate. + +If remote users can choose the names of files stored on your system, +and these files are indexed by @code{updatedb}, this may be a remote +security vulnerability. Findutils version 4.2.31 and findutils +version 4.3.7 include fixes for this problem. The @code{updatedb}, +@code{bigram} and @code{code} programs do no appear to be affected. + +If you are also using GNU coreutils, you can use the following command +to determine the length of the longest file name on a given system: + +@example +find / -print0 | tr -c '\0' 'x' | tr '\0' '\n' | wc -L +@end example + +Although this problem is significant, the old database format is not +the default, and use of the old database format is not common. Most +installations and most users will not be affected by this problem. + + + +@node Security Summary +@section Summary + +Where untrusted parties can create files on the system, or affect the +names of files that are created, all uses for @code{find}, +@code{locate} and @code{xargs} have known security problems except the +following: + +@table @asis +@item Informational use only +Uses where the programs are used to prepare lists of file names upon +which no further action will ever be taken. + +@item @samp{-delete} +Use of the @samp{-delete} action with @code{find} to delete files +which meet specified criteria + +@item @samp{-execdir} +Use of the @samp{-execdir} action with @code{find} where the +@env{PATH} environment variable contains directories which contain +only trusted programs. +@end table + +@comment node-name, next, previous, up +@node Error Messages +@chapter Error Messages + +This section describes some of the error messages sometimes made by +@code{find}, @code{xargs}, or @code{locate}, explains them and in some +cases provides advice as to what you should do about this. + +This manual is written in English. The GNU findutils software +features translations of error messages for many languages. For this +reason the error messages produced by the programs are made to be as +self-explanatory as possible. This approach avoids leaving people to +figure out which test an English-language error message corresponds +to. Error messages which are self-explanatory will not normally be +mentioned in this document. For those messages mentioned in this +document, only the English-language version of the message will be +listed. + +@menu +* Error Messages From find:: +* Error Messages From xargs:: +* Error Messages From locate:: +* Error Messages From updatedb:: +@end menu + +@node Error Messages From find +@section Error Messages From @code{find} + +Most error messages produced by find are self-explanatory. Error +messages sometimes include a filename. When this happens, the +filename is quoted in order to prevent any unusual characters in the +filename making unwanted changes in the state of the terminal. + +@table @samp +@item invalid predicate `-foo' +This means that the @code{find} command line included something that +started with a dash or other special character. The @code{find} +program tried to interpret this as a test, action or option, but +didn't recognise it. If it was intended to be a test, check what was +specified against the documentation. If, on the other hand, the +string is the name of a file which has been expanded from a wildcard +(for example because you have a @samp{*} on the command line), +consider using @samp{./*} or just @samp{.} instead. + +@item unexpected extra predicate +This usually happens if you have an extra bracket on the command line +(for example @samp{find . -print \)}). + +@item Warning: filesystem /path/foo has recently been mounted +@itemx Warning: filesystem /path/foo has recently been unmounted +These messages might appear when @code{find} moves into a directory +and finds that the device number and inode are different to what it +expected them to be. If the directory @code{find} has moved into is +on an network filesystem (NFS), it will not issue this message, because +@code{automount} frequently mounts new filesystems on directories as +you move into them (that is how it knows you want to use the +filesystem). So, if you do see this message, be wary --- +@code{automount} may not have been responsible. Consider the +possibility that someone else is manipulating the filesystem while +@code{find} is running. Some people might do this in order to mislead +@code{find} or persuade it to look at one set of files when it thought +it was looking at another set. + +@item /path/foo changed during execution of find (old device number 12345, new device number 6789, filesystem type is ) [ref XXX] +This message is issued when @code{find} moves into a directory and ends up +somewhere it didn't expect to be. This happens in one of two +circumstances. Firstly, this happens when @code{automount} intervenes +on a system where @code{find} doesn't know how to determine what +the current set of mounted filesystems is. + +Secondly, this can happen when the device number of a directory +appears to change during a change of current directory, but +@code{find} is moving up the filesystem hierarchy rather than down into it. +In order to prevent @code{find} wandering off into some unexpected +part of the filesystem, we stop it at this point. + +@item Don't know how to use getmntent() to read `/etc/mtab'. This is a bug. +This message is issued when a problem similar to the above occurs on a +system where @code{find} doesn't know how to figure out the current +list of mount points. Ask for help on @email{bug-findutils@@gnu.org}. + +@item /path/foo/bar changed during execution of find (old inode number 12345, new inode number 67893, filesystem type is ) [ref XXX]"), +This message is issued when @code{find} moves into a directory and +discovers that the inode number of that directory +is different from the inode number that it obtained when it examined the +directory previously. This usually means that while +@code{find} was deep in a directory hierarchy doing a +time consuming operation, somebody has moved one of the parent directories to +another location in the same filesystem. This may or may not have been done +maliciously. In any case, @code{find} stops at this point +to avoid traversing parts of the filesystem that it wasn't +intended. You can use @code{ls -li} or @code{find /path -inum +12345 -o -inum 67893} to find out more about what has happened. + +@item sanity check of the fnmatch() library function failed. +Please submit a bug report. You may well be asked questions about +your system, and if you compiled the @code{findutils} code yourself, +you should keep your copy of the build tree around. The likely +explanation is that your system has a buggy implementation of +@code{fnmatch} that looks enough like the GNU version to fool +@code{configure}, but which doesn't work properly. + +@item cannot fork +This normally happens if you use the @code{-exec} action or +something similar (@code{-ok} and so forth) but the system has run out +of free process slots. This is either because the system is very busy +and the system has reached its maximum process limit, or because you +have a resource limit in place and you've reached it. Check the +system for runaway processes (with @code{ps}, if possible). Some process +slots are normally reserved for use by @samp{root}. + +@item some-program terminated by signal 99 +Some program which was launched with @code{-exec} or similar was killed +with a fatal signal. This is just an advisory message. +@end table + + +@node Error Messages From xargs +@section Error Messages From xargs + +@table @samp +@item environment is too large for exec +This message means that you have so many environment variables set (or +such large values for them) that there is no room within the +system-imposed limits on program command line argument length to +invoke any program. This is an unlikely situation and is more likely +result of an attempt to test the limits of @code{xargs}, or break it. +Please try unsetting some environment variables, or exiting the +current shell. You can also use @samp{xargs --show-limits} to +understand the relevant sizes. + +@item can not fit single argument within argument list size limit +You are using the @samp{-I} option and @code{xargs} doesn't have +enough space to build a command line because it has read a really +large item and it doesn't fit. You can probably work around this +problem with the @samp{-s} option, but the default size is pretty +large. This is a rare situation and is more likely an attempt to test +the limits of @code{xargs}, or break it. Otherwise, you will need to +try to shorten the problematic argument or not use @code{xargs}. + +@item cannot fork +See the description of the similar message for @code{find}. + +@item : exited with status 255; aborting +When a command run by @code{xargs} exits with status 255, @code{xargs} +is supposed to stop. If this is not what you intended, wrap the +program you are trying to invoke in a shell script which doesn't +return status 255. + +@item : terminated by signal 99 +See the description of the similar message for @code{find}. +@end table + +@node Error Messages From locate +@section Error Messages From @code{locate} + +@table @samp +@item warning: database @file{@value{LOCATE_DB}} is more than 8 days old +The @code{locate} program relies on a database which is periodically +built by the @code{updatedb} program. That hasn't happened in a long +time. To fix this problem, run @code{updatedb} manually. This can +often happen on systems that are generally not left on, so the +periodic ``cron'' task which normally does this doesn't get a chance +to run. + +@item locate database @file{@value{LOCATE_DB}} is corrupt or invalid +This should not happen. Re-run @code{updatedb}. If that works, but +@code{locate} still produces this error, run @code{locate --version} +and @code{updatedb --version}. These should produce the same output. +If not, you are using a mixed toolset; check your @samp{$PATH} +environment variable and your shell aliases (if you have any). If +both programs claim to be GNU versions, this is a bug; all versions of +these programs should interoperate without problem. Ask for help on +@email{bug-findutils@@gnu.org}. +@end table + + +@node Error Messages From updatedb +@section Error Messages From updatedb + +The @code{updatedb} program (and the programs it invokes) do issue +error messages, but none seem to be candidates for guidance. If +you are having a problem understanding one of these, ask for help on +@email{bug-findutils@@gnu.org}. + + +@node Primary Index +@unnumbered @code{find} Primary Index + +This is a list of all of the primaries (tests, actions, and options) +that make up @code{find} expressions for selecting files. @xref{find +Expressions}, for more information on expressions. + +@printindex fn + +@bye + +@comment texi related words used by Emacs' spell checker ispell.el + +@comment LocalWords: texinfo setfilename settitle setchapternewpage +@comment LocalWords: iftex finalout ifinfo DIR titlepage vskip pt +@comment LocalWords: filll dir samp dfn noindent xref pxref +@comment LocalWords: var deffn texi deffnx itemx emph asis +@comment LocalWords: findex smallexample subsubsection cindex +@comment LocalWords: dircategory direntry itemize + +@comment other words used by Emacs' spell checker ispell.el +@comment LocalWords: README fred updatedb xargs Plett Rendell akefile +@comment LocalWords: args grep Filesystems fo foo fOo wildcards iname +@comment LocalWords: ipath regex iregex expr fubar regexps +@comment LocalWords: metacharacters macs sr sc inode lname ilname +@comment LocalWords: sysdep noleaf ls inum xdev filesystems usr atime +@comment LocalWords: ctime mtime amin cmin mmin al daystart Sladkey rm +@comment LocalWords: anewer cnewer bckw rf xtype uname gname uid gid +@comment LocalWords: nouser nogroup chown chgrp perm ch maxdepth +@comment LocalWords: mindepth cpio src CD AFS statted stat fstype ufs +@comment LocalWords: nfs tmp mfs printf fprint dils rw djm Nov lwall +@comment LocalWords: POSIXLY fls fprintf strftime locale's EDT GMT AP +@comment LocalWords: EST diff perl backquotes sprintf Falstad Oct cron +@comment LocalWords: eg vmunix mkdir afs allexec allwrite ARG bigram +@comment LocalWords: bigrams cd chmod comp crc CVS dbfile dum eof +@comment LocalWords: fileserver filesystem fn frcode Ghazi Hnewc iXX +@comment LocalWords: joeuser Kaveh localpaths localuser LOGNAME +@comment LocalWords: Meyering mv netpaths netuser nonblank nonblanks +@comment LocalWords: ois ok Pinard printindex proc procs prunefs +@comment LocalWords: prunepaths pwd RFS rmadillo rmdir rsh sbins str +@comment LocalWords: su Timar ubins ug unstripped vf VM Weitzel +@comment LocalWords: wildcard zlogout basename execdir wholename iwholename +@comment LocalWords: timestamp timestamps Solaris FreeBSD OpenBSD POSIX diff --git a/doc/perm.texi b/doc/perm.texi new file mode 100644 index 0000000..6b54588 --- /dev/null +++ b/doc/perm.texi @@ -0,0 +1,592 @@ +Each file has a set of @dfn{file mode bits} that control the kinds of +access that users have to that file. They can be represented either in +symbolic form or as an octal number. + +@menu +* Mode Structure:: Structure of file mode bits. +* Symbolic Modes:: Mnemonic representation of file mode bits. +* Numeric Modes:: File mode bits as octal numbers. +* Directory Setuid and Setgid:: Set-user-ID and set-group-ID on directories. +@end menu + +@node Mode Structure +@section Structure of File Mode Bits + +The file mode bits have two parts: the @dfn{file permission bits}, +which control ordinary access to the file, and @dfn{special mode +bits}, which affect only some files. + +There are three kinds of permissions that a user can have for a file: + +@enumerate +@item +@cindex read permission +permission to read the file. For directories, this means permission to +list the contents of the directory. +@item +@cindex write permission +permission to write to (change) the file. For directories, this means +permission to create and remove files in the directory. +@item +@cindex execute/search permission +permission to execute the file (run it as a program). For directories, +this means permission to access files in the directory. +@end enumerate + +There are three categories of users who may have different permissions +to perform any of the above operations on a file: + +@enumerate +@item +the file's owner; +@item +other users who are in the file's group; +@item +everyone else. +@end enumerate + +@cindex owner, default +@cindex group owner, default +Files are given an owner and group when they are created. Usually the +owner is the current user and the group is the group of the directory +the file is in, but this varies with the operating system, the +file system the file is created on, and the way the file is created. You +can change the owner and group of a file by using the @command{chown} and +@command{chgrp} commands. + +In addition to the three sets of three permissions listed above, the +file mode bits have three special components, which affect only +executable files (programs) and, on most systems, directories: + +@enumerate +@item +@cindex set-user-ID +@cindex setuid +Set the process's effective user ID to that of the file upon execution +(called the @dfn{set-user-ID bit}, or sometimes the @dfn{setuid bit}). +For directories on a few systems, give files created in the directory +the same owner as the directory, no matter who creates them, and set +the set-user-ID bit of newly-created subdirectories. +@item +@cindex set-group-ID +@cindex setgid +Set the process's effective group ID to that of the file upon execution +(called the @dfn{set-group-ID bit}, or sometimes the @dfn{setgid bit}). +For directories on most systems, give files created in the directory +the same group as the directory, no matter what group the user who +creates them is in, and set the set-group-ID bit of newly-created +subdirectories. +@item +@cindex sticky +@cindex swap space, saving text image in +@cindex text image, saving in swap space +@cindex restricted deletion flag +Prevent unprivileged users from removing or renaming a file in a directory +unless they own the file or the directory; this is called the +@dfn{restricted deletion flag} for the directory, and is commonly +found on world-writable directories like @file{/tmp}. + +For regular files on some older systems, save the program's text image on the +swap device so it will load more quickly when run; this is called the +@dfn{sticky bit}. +@end enumerate + +In addition to the file mode bits listed above, there may be file attributes +specific to the file system, e.g., access control lists (ACLs), whether a +file is compressed, whether a file can be modified (immutability), and whether +a file can be dumped. These are usually set using programs +specific to the file system. For example: +@c should probably say a lot more about ACLs... someday + +@table @asis +@item ext2 +On @acronym{GNU} and @acronym{GNU}/Linux the file attributes specific to +the ext2 file system are set using @command{chattr}. + +@item FFS +On FreeBSD the file flags specific to the FFS +file system are set using @command{chflags}. +@end table + +Even if a file's mode bits allow an operation on that file, +that operation may still fail, because: + +@itemize +@item +the file-system-specific attributes or flags do not permit it; or + +@item +the file system is mounted as read-only. +@end itemize + +For example, if the immutable attribute is set on a file, +it cannot be modified, regardless of the fact that you +may have just run @code{chmod a+w FILE}. + +@node Symbolic Modes +@section Symbolic Modes + +@cindex symbolic modes +@dfn{Symbolic modes} represent changes to files' mode bits as +operations on single-character symbols. They allow you to modify either +all or selected parts of files' mode bits, optionally based on +their previous values, and perhaps on the current @code{umask} as well +(@pxref{Umask and Protection}). + +The format of symbolic modes is: + +@example +@r{[}ugoa@dots{}@r{][}+-=@r{]}@var{perms}@dots{}@r{[},@dots{}@r{]} +@end example + +@noindent +where @var{perms} is either zero or more letters from the set +@samp{rwxXst}, or a single letter from the set @samp{ugo}. + +The following sections describe the operators and other details of +symbolic modes. + +@menu +* Setting Permissions:: Basic operations on permissions. +* Copying Permissions:: Copying existing permissions. +* Changing Special Mode Bits:: Special mode bits. +* Conditional Executability:: Conditionally affecting executability. +* Multiple Changes:: Making multiple changes. +* Umask and Protection:: The effect of the umask. +@end menu + +@node Setting Permissions +@subsection Setting Permissions + +The basic symbolic operations on a file's permissions are adding, +removing, and setting the permission that certain users have to read, +write, and execute or search the file. These operations have the following +format: + +@example +@var{users} @var{operation} @var{permissions} +@end example + +@noindent +The spaces between the three parts above are shown for readability only; +symbolic modes cannot contain spaces. + +The @var{users} part tells which users' access to the file is changed. +It consists of one or more of the following letters (or it can be empty; +@pxref{Umask and Protection}, for a description of what happens then). When +more than one of these letters is given, the order that they are in does +not matter. + +@table @code +@item u +@cindex owner of file, permissions for +the user who owns the file; +@item g +@cindex group, permissions for +other users who are in the file's group; +@item o +@cindex other permissions +all other users; +@item a +all users; the same as @samp{ugo}. +@end table + +The @var{operation} part tells how to change the affected users' access +to the file, and is one of the following symbols: + +@table @code +@item + +@cindex adding permissions +to add the @var{permissions} to whatever permissions the @var{users} +already have for the file; +@item - +@cindex removing permissions +@cindex subtracting permissions +to remove the @var{permissions} from whatever permissions the +@var{users} already have for the file; +@item = +@cindex setting permissions +to make the @var{permissions} the only permissions that the @var{users} +have for the file. +@end table + +The @var{permissions} part tells what kind of access to the file should +be changed; it is normally zero or more of the following letters. As with the +@var{users} part, the order does not matter when more than one letter is +given. Omitting the @var{permissions} part is useful only with the +@samp{=} operation, where it gives the specified @var{users} no access +at all to the file. + +@table @code +@item r +@cindex read permission, symbolic +the permission the @var{users} have to read the file; +@item w +@cindex write permission, symbolic +the permission the @var{users} have to write to the file; +@item x +@cindex execute/search permission, symbolic +the permission the @var{users} have to execute the file, +or search it if it is a directory. +@end table + +For example, to give everyone permission to read and write a regular file, +but not to execute it, use: + +@example +a=rw +@end example + +To remove write permission for all users other than the file's +owner, use: + +@example +go-w +@end example + +@noindent +The above command does not affect the access that the owner of +the file has to it, nor does it affect whether other users can +read or execute the file. + +To give everyone except a file's owner no permission to do anything with +that file, use the mode below. Other users could still remove the file, +if they have write permission on the directory it is in. + +@example +go= +@end example + +@noindent +Another way to specify the same thing is: + +@example +og-rwx +@end example + +@node Copying Permissions +@subsection Copying Existing Permissions + +@cindex copying existing permissions +@cindex permissions, copying existing +You can base a file's permissions on its existing permissions. To do +this, instead of using a series of @samp{r}, @samp{w}, or @samp{x} +letters after the +operator, you use the letter @samp{u}, @samp{g}, or @samp{o}. For +example, the mode + +@example +o+g +@end example + +@noindent +adds the permissions for users who are in a file's group to the +permissions that other users have for the file. Thus, if the file +started out as mode 664 (@samp{rw-rw-r--}), the above mode would change +it to mode 666 (@samp{rw-rw-rw-}). If the file had started out as mode +741 (@samp{rwxr----x}), the above mode would change it to mode 745 +(@samp{rwxr--r-x}). The @samp{-} and @samp{=} operations work +analogously. + +@node Changing Special Mode Bits +@subsection Changing Special Mode Bits + +@cindex changing special mode bits +In addition to changing a file's read, write, and execute/search permissions, +you can change its special mode bits. @xref{Mode Structure}, for a +summary of these special mode bits. + +To change the file mode bits to set the user ID on execution, use +@samp{u} in the @var{users} part of the symbolic mode and +@samp{s} in the @var{permissions} part. + +To change the file mode bits to set the group ID on execution, use +@samp{g} in the @var{users} part of the symbolic mode and +@samp{s} in the @var{permissions} part. + +To set both user and group ID on execution, omit the @var{users} part +of the symbolic mode (or use @samp{a}) and use @samp{s} in the +@var{permissions} part. + +To change the file mode bits to set the restricted deletion flag or sticky bit, +omit the @var{users} part of the symbolic mode (or use @samp{a}) and use +@samp{t} in the @var{permissions} part. + +For example, to set the set-user-ID mode bit of a program, +you can use the mode: + +@example +u+s +@end example + +To remove both set-user-ID and set-group-ID mode bits from +it, you can use the mode: + +@example +a-s +@end example + +To set the restricted deletion flag or sticky bit, you can use +the mode: + +@example ++t +@end example + +The combination @samp{o+s} has no effect. On @acronym{GNU} systems +the combinations @samp{u+t} and @samp{g+t} have no effect, and +@samp{o+t} acts like plain @samp{+t}. + +The @samp{=} operator is not very useful with special mode bits. +For example, the mode: + +@example +o=t +@end example + +@noindent +does set the restricted deletion flag or sticky bit, but it also +removes all read, write, and execute/search permissions that users not in the +file's group might have had for it. + +@xref{Directory Setuid and Setgid}, for additional rules concerning +set-user-ID and set-group-ID bits and directories. + +@node Conditional Executability +@subsection Conditional Executability + +@cindex conditional executability +There is one more special type of symbolic permission: if you use +@samp{X} instead of @samp{x}, execute/search permission is affected only if the +file is a directory or already had execute permission. + +For example, this mode: + +@example +a+X +@end example + +@noindent +gives all users permission to search directories, or to execute files if +anyone could execute them before. + +@node Multiple Changes +@subsection Making Multiple Changes + +@cindex multiple changes to permissions +The format of symbolic modes is actually more complex than described +above (@pxref{Setting Permissions}). It provides two ways to make +multiple changes to files' mode bits. + +The first way is to specify multiple @var{operation} and +@var{permissions} parts after a @var{users} part in the symbolic mode. + +For example, the mode: + +@example +og+rX-w +@end example + +@noindent +gives users other than the owner of the file read permission and, if +it is a directory or if someone already had execute permission +to it, gives them execute/search permission; and it also denies them write +permission to the file. It does not affect the permission that the +owner of the file has for it. The above mode is equivalent to +the two modes: + +@example +og+rX +og-w +@end example + +The second way to make multiple changes is to specify more than one +simple symbolic mode, separated by commas. For example, the mode: + +@example +a+r,go-w +@end example + +@noindent +gives everyone permission to read the file and removes write +permission on it for all users except its owner. Another example: + +@example +u=rwx,g=rx,o= +@end example + +@noindent +sets all of the permission bits for the file explicitly. (It +gives users who are not in the file's group no permission at all for +it.) + +The two methods can be combined. The mode: + +@example +a+r,g+x-w +@end example + +@noindent +gives all users permission to read the file, and gives users who are in +the file's group permission to execute/search it as well, but not permission +to write to it. The above mode could be written in several different +ways; another is: + +@example +u+r,g+rx,o+r,g-w +@end example + +@node Umask and Protection +@subsection The Umask and Protection + +@cindex umask and modes +@cindex modes and umask +If the @var{users} part of a symbolic mode is omitted, it defaults to +@samp{a} (affect all users), except that any permissions that are +@emph{set} in the system variable @code{umask} are @emph{not affected}. +The value of @code{umask} can be set using the +@code{umask} command. Its default value varies from system to system. + +@cindex giving away permissions +Omitting the @var{users} part of a symbolic mode is generally not useful +with operations other than @samp{+}. It is useful with @samp{+} because +it allows you to use @code{umask} as an easily customizable protection +against giving away more permission to files than you intended to. + +As an example, if @code{umask} has the value 2, which removes write +permission for users who are not in the file's group, then the mode: + +@example ++w +@end example + +@noindent +adds permission to write to the file to its owner and to other users who +are in the file's group, but @emph{not} to other users. In contrast, +the mode: + +@example +a+w +@end example + +@noindent +ignores @code{umask}, and @emph{does} give write permission for +the file to all users. + +@node Numeric Modes +@section Numeric Modes + +@cindex numeric modes +@cindex file mode bits, numeric +@cindex octal numbers for file modes +As an +alternative to giving a symbolic mode, you can give an octal (base 8) +number that represents the mode. +This number is always interpreted in octal; you do not have to add a +leading @samp{0}, as you do in C. Mode @samp{0055} is the same as +mode @samp{55}. + +A numeric mode is usually shorter than the corresponding symbolic +mode, but it is limited in that normally it cannot take into account the +previous file mode bits; it can only set them absolutely. +(As discussed in the next section, the set-user-ID and set-group-ID +bits of directories are an exception to this general limitation.) + +The permissions granted to the user, +to other users in the file's group, +and to other users not in the file's group each require three +bits, which are represented as one octal digit. The three special +mode bits also require one bit each, and they are as a group +represented as another octal digit. Here is how the bits are arranged, +starting with the lowest valued bit: + +@example +Value in Corresponding +Mode Mode Bit + + Other users not in the file's group: + 1 Execute/search + 2 Write + 4 Read + + Other users in the file's group: + 10 Execute/search + 20 Write + 40 Read + + The file's owner: + 100 Execute/search + 200 Write + 400 Read + + Special mode bits: +1000 Restricted deletion flag or sticky bit +2000 Set group ID on execution +4000 Set user ID on execution +@end example + +For example, numeric mode @samp{4755} corresponds to symbolic mode +@samp{u=rwxs,go=rx}, and numeric mode @samp{664} corresponds to symbolic mode +@samp{ug=rw,o=r}. Numeric mode @samp{0} corresponds to symbolic mode +@samp{a=}. + +@node Directory Setuid and Setgid +@section Directories and the Set-User-ID and Set-Group-ID Bits + +On most systems, if a directory's set-group-ID bit is set, newly +created subfiles inherit the same group as the directory, and newly +created subdirectories inherit the set-group-ID bit of the parent +directory. On a few systems, a directory's set-user-ID bit has a +similar effect on the ownership of new subfiles and the set-user-ID +bits of new subdirectories. These mechanisms let users share files +more easily, by lessening the need to use @command{chmod} or +@command{chown} to share new files. + +These convenience mechanisms rely on the set-user-ID and set-group-ID +bits of directories. If commands like @command{chmod} and +@command{mkdir} routinely cleared these bits on directories, the +mechanisms would be less convenient and it would be harder to share +files. Therefore, a command like @command{chmod} does not affect the +set-user-ID or set-group-ID bits of a directory unless the user +specifically mentions them in a symbolic mode, or sets them in +a numeric mode. For example, on systems that support +set-group-ID inheritance: + +@example +# These commands leave the set-user-ID and +# set-group-ID bits of the subdirectories alone, +# so that they retain their default values. +mkdir A B C +chmod 755 A +chmod 0755 B +chmod u=rwx,go=rx C +mkdir -m 755 D +mkdir -m 0755 E +mkdir -m u=rwx,go=rx F +@end example + +If you want to try to set these bits, you must mention them +explicitly in the symbolic or numeric modes, e.g.: + +@example +# These commands try to set the set-user-ID +# and set-group-ID bits of the subdirectories. +mkdir G H +chmod 6755 G +chmod u=rwx,go=rx,a+s H +mkdir -m 6755 I +mkdir -m u=rwx,go=rx,a+s J +@end example + +If you want to try to clear these bits, you must mention them +explicitly in a symbolic mode, e.g.: + +@example +# This command tries to clear the set-user-ID +# and set-group-ID bits of the directory D. +chmod a-s D +@end example + +This behavior is a @acronym{GNU} extension. Portable scripts should +not rely on requests to set or clear these bits on directories, as +@acronym{POSIX} allows implementations to ignore these requests. diff --git a/find/.cvsignore b/find/.cvsignore new file mode 100644 index 0000000..310cc39 --- /dev/null +++ b/find/.cvsignore @@ -0,0 +1,5 @@ +.deps +Makefile +Makefile.in +find +oldfind diff --git a/find/.gitignore b/find/.gitignore new file mode 100644 index 0000000..7bc41fc --- /dev/null +++ b/find/.gitignore @@ -0,0 +1,7 @@ +.deps +Makefile +Makefile.in +find +oldfind +*~ + diff --git a/find/Makefile.am b/find/Makefile.am new file mode 100644 index 0000000..b001509 --- /dev/null +++ b/find/Makefile.am @@ -0,0 +1,38 @@ +AUTOMAKE_OPTIONS = std-options +localedir = $(datadir)/locale +# noinst_PROGRAMS = regexprops +# regexprops_SOURCES = regexprops.c + +noinst_LIBRARIES = libfindtools.a +libfindtools_a_SOURCES = finddata.c fstype.c parser.c pred.c tree.c util.c + + +# We always build two versions of find, one with fts, one without. +# Their names depend on whether the user specified --with-fts. +# +# --with-fts find extra binary +# yes with fts 'oldfind', without fts +# no without fts 'ftsfind', with fts +# +if WITH_FTS +bin_PROGRAMS = find oldfind +find_SOURCES = ftsfind.c +oldfind_SOURCES = find.c +else +bin_PROGRAMS = find ftsfind +find_SOURCES = find.c +ftsfind_SOURCES = ftsfind.c +endif + +EXTRA_DIST = defs.h $(man_MANS) +INCLUDES = -I../gnulib/lib -I$(top_srcdir)/lib -I$(top_srcdir)/gnulib/lib -I../intl -DLOCALEDIR=\"$(localedir)\" +LDADD = ./libfindtools.a ../lib/libfind.a ../gnulib/lib/libgnulib.a @INTLLIBS@ @LIB_CLOCK_GETTIME@ @FINDLIBS@ +man_MANS = find.1 +SUBDIRS = . testsuite + +#$(PROGRAMS): ../lib/libfind.a + +dist-hook: findutils-check-manpages + +findutils-check-manpages: + $(top_srcdir)/build-aux/man-lint.sh $(srcdir) $(man_MANS) diff --git a/find/defs.h b/find/defs.h new file mode 100644 index 0000000..d886fa2 --- /dev/null +++ b/find/defs.h @@ -0,0 +1,655 @@ +/* defs.h -- data types and declarations. + Copyright (C) 1990, 91, 92, 93, 94, 2000, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + + +#ifndef INC_DEFS_H +#define INC_DEFS_H 1 + +#if !defined(ALREADY_INCLUDED_CONFIG_H) +/* + * Savannah bug #20128: if we include some system header and it + * includes some othersecond system header, the second system header + * may in fact turn out to be a file provided by gnulib. For that + * situation, we need to have already included so that the + * Gnulib files have access to the information probed by their + * configure script fragments. So should be the first + * thing included. + */ +#error " should be #included before defs.h, and indeed before any other header" +Please stop compiling the program now +#endif + + +#include + +/* XXX: some of these includes probably don't belong in a common header file */ +#include +#include /* for FILE* */ +#include +#include +#include +#include +#include /* for CHAR_BIT */ +#include /* for bool/boolean */ +#include /* for uintmax_t */ +#include /* S_ISUID etc. */ + + + +#ifndef CHAR_BIT +# define CHAR_BIT 8 +#endif + +#if HAVE_INTTYPES_H +# include +#endif +typedef bool boolean; + +#include "regex.h" +#include "timespec.h" +#include "buildcmd.h" +#include "quotearg.h" + +/* These days we will assume ANSI/ISO C protootypes work on our compiler. */ +#define PARAMS(Args) Args + +#ifndef ATTRIBUTE_NORETURN +# if HAVE_ATTRIBUTE_NORETURN +# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) +# else +# define ATTRIBUTE_NORETURN /* nothing */ +# endif +#endif + +int optionl_stat PARAMS((const char *name, struct stat *p)); +int optionp_stat PARAMS((const char *name, struct stat *p)); +int optionh_stat PARAMS((const char *name, struct stat *p)); +int debug_stat PARAMS((const char *file, struct stat *bufp)); + +void set_stat_placeholders PARAMS((struct stat *p)); +int get_statinfo PARAMS((const char *pathname, const char *name, struct stat *p)); + + +#define MODE_WXUSR (S_IWUSR | S_IXUSR) +#define MODE_R (S_IRUSR | S_IRGRP | S_IROTH) +#define MODE_RW (S_IWUSR | S_IWGRP | S_IWOTH | MODE_R) +#define MODE_RWX (S_IXUSR | S_IXGRP | S_IXOTH | MODE_RW) +#define MODE_ALL (S_ISUID | S_ISGID | S_ISVTX | MODE_RWX) + + +struct predicate; +struct options; + +/* Pointer to a predicate function. */ +typedef boolean (*PRED_FUNC)(const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr); + +/* The number of seconds in a day. */ +#define DAYSECS 86400 + +/* Argument structures for predicates. */ + +enum comparison_type +{ + COMP_GT, + COMP_LT, + COMP_EQ +}; + +enum permissions_type +{ + PERM_AT_LEAST, + PERM_ANY, + PERM_EXACT +}; + +enum predicate_type +{ + NO_TYPE, + PRIMARY_TYPE, + UNI_OP, + BI_OP, + OPEN_PAREN, + CLOSE_PAREN +}; + +enum predicate_precedence +{ + NO_PREC, + COMMA_PREC, + OR_PREC, + AND_PREC, + NEGATE_PREC, + MAX_PREC +}; + +struct long_val +{ + enum comparison_type kind; + boolean negative; /* Defined only when representing time_t. */ + uintmax_t l_val; +}; + +struct perm_val +{ + enum permissions_type kind; + mode_t val[2]; +}; + +/* dir_id is used to support loop detection in find.c + */ +struct dir_id +{ + ino_t ino; + dev_t dev; +}; + +/* samefile_file_id is used to support the -samefile test. + */ +struct samefile_file_id +{ + ino_t ino; + dev_t dev; + int fd; +}; + +struct size_val +{ + enum comparison_type kind; + int blocksize; + uintmax_t size; +}; + + +enum xval + { + XVAL_ATIME, XVAL_BIRTHTIME, XVAL_CTIME, XVAL_MTIME, XVAL_TIME + }; + +struct time_val +{ + enum xval xval; + enum comparison_type kind; + struct timespec ts; +}; + + +struct exec_val +{ + boolean multiple; /* -exec {} \+ denotes multiple argument. */ + struct buildcmd_control ctl; + struct buildcmd_state state; + char **replace_vec; /* Command arguments (for ";" style) */ + int num_args; + boolean use_current_dir; /* If nonzero, don't chdir to start dir */ + boolean close_stdin; /* If true, close stdin in the child. */ + int dirfd; /* The directory to do the exec in. */ +}; + +/* The format string for a -printf or -fprintf is chopped into one or + more `struct segment', linked together into a list. + Each stretch of plain text is a segment, and + each \c and `%' conversion is a segment. */ + +/* Special values for the `kind' field of `struct segment'. */ +enum SegmentKind + { + KIND_PLAIN=0, /* Segment containing just plain text. */ + KIND_STOP=1, /* \c -- stop printing and flush output. */ + KIND_FORMAT, /* Regular format */ + }; + +struct segment +{ + enum SegmentKind segkind; /* KIND_FORMAT, KIND_PLAIN, KIND_STOP */ + char format_char[2]; /* Format chars if kind is KIND_FORMAT */ + char *text; /* Plain text or `%' format string. */ + int text_len; /* Length of `text'. */ + struct segment *next; /* Next segment for this predicate. */ +}; + +struct format_val +{ + struct segment *segment; /* Linked list of segments. */ + FILE *stream; /* Output stream to print on. */ + const char *filename; /* We need the filename for error messages. */ + boolean dest_is_tty; /* True if the destination is a terminal. */ + struct quoting_options *quote_opts; +}; + +/* Profiling information for a predicate */ +struct predicate_performance_info +{ + unsigned long visits; + unsigned long successes; +}; + +/* evaluation cost of a predicate */ +enum EvaluationCost +{ + NeedsNothing, + NeedsType, + NeedsStatInfo, + NeedsLinkName, + NeedsAccessInfo, + NeedsSyncDiskHit, + NeedsEventualExec, + NeedsImmediateExec, + NeedsUserInteraction, + NeedsUnknown, + NumEvaluationCosts +}; + +struct predicate +{ + /* Pointer to the function that implements this predicate. */ + PRED_FUNC pred_func; + + /* Only used for debugging, but defined unconditionally so individual + modules can be compiled with -DDEBUG. */ + char *p_name; + + /* The type of this node. There are two kinds. The first is real + predicates ("primaries") such as -perm, -print, or -exec. The + other kind is operators for combining predicates. */ + enum predicate_type p_type; + + /* The precedence of this node. Only has meaning for operators. */ + enum predicate_precedence p_prec; + + /* True if this predicate node produces side effects. + If side_effects are produced + then optimization will not be performed */ + boolean side_effects; + + /* True if this predicate node requires default print be turned off. */ + boolean no_default_print; + + /* True if this predicate node requires a stat system call to execute. */ + boolean need_stat; + + /* True if this predicate node requires knowledge of the file type. */ + boolean need_type; + + enum EvaluationCost p_cost; + + /* est_success_rate is a number between 0.0 and 1.0 */ + float est_success_rate; + + /* True if this predicate should display control characters literally */ + boolean literal_control_chars; + + /* True if this predicate didn't originate from the user. */ + boolean artificial; + + /* The raw text of the argument of this predicate. */ + char *arg_text; + + /* Information needed by the predicate processor. + Next to each member are listed the predicates that use it. */ + union + { + const char *str; /* fstype [i]lname [i]name [i]path */ + struct re_pattern_buffer *regex; /* regex */ + struct exec_val exec_vec; /* exec ok */ + struct long_val numinfo; /* gid inum links uid */ + struct size_val size; /* size */ + uid_t uid; /* user */ + gid_t gid; /* group */ + struct time_val reftime; /* newer newerXY anewer cnewer mtime atime ctime mmin amin cmin */ + struct perm_val perm; /* perm */ + struct samefile_file_id samefileid; /* samefile */ + mode_t type; /* type */ + struct format_val printf_vec; /* printf fprintf fprint ls fls print0 fprint0 print */ + } args; + + /* The next predicate in the user input sequence, + which represents the order in which the user supplied the + predicates on the command line. */ + struct predicate *pred_next; + + /* The right and left branches from this node in the expression + tree, which represents the order in which the nodes should be + processed. */ + struct predicate *pred_left; + struct predicate *pred_right; + + struct predicate_performance_info perf; + + const struct parser_table* parser_entry; +}; + +/* find.c, ftsfind.c */ +boolean is_fts_enabled(int *ftsoptions); +int get_start_dirfd(void); +int get_current_dirfd(void); + +/* find library function declarations. */ + +/* find global function declarations. */ + +/* find.c */ +/* SymlinkOption represents the choice of + * -P, -L or -P (default) on the command line. + */ +enum SymlinkOption + { + SYMLINK_NEVER_DEREF, /* Option -P */ + SYMLINK_ALWAYS_DEREF, /* Option -L */ + SYMLINK_DEREF_ARGSONLY /* Option -H */ + }; +extern enum SymlinkOption symlink_handling; /* defined in find.c. */ + +void set_follow_state PARAMS((enum SymlinkOption opt)); +void cleanup(void); + +/* fstype.c */ +char *filesystem_type PARAMS((const struct stat *statp, const char *path)); +char * get_mounted_filesystems (void); +dev_t * get_mounted_devices PARAMS((size_t *)); + + + +enum arg_type + { + ARG_OPTION, /* regular options like -maxdepth */ + ARG_NOOP, /* does nothing, returns true, internal use only */ + ARG_POSITIONAL_OPTION, /* options whose position is important (-follow) */ + ARG_TEST, /* a like -name */ + ARG_SPECIAL_PARSE, /* complex to parse, don't eat the test name before calling parse_xx(). */ + ARG_PUNCTUATION, /* like -o or ( */ + ARG_ACTION /* like -print */ + }; + + +struct parser_table; +/* Pointer to a parser function. */ +typedef boolean (*PARSE_FUNC)(const struct parser_table *p, + char *argv[], int *arg_ptr); +struct parser_table +{ + enum arg_type type; + char *parser_name; + PARSE_FUNC parser_func; + PRED_FUNC pred_func; +}; + +/* parser.c */ +const struct parser_table* find_parser PARAMS((char *search_name)); +boolean parse_print PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +void pred_sanity_check PARAMS((const struct predicate *predicates)); +void parse_begin_user_args PARAMS((char **args, int argno, const struct predicate *last, const struct predicate *predicates)); +void parse_end_user_args PARAMS((char **args, int argno, const struct predicate *last, const struct predicate *predicates)); +boolean parse_openparen PARAMS((const struct parser_table* entry, char *argv[], int *arg_ptr)); +boolean parse_closeparen PARAMS((const struct parser_table* entry, char *argv[], int *arg_ptr)); + +/* pred.c */ + +typedef boolean PREDICATEFUNCTION(const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr); +PREDICATEFUNCTION pred_amin; +PREDICATEFUNCTION pred_and; +PREDICATEFUNCTION pred_anewer; +PREDICATEFUNCTION pred_atime; +PREDICATEFUNCTION pred_closeparen; +PREDICATEFUNCTION pred_cmin; +PREDICATEFUNCTION pred_cnewer; +PREDICATEFUNCTION pred_comma; +PREDICATEFUNCTION pred_ctime; +PREDICATEFUNCTION pred_delete; +PREDICATEFUNCTION pred_empty; +PREDICATEFUNCTION pred_exec; +PREDICATEFUNCTION pred_execdir; +PREDICATEFUNCTION pred_executable; +PREDICATEFUNCTION pred_false; +PREDICATEFUNCTION pred_fls; +PREDICATEFUNCTION pred_fprint; +PREDICATEFUNCTION pred_fprint0; +PREDICATEFUNCTION pred_fprintf; +PREDICATEFUNCTION pred_fstype; +PREDICATEFUNCTION pred_gid; +PREDICATEFUNCTION pred_group; +PREDICATEFUNCTION pred_ilname; +PREDICATEFUNCTION pred_iname; +PREDICATEFUNCTION pred_inum; +PREDICATEFUNCTION pred_ipath; +PREDICATEFUNCTION pred_links; +PREDICATEFUNCTION pred_lname; +PREDICATEFUNCTION pred_ls; +PREDICATEFUNCTION pred_mmin; +PREDICATEFUNCTION pred_mtime; +PREDICATEFUNCTION pred_name; +PREDICATEFUNCTION pred_negate; +PREDICATEFUNCTION pred_newer; +PREDICATEFUNCTION pred_newerXY; +PREDICATEFUNCTION pred_nogroup; +PREDICATEFUNCTION pred_nouser; +PREDICATEFUNCTION pred_ok; +PREDICATEFUNCTION pred_okdir; +PREDICATEFUNCTION pred_openparen; +PREDICATEFUNCTION pred_or; +PREDICATEFUNCTION pred_path; +PREDICATEFUNCTION pred_perm; +PREDICATEFUNCTION pred_print; +PREDICATEFUNCTION pred_print0; +PREDICATEFUNCTION pred_prune; +PREDICATEFUNCTION pred_quit; +PREDICATEFUNCTION pred_readable; +PREDICATEFUNCTION pred_regex; +PREDICATEFUNCTION pred_samefile; +PREDICATEFUNCTION pred_size; +PREDICATEFUNCTION pred_true; +PREDICATEFUNCTION pred_type; +PREDICATEFUNCTION pred_uid; +PREDICATEFUNCTION pred_used; +PREDICATEFUNCTION pred_user; +PREDICATEFUNCTION pred_writable; +PREDICATEFUNCTION pred_xtype; + + + +int launch PARAMS((const struct buildcmd_control *ctl, + struct buildcmd_state *buildstate)); + + +char *find_pred_name PARAMS((PRED_FUNC pred_func)); + + + +void print_predicate PARAMS((FILE *fp, const struct predicate *p)); +void print_tree PARAMS((FILE*, struct predicate *node, int indent)); +void print_list PARAMS((FILE*, struct predicate *node)); +void print_optlist PARAMS((FILE *fp, const struct predicate *node)); +void show_success_rates(const struct predicate *node); + + +/* tree.c */ +struct predicate * build_expression_tree PARAMS((int argc, char *argv[], int end_of_leading_options)); +struct predicate * get_eval_tree PARAMS((void)); +struct predicate *get_new_pred PARAMS((const struct parser_table *entry)); +struct predicate *get_new_pred_chk_op PARAMS((const struct parser_table *entry)); +float calculate_derived_rates PARAMS((struct predicate *p)); + +/* util.c */ +struct predicate *insert_primary PARAMS((const struct parser_table *entry)); +struct predicate *insert_primary_withpred PARAMS((const struct parser_table *entry, PRED_FUNC fptr)); +void usage PARAMS((FILE *fp, int status, char *msg)); +extern boolean check_nofollow(void); +void complete_pending_execs(struct predicate *p); +void complete_pending_execdirs(int dirfd); /* Passing dirfd is an unpleasant CodeSmell. */ +const char *safely_quote_err_filename (int n, char const *arg); +void fatal_file_error(const char *name) ATTRIBUTE_NORETURN; +void nonfatal_file_error(const char *name); + +int process_leading_options PARAMS((int argc, char *argv[])); +void set_option_defaults PARAMS((struct options *p)); + +#if 0 +#define apply_predicate(pathname, stat_buf_ptr, node) \ + (*(node)->pred_func)((pathname), (stat_buf_ptr), (node)) +#else +boolean apply_predicate(const char *pathname, struct stat *stat_buf, struct predicate *p); +#endif + +#define pred_is(node, fn) ( ((node)->pred_func) == (fn) ) + + +/* find.c. */ +int get_info PARAMS((const char *pathname, struct stat *p, struct predicate *pred_ptr)); +int following_links PARAMS((void)); +int digest_mode PARAMS((mode_t mode, const char *pathname, const char *name, struct stat *pstat, boolean leaf)); +boolean default_prints PARAMS((struct predicate *pred)); +boolean looks_like_expression PARAMS((const char *arg, boolean leading)); + + +enum DebugOption + { + DebugNone = 0, + DebugExpressionTree = 1, + DebugStat = 2, + DebugSearch = 4, + DebugTreeOpt = 8, + DebugHelp = 16, + DebugExec = 32, + DebugSuccessRates = 64 + }; + +struct options +{ + /* If true, process directory before contents. True unless -depth given. */ + boolean do_dir_first; + + /* If >=0, don't descend more than this many levels of subdirectories. */ + int maxdepth; + + /* If >=0, don't process files above this level. */ + int mindepth; + + /* If true, do not assume that files in directories with nlink == 2 + are non-directories. */ + boolean no_leaf_check; + + /* If true, don't cross filesystem boundaries. */ + boolean stay_on_filesystem; + + /* If true, we ignore the problem where we find that a directory entry + * no longer exists by the time we get around to processing it. + */ + boolean ignore_readdir_race; + + /* If true, pass control characters through. If false, escape them + * or turn them into harmless things. + */ + boolean literal_control_chars; + + /* If true, we issue warning messages + */ + boolean warnings; + + /* If true, avoid POSIX-incompatible behaviours + * (this functionality is currently incomplete + * and at the moment affects mainly warning messages). + */ + boolean posixly_correct; + + struct timespec start_time; /* Time at start of execution. */ + + /* Seconds between 00:00 1/1/70 and either one day before now + (the default), or the start of today (if -daystart is given). */ + time_t cur_day_start; + + /* If true, cur_day_start has been adjusted to the start of the day. */ + boolean full_days; + + int output_block_size; /* Output block size. */ + + /* bitmask for debug options */ + unsigned long debug_options; + + enum SymlinkOption symlink_handling; + + + /* Pointer to the function used to stat files. */ + int (*xstat) (const char *name, struct stat *statbuf); + + + /* Indicate if we can implement safely_chdir() using the O_NOFOLLOW + * flag to open(2). + */ + boolean open_nofollow_available; + + /* The variety of regular expression that we support. + * The default is POSIX Basic Regular Expressions, but this + * can be changed with the positional option, -regextype. + */ + int regex_options; + + /* Optimisation level. One is the default. + */ + unsigned short optimisation_level; + + + /* How should we quote filenames in error messages and so forth? + */ + enum quoting_style err_quoting_style; +}; +extern struct options options; + + +struct state +{ + /* Current depth; 0 means current path is a command line arg. */ + int curdepth; + + /* If true, we have called stat on the current path. */ + boolean have_stat; + + /* If true, we know the type of the current path. */ + boolean have_type; + mode_t type; /* this is the actual type */ + + /* The file being operated on, relative to the current directory. + Used for stat, readlink, remove, and opendir. */ + char *rel_pathname; + /* The directory fd to which rel_pathname is relative. Thsi is relevant + * when we're navigating the hierarchy with fts() and using FTS_CWDFD. + */ + int cwd_dir_fd; + + /* Length of starting path. */ + int starting_path_length; + + /* If true, don't descend past current directory. + Can be set by -prune, -maxdepth, and -xdev/-mount. */ + boolean stop_at_current_level; + + /* Status value to return to system. */ + int exit_status; + + /* True if there are any execdirs. This saves us a pair of fchdir() + * calls for every directory we leave if it is false. This is just + * an optimisation. Set to true if you want to be conservative. + */ + boolean execdirs_outstanding; +}; + +/* finddata.c */ +extern struct state state; +extern char const *starting_dir; +extern int starting_desc; +extern char *program_name; + + +#endif diff --git a/find/find.1 b/find/find.1 new file mode 100644 index 0000000..de3dda5 --- /dev/null +++ b/find/find.1 @@ -0,0 +1,1693 @@ +.TH FIND 1 \" -*- nroff -*- +.SH NAME +find \- search for files in a directory hierarchy +.SH SYNOPSIS +.B find +[\-H] [\-L] [\-P] [\-D debugopts] [\-Olevel] [path...] [expression] +.SH DESCRIPTION +This manual page +documents the GNU version of +.BR find . +GNU +.B find +searches the directory tree rooted at each given file name by +evaluating the given expression from left to right, according to the +rules of precedence (see section OPERATORS), until the outcome is +known (the left hand side is false for \fIand\fR operations, true for +\fIor\fR), at which point +.B find +moves on to the next file name. +.PP +If you are using +.B find +in an environment where security is important (for example if you are +using it to seach directories that are writable by other users), you +should read the "Security Considerations" chapter of the findutils +documentation, which is called \fBFinding Files\fP and comes with +findutils. That document also includes a lot more detail +and discussion than this manual page, so you may find it a more useful +source of information. +.SH OPTIONS +The `\-H', `\-L' and `\-P' options control the treatment of symbolic +links. Command-line arguments following these are taken to be names +of files or directories to be examined, up to the first argument that +begins with `\-', or the argument `(' or `!'. That argument and any +following arguments are taken to be the expression describing what is +to be searched for. If no paths are given, the current directory is +used. If no expression is given, the expression `\-print' is used +(but you should probably consider using `\-print0' instead, anyway). +.PP +This manual page talks about `options' within the expression list. +These options control the behaviour of +.B find +but are specified immediately after the last path name. The five +`real' options `\-H', `\-L', `\-P', `\-D' and `\-O' must appear before +the first path name, if at all. A double dash `\-\-' can also be used +to signal that any remaining arguments are not options (though +ensuring that all start points begin with either `./' or `/' is +generally safer if you use wildcards in the list of start points). +.IP \-P +Never follow symbolic links. This is the default behaviour. When +.B find +examines or prints information a file, and the file is a symbolic +link, the information used shall be taken from the properties of the +symbolic link itself. + +.IP \-L +Follow symbolic links. When +.B find +examines or prints information about files, the information used shall +be taken from the properties of the file to which the link points, not +from the link itself (unless it is a broken symbolic link or +.B find +is unable to examine the file to which the link points). Use of this +option implies \-noleaf. If you later use the \-P option, \-noleaf +will still be in effect. If \-L is in effect and +.B find +discovers a symbolic link to a subdirectory during its search, +the subdirectory pointed to by the symbolic link will be searched. +.IP +When the \-L option is in effect, the \-type predicate will always +match against the type of the file that a symbolic link points to +rather than the link itself (unless the symbolic link is broken). +Using \-L causes the \-lname and \-ilname predicates always to return +false. + +.IP \-H +Do not follow symbolic links, except while processing the command +line arguments. When +.B find +examines or prints information about files, the information used +shall be taken from the properties of the symbolic link itself. The +only exception to this behaviour is when a file specified on the +command line is a symbolic link, and the link can be resolved. For +that situation, the information used is taken from whatever the link +points to (that is, the link is followed). The information about the +link itself is used as a fallback if the file pointed to by the +symbolic link cannot be examined. If \-H is in effect and one of the +paths specified on the command line is a symbolic link to a directory, +the contents of that directory will be examined (though of course +\-maxdepth 0 would prevent this). +.P +If more than one of \-H, \-L and \-P is specified, each overrides the +others; the last one appearing on the command line takes effect. +Since it is the default, the \-P option should be considered to be in +effect unless either \-H or \-L is specified. + +GNU +.B find +frequently stats files during the processing of the command line +itself, before any searching has begun. These options also affect how +those arguments are processed. Specifically, there are a number of +tests that compare files listed on the command line against a file we +are currently considering. In each case, the file specified on the +command line will have been examined and some of its properties will +have been saved. If the named file is in fact a symbolic link, and +the \-P option is in effect (or if neither \-H nor \-L were +specified), the information used for the comparison will be taken from +the properties of the symbolic link. Otherwise, it will be taken from +the properties of the file the link points to. If +.B find +cannot follow the link (for example because it has insufficient +privileges or the link points to a nonexistent file) the properties of +the link itself will be used. +.P +When the \-H or \-L options are in effect, any symbolic links listed +as the argument of \-newer will be dereferenced, and the timestamp +will be taken from the file to which the symbolic link points. The +same consideration applies to \-newerXY, \-anewer and \-cnewer. + +The \-follow option has a similar effect to \-L, though it takes +effect at the point where it appears (that is, if \-L is not used but +\-follow is, any symbolic links appearing after \-follow on the +command line will be dereferenced, and those before it will not). + +.IP "\-D debugoptions" +Print diagnostic information; this can be helpful to diagnose problems +with why +.B find +is not doing what you want. The list of debug options should be comma +separated. Compatibility of the debug options is not guaranteed +between releases of findutils. For a complete list of valid debug +options, see the output of +.B find \-D +.BR help . +Valid debug options include +.RS +.IP help +Explain the debugging options +.IP tree +Show the expression tree in its original and optimised form. +.IP stat +Print messages as files are examined with the +.B stat +and +.B lstat +system calls. The +.B find +program tries to minimise such calls. +.IP opt +Prints diagnostic information relating to the optimisation of the +expression tree; see the \-O option. +.IP rates +Prints a summary indicating how often each predicate succeeded or +failed. +.RE +.IP \-Olevel +Enables query optimisation. The +.B find +program reorders tests to speed up execution while preserving the +overall effect; that is, predicates with side effects are not +reordered relative to each other. The optimisations performed at each +optimisation level are as follows. +.RS +.IP 0 +Equivalent to optimisation level 1. +.IP 1 +This is the default optimisation level and corresponds to the +traditional behaviour. Expressions are reordered so that tests based +only on the names of files (for example \-name +and \-regex) are performed first. +.IP 2 +Any \-type +or \-xtype +tests are performed after any tests based only on the names of files, +but before any tests that require information from the inode. On many +modern versions of Unix, file types are returned by +.B readdir() +and so these predicates are faster to evaluate than predicates which +need to stat the file first. +.IP 3 +At this optimisation level, the full cost-based query optimiser is +enabled. The order of tests is modified so that cheap (i.e. fast) +tests are performed first and more expensive ones are performed later, +if necessary. Within each cost band, predicates are evaluated earlier +or later according to whether they are likely to succeed or not. For \-o, +predicates which are likely to succeed are evaluated earlier, and for \-a, +predicates which are likely to fail are evaluated earlier. +.RE +.IP +The cost-based optimiser has a fixed idea of how likely any given test +is to succeed. In some cases the probability takes account of the +specific nature of the test (for example, \-type f +is assumed to be more likely to succeed than \-type c). +The cost-based optimiser is currently being evaluated. If it does +not actually improve the performance of +.BR find , +it will be removed again. Conversely, optimisations that prove to be +reliable, robust and effective may be enabled at lower optimisation +levels over time. However, the default behaviour (i.e. optimisation +level 1) will not be changed in the 4.3.x release series. The +findutils test suite runs all the tests on +.B find +at each optimisation level and ensures that the result is the same. +.P +.SH EXPRESSIONS +The expression is made up of options (which affect overall operation +rather than the processing of a specific file, and always return +true), tests (which return a true or false value), and actions (which +have side effects and return a true or false value), all separated by +operators. \-and is assumed where the operator is omitted. + +If the expression contains no actions other than \-prune, \-print is +performed on all files for which the expression is true. + +.SS OPTIONS +.P +All options always return true. Except for \-daystart, \-follow and +\-regextype, the options affect all tests, including tests specified +before the option. This is because the options are processed when the +command line is parsed, while the tests don't do anything until files +are examined. The \-daystart, \-follow and \-regextype options are +different in this respect, and have an effect only on tests which +appear later in the command line. Therefore, for clarity, it is best +to place them at the beginning of the expression. A warning is issued +if you don't do this. + +.IP \-d +A synonym for \-depth, for compatibility with FreeBSD, NetBSD, MacOS X and OpenBSD. + +.IP \-daystart +Measure times (for \-amin, \-atime, \-cmin, \-ctime, \-mmin, and \-mtime) +from the beginning of today rather than from 24 hours ago. This +option only affects tests which appear later on the command line. + +.IP \-depth +Process each directory's contents before the directory itself. The +\-delete action also implies \-depth. + +.IP \-follow +Deprecated; use the \-L option instead. Dereference symbolic links. +Implies \-noleaf. The \-follow option affects only those tests which +appear after it on the command line. Unless the \-H or \-L option has +been specified, the position of the \-follow option changes the +behaviour of the \-newer predicate; any files listed as the argument +of \-newer will be dereferenced if they are symbolic links. The same +consideration applies to \-newerXY, \-anewer and \-cnewer. Similarly, +the \-type predicate will always match against the type of the file +that a symbolic link points to rather than the link itself. Using +\-follow causes the \-lname and \-ilname predicates always to return +false. + +.IP "\-help, \-\-help" +Print a summary of the command-line usage of +.B find +and exit. + +.IP \-ignore_readdir_race +Normally, \fBfind\fR will emit an error message when it fails to stat a file. +If you give this option and a file is deleted between the time \fBfind\fR +reads the name of the file from the directory and the time it tries to stat +the file, no error message will be issued. This also applies to files +or directories whose names are given on the command line. This option takes +effect at the time the command line is read, which means that you cannot search +one part of the filesystem with this option on and part of it with this option +off (if you need to do that, you will need to issue two \fBfind\fR commands +instead, one with the option and one without it). + +.IP "\-maxdepth \fIlevels\fR" +Descend at most \fIlevels\fR (a non-negative integer) levels of +directories below the command line arguments. `\-maxdepth 0' means +only apply the tests and actions to the command line arguments. + +.IP "\-mindepth \fIlevels\fR" +Do not apply any tests or actions at levels less than \fIlevels\fR (a +non-negative integer). `\-mindepth 1' means process all files except +the command line arguments. + +.IP \-mount +Don't descend directories on other filesystems. An alternate name for +\-xdev, for compatibility with some other versions of +.BR find . + +.IP \-noignore_readdir_race +Turns off the effect of \-ignore_readdir_race. + +.IP "\-noleaf" +Do not optimize by assuming that directories contain 2 fewer +subdirectories than their hard link count. This option is needed when +searching filesystems that do not follow the Unix directory-link +convention, such as CD-ROM or MS-DOS filesystems or AFS volume mount +points. Each directory on a normal Unix filesystem has at least 2 +hard links: its name and its `.' entry. Additionally, its +subdirectories (if any) each have a `..' entry linked to that +directory. When +.B find +is examining a directory, after it has statted 2 fewer subdirectories +than the directory's link count, it knows that the rest of the entries +in the directory are non-directories (`leaf' files in the directory +tree). If only the files' names need to be examined, there is no need +to stat them; this gives a significant increase in search speed. + +.IP "\-regextype \fItype\fR" +Changes the regular expression syntax understood by +.B \-regex +and +.B \-iregex +tests which occur later on the command line. Currently-implemented +types are emacs (this is the default), posix-awk, posix-basic, +posix-egrep and posix-extended. + +.IP "\-version, \-\-version" +Print the \fBfind\fR version number and exit. + +.IP "\-warn, \-nowarn" +Turn warning messages on or off. These warnings apply only to the +command line usage, not to any conditions that +.B find +might encounter when it searches directories. The default behaviour +corresponds to \-warn if standard input is a tty, and to \-nowarn +otherwise. + +.IP \-xdev +Don't descend directories on other filesystems. + +.SS TESTS +Some tests, for example +.B \-newerXY +and +.BR -samefile , +allow comparison between the file currently being examined and some +reference file specified on the command line. When these tests are +used, the interpretation of the reference file is determined by the +options +.BR \-H , +.B \-L +and +.B \-P +and any previous +.BR \-follow , +but the reference file is only examined once, at the time the command +line is parsed. If the reference file cannot be examined (for +example, the +.BR stat (2) +system call fails for it), an error message is issued, and +.B find +exits with a nonzero status. +.P +Numeric arguments can be specified as +.IP \fI+n\fP +for greater than +.IR n , +.IP \fI\-n\fP +for less than +.IR n , +.IP \fIn\fP +for exactly +.IR n . +.P + +.IP "\-amin \fIn\fR" +File was last accessed \fIn\fR minutes ago. + +.IP "\-anewer \fIfile\fR" +File was last accessed more recently than \fIfile\fR was modified. If +\fIfile\fR is a symbolic link and the \-H option or the \-L option is +in effect, the access time of the file it points to is always +used. + +.IP "\-atime \fIn\fR" +File was last accessed \fIn\fR*24 hours ago. +When find figures out how many 24-hour periods ago the file +was last accessed, any fractional part is ignored, so to match +.B \-atime +.BR +1 , +a file has to have been accessed at least +.I two +days ago. + +.IP "\-cmin \fIn\fR" +File's status was last changed \fIn\fR minutes ago. + +.IP "\-cnewer \fIfile\fR" +File's status was last changed more recently than \fIfile\fR was +modified. If \fIfile\fR is a symbolic link and the \-H option or the +\-L option is in effect, the status-change time of the file it points +to is always used. + +.IP "\-ctime \fIn\fR" +File's status was last changed \fIn\fR*24 hours ago. +See the comments for +.B \-atime +to understand how rounding affects the interpretation of file status +change times. + +.IP \-empty +File is empty and is either a regular file or a directory. + +.IP \-executable +Matches files which are executable and directories which are +searchable (in a file name resolution sense). This takes into account +access control lists and other permissions artefacts which the +.B \-perm +test ignores. This test makes use of the +.BR access (2) +system call, and so can be fooled by NFS servers which do UID +mapping (or root-squashing), since many systems implement +.BR access (2) +in the client's kernel and so cannot make use of the UID mapping +information held on the server. Because this test is based only on +the result of the +.BR access (2) +system call, there is no guarantee that a file for which this test +succeeds can actually be executed. + +.IP \-false +Always false. + +.IP "\-fstype \fItype\fR" +File is on a filesystem of type \fItype\fR. The valid filesystem +types vary among different versions of Unix; an incomplete list of +filesystem types that are accepted on some version of Unix or another +is: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. You can use \-printf +with the %F directive to see the types of your filesystems. + +.IP "\-gid \fIn\fR" +File's numeric group ID is \fIn\fR. + +.IP "\-group \fIgname\fR" +File belongs to group \fIgname\fR (numeric group ID allowed). + +.IP "\-ilname \fIpattern\fR" +Like \-lname, but the match is case insensitive. +If the \-L option or the \-follow option is in effect, this test +returns false unless the symbolic link is broken. + +.IP "\-iname \fIpattern\fR" +Like \-name, but the match is case insensitive. For example, the +patterns `fo*' and `F??' match the file names `Foo', `FOO', `foo', +`fOo', etc. In these patterns, unlike filename expansion by the +shell, an initial '.' can be matched by `*'. That is, +.B find \-name *bar +will match the file `.foobar'. Please note that you should quote +patterns as a matter of course, otherwise the shell will expand any +wildcard characters in them. + +.IP "\-inum \fIn\fR" +File has inode number \fIn\fR. It is normally easier to use the +.B \-samefile +test instead. + +.IP "\-ipath \fIpattern\fR" +Behaves in the same way as \-iwholename. This option is deprecated, +so please do not use it. + +.IP "\-iregex \fIpattern\fR" +Like \-regex, but the match is case insensitive. + +.IP "\-iwholename \fIpattern\fR" +Like \-wholename, but the match is case insensitive. + +.IP "\-links \fIn\fR" +File has \fIn\fR links. + +.IP "\-lname \fIpattern\fR" +File is a symbolic link whose contents match shell pattern +\fIpattern\fR. The metacharacters do not treat `/' or `.' specially. +If the \-L option or the \-follow option is in effect, this test +returns false unless the symbolic link is broken. + +.IP "\-mmin \fIn\fR" +File's data was last modified \fIn\fR minutes ago. + +.IP "\-mtime \fIn\fR" +File's data was last modified \fIn\fR*24 hours ago. +See the comments for +.B \-atime +to understand how rounding affects the interpretation of file +modification times. + +.IP "\-name \fIpattern\fR" +Base of file name (the path with the leading directories removed) +matches shell pattern \fIpattern\fR. The metacharacters (`*', `?', +and `[]') match a `.' at the start of the base name (this is a change +in findutils-4.2.2; see section STANDARDS CONFORMANCE below). To ignore a +directory and the files under it, use \-prune; see an example in the +description of \-path. Braces are not recognised as being +special, despite the fact that some shells including Bash imbue braces +with a special meaning in shell patterns. The filename matching is +performed with the use of the +.BR fnmatch (3) +library function. Don't forget to enclose the pattern in quotes +in order to protect it from expansion by the shell. + +.IP "\-newer \fIfile\fR" +File was modified more recently than \fIfile\fR. If \fIfile\fR is a +symbolic link and the \-H option or the \-L option is in effect, the +modification time of the file it points to is always used. + +.IP "\-newerXY \fIreference\fR" +Compares the timestamp of the current file with \fIreference\fR. +The +.I reference +argument is normally the name of a file (and one of its timestamps is +used for the comparison) but it may also be a string describing an +absolute time. +.I X +and +.I Y +are placeholders for other letters, and these letters select which +time belonging to +how +.I reference +is used for the comparison. +.TS +ll +ll +ll +ll +llw(2i). +a The access time of the file \fIreference\fR +B The birth time of the file \fIreference\fR +c The inode status change time of \fIreference\fR +m The modification time of the file \fIreference\fR +t \fIreference\fR is interpreted directly as a time +.TE + +Some combinations are invalid; for example, it is invalid for +.I X +to be +.IR t . +Some combinations are not implemented on all systems; for example +.I B +is not supported on all systems. If an invalid or unsupported +combination of +.I XY +is specified, a fatal error results. Time specifications are +interpreted as for the argument to the \-d option of GNU +.BR date . +If you try to use the birth time of a reference file, and the birth +time cannot be determined, a fatal error message results. If you +specify a test which refers to the birth time of files being examined, +this test will fail for any files where the birth time is unknown. + +.IP \-nogroup +No group corresponds to file's numeric group ID. + +.IP \-nouser +No user corresponds to file's numeric user ID. + +.IP "\-path \fIpattern\fR" +File name matches shell pattern \fIpattern\fR. The metacharacters do +not treat `/' or `.' specially; so, for example, +.br +.in +1i +find . \-path "./sr*sc" +.br +.in -1i +will print an entry for a directory called `./src/misc' (if one +exists). To ignore a whole directory tree, use \-prune rather than +checking every file in the tree. For example, to skip the +directory `src/emacs' and all files and directories under it, and +print the names of the other files found, do something like this: +.br +.in +1i +find . \-path ./src/emacs \-prune \-o \-print +.br +.in -1i +Note that the pattern match test applies to the whole file name, +starting from one of the start points named on the command line. It +would only make sense to use an absolute path name here if the +relevant start point is also an absolute path. This means that this +command will never match anything: +.br +.in +1i +find bar \-path /foo/bar/myfile \-print +.br +.in -1i +The predicate \-path +is also supported by HP-UX +.B find +and will be in a forthcoming version of the POSIX standard. + +.IP "\-perm \fImode\fR" +File's permission bits are exactly \fImode\fR (octal or symbolic). +Since an exact match is required, if you want to use this form for +symbolic modes, you may have to specify a rather complex mode string. +For example `\-perm g=w' will only match files which have mode 0020 +(that is, ones for which group write permission is the only permission +set). It is more likely that you will want to use the `/' or `-' +forms, for example `\-perm \-g=w', which matches any file with group +write permission. See the +.B EXAMPLES +section for some illustrative examples. + +.IP "\-perm \-\fImode\fR" +All of the permission bits \fImode\fR are set for the file. +Symbolic modes are accepted in this form, and this is usually the way +in which would want to use them. You must specify `u', `g' or `o' if +you use a symbolic mode. See the +.B EXAMPLES +section for some illustrative examples. + +.IP "\-perm /\fImode\fR" +Any of the permission bits \fImode\fR are set for the file. Symbolic +modes are accepted in this form. You must specify `u', `g' or `o' if +you use a symbolic mode. See the +.B EXAMPLES +section for some illustrative examples. If no permission bits in +.I mode +are set, this test currently matches no files. However, it will soon +be changed to match any file (the idea is to be more consistent with +the behaviour of +.B \-perm +.BR \-000 ). + +.IP "\-perm +\fImode\fR" +Deprecated, old way of searching for files with any of the permission +bits in \fImode\fR set. You should use +.B \-perm \fI/mode\fR +instead. Trying to use the `+' syntax with symbolic modes will yield +surprising results. For example, `+u+x' is a valid symbolic mode +(equivalent to +u,+x, i.e. 0111) and will therefore not be evaluated +as +.B \-perm +\fImode\fR +but instead as the exact mode specifier +.B \-perm \fImode\fR +and so it matches files with exact permissions 0111 instead of files with any +execute bit set. If you found this paragraph confusing, you're not +alone - just use +.B \-perm /\fImode\fR. +This form of the +.B \-perm +test is deprecated because the POSIX specification requires the +interpretation of a leading `+' as being part of a symbolic mode, and +so we switched to using `/' instead. + +.IP \-readable +Matches files which are readable. This takes into account access +control lists and other permissions artefacts which the +.B \-perm +test ignores. This test makes use of the +.BR access (2) +system call, and so can be fooled by NFS servers which do UID +mapping (or root-squashing), since many systems implement +.BR access (2) +in the client's kernel and so cannot make use of the UID mapping +information held on the server. + +.IP "\-regex \fIpattern\fR" +File name matches regular expression \fIpattern\fR. This is a match +on the whole path, not a search. For example, to match a file named +`./fubar3', you can use the regular expression `.*bar.' or `.*b.*3', +but not `f.*r3'. The regular expressions understood by +.B find +are by default Emacs Regular Expressions, but this can be +changed with the +.B \-regextype +option. + +.IP "\-samefile \fIname\fR" +File refers to the same inode as \fIname\fR. When \-L is in effect, +this can include symbolic links. + +.IP "\-size \fIn\fR[cwbkMG]" +File uses \fIn\fP units of space. The following suffixes +can be used: +.RS +.IP `b' +for 512-byte blocks (this is the default if no suffix is used) +.IP `c' +for bytes +.IP `w' +for two-byte words +.IP `k' +for Kilobytes (units of 1024 bytes) +.IP `M' +for Megabytes (units of 1048576 bytes) +.IP `G' +for Gigabytes (units of 1073741824 bytes) +.RE +.IP +The size does not count indirect blocks, but it does count blocks in +sparse files that are not actually allocated. Bear in mind that the +`%k' and `%b' format specifiers of \-printf handle sparse files +differently. The `b' suffix always denotes 512-byte blocks and never +1 Kilobyte blocks, which is different to the behaviour of \-ls. + +.IP \-true +Always true. + +.IP "\-type \fIc\fR" +File is of type \fIc\fR: +.RS +.IP b +block (buffered) special +.IP c +character (unbuffered) special +.IP d +directory +.IP p +named pipe (FIFO) +.IP f +regular file +.IP l +symbolic link; this is never true if the \-L option or the \-follow +option is in effect, unless the symbolic link is broken. If you want +to search for symbolic links when \-L is in effect, use \-xtype. +.IP s +socket +.IP D +door (Solaris) +.RE +.IP "\-uid \fIn\fR" +File's numeric user ID is \fIn\fR. + +.IP "\-used \fIn\fR" +File was last accessed \fIn\fR days after its status was last changed. + +.IP "\-user \fIuname\fR" +File is owned by user \fIuname\fR (numeric user ID allowed). + +.IP "\-wholename \fIpattern\fR" +See \-path. This alternative is less portable than \-path. + +.IP "\-writable" +Matches files which are writable. This takes into account access +control lists and other permissions artefacts which the +.B \-perm +test ignores. This test makes use of the +.BR access (2) +system call, and so can be fooled by NFS servers which do UID +mapping (or root-squashing), since many systems implement +.BR access (2) +in the client's kernel and so cannot make use of the UID mapping +information held on the server. + +.IP "\-xtype \fIc\fR" +The same as \-type unless the file is a symbolic link. For symbolic +links: if the \-H or \-P option was specified, true if the file is a +link to a file of type \fIc\fR; if the \-L option has been given, true +if \fIc\fR is `l'. In other words, for symbolic links, \-xtype checks +the type of the file that \-type does not check. + +.SS ACTIONS +.IP "\-delete\fR" +Delete files; true if removal succeeded. If the removal failed, an +error message is issued. Use of this action automatically turns on +the `\-depth' option. Don't forget that the find command line is +evaluated as an expression, so putting \-delete first will make +.B find +try to delete everything below the starting points you specified. +When testing a +.B find +command line that you later intend to use with \-delete, you should +explicitly specify \-depth in order to avoid later surprises. Because +\-delete implies \-depth, you cannot usefully use \-prune and \-delete +together. + +.IP "\-exec \fIcommand\fR ;" +Execute \fIcommand\fR; true if 0 status is returned. All following +arguments to +.B find +are taken to be arguments to the command until an argument consisting +of `;' is encountered. The string `{}' is replaced by the current +file name being processed everywhere it occurs in the arguments to the +command, not just in arguments where it is alone, as in some versions +of +.BR find . +Both of these constructions might need to be escaped (with a `\e') or +quoted to protect them from expansion by the shell. See the +.B EXAMPLES +section for examples of the use of the `\-exec' option. The specified +command is run once for each matched file. +The command is executed in the starting directory. There are +unavoidable security problems surrounding use of the \-exec action; +you should use the \-execdir option instead. + +.IP "\-exec \fIcommand\fR {} +" +This variant of the \-exec action runs the specified command on the +selected files, but the command line is built by appending each +selected file name at the end; the total number of invocations of the +command will be much less than the number of matched files. The +command line is built in much the same way that +.B xargs +builds its command lines. Only one instance of `{}' is allowed within +the command. The command is executed in the starting directory. + +.IP "\-execdir \fIcommand\fR ;" +.IP "\-execdir \fIcommand\fR {} +" +Like \-exec, but the specified command is run from the subdirectory +containing the matched file, which is not normally the directory in +which you started +.BR find . +This a much more secure method for invoking commands, as it avoids +race conditions during resolution of the paths to the matched files. +As with the \-exec action, the `+' form of \-execdir will build a +command line to process more than one matched file, but any given +invocation of +.I command +will only list files that exist in the same subdirectory. If you use +this option, you must ensure that your +.B $PATH +environment variable does not reference `.'; +otherwise, an attacker can run any commands they like by leaving an +appropriately-named file in a directory in which you will run +\-execdir. The same applies to having entries in +.B $PATH +which are empty or which are not absolute directory names. + +.IP "\-fls \fIfile\fR" +True; like \-ls but write to \fIfile\fR like \-fprint. +The output file is always created, even if the predicate is never +matched. +See the +.B UNUSUAL FILENAMES +section for information about how unusual characters in filenames are handled. + +.IP "\-fprint \fIfile\fR" +True; print the full file name into file \fIfile\fR. If \fIfile\fR +does not exist when \fBfind\fR is run, it is created; if it does +exist, it is truncated. The file names ``/dev/stdout'' and +``/dev/stderr'' are handled specially; they refer to the standard +output and standard error output, respectively. +The output file is always created, even if the predicate is never matched. +See the +.B UNUSUAL FILENAMES +section for information about how unusual characters in filenames are handled. + +.IP "\-fprint0 \fIfile\fR" +True; like \-print0 but write to \fIfile\fR like \-fprint. +The output file is always created, even if the predicate is never matched. +See the +.B UNUSUAL FILENAMES +section for information about how unusual characters in filenames are handled. + +.IP "\-fprintf \fIfile\fR \fIformat\fR" +True; like \-printf but write to \fIfile\fR like \-fprint. +The output file is always created, even if the predicate is never matched. +See the +.B UNUSUAL FILENAMES +section for information about how unusual characters in filenames are handled. + +.IP \-ls +True; list current file in `ls \-dils' format on standard output. +The block counts are of 1K blocks, unless the environment variable +POSIXLY_CORRECT is set, in which case 512-byte blocks are used. +See the +.B UNUSUAL FILENAMES +section for information about how unusual characters in filenames are handled. + +.IP "\-ok \fIcommand\fR ;" +Like \-exec but ask the user first (on the standard input); if the +response does not start with `y' or `Y', do not run the command, and +return false. If the command is run, its standard input is redirected +from +.BR /dev/null . + +.IP "\-okdir \fIcommand\fR ;" +Like \-execdir but ask the user first (on the standard input); if the +response does not start with `y' or `Y', do not run the command, and +return false. If the command is run, its standard input is redirected +from +.BR /dev/null . + +.IP \-print +True; print the full file name on the standard output, followed by a +newline. If you are piping the output of +.B find +into another program and there is the faintest possibility that the files +which you are searching for might contain a newline, then you should +seriously consider using the `\-print0' option instead of `\-print'. +See the +.B UNUSUAL FILENAMES +section for information about how unusual characters in filenames are handled. + +.IP \-print0 +True; print the full file name on the standard output, followed by a +null character (instead of the newline character that `\-print' uses). +This allows file names that contain newlines or other types of white +space to be correctly interpreted by programs that process the +\fBfind\fR output. This option corresponds to the `\-0' option of +.BR xargs . + +.IP "\-printf \fIformat\fR" +True; print \fIformat\fR on the standard output, interpreting `\e' +escapes and `%' directives. Field widths and precisions can be +specified as with the `printf' C function. Please note that many of +the fields are printed as %s rather than %d, and this may mean that +flags don't work as you might expect. This also means that the `\-' +flag does work (it forces fields to be left-aligned). Unlike \-print, +\-printf does not add a newline at the end of the string. The escapes +and directives are: +.RS +.IP \ea +Alarm bell. +.IP \eb +Backspace. +.IP \ec +Stop printing from this format immediately and flush the output. +.IP \ef +Form feed. +.IP \en +Newline. +.IP \er +Carriage return. +.IP \et +Horizontal tab. +.IP \ev +Vertical tab. +.IP \e\0 +ASCII NUL. +.IP \e\e +A literal backslash (`\e'). +.IP \eNNN +The character whose ASCII code is NNN (octal). +.PP +A `\e' character followed by any other character is treated as an +ordinary character, so they both are printed. +.IP %% +A literal percent sign. +.IP %a +File's last access time in the format returned by the C `ctime' function. +.IP %A\fIk\fP +File's last access time in the format specified by \fIk\fR, which is +either `@' or a directive for the C `strftime' function. The possible +values for \fIk\fR are listed below; some of them might not be +available on all systems, due to differences in `strftime' between +systems. +.RS +.IP @ +seconds since Jan. 1, 1970, 00:00 GMT, with fractional part. +.PP +Time fields: +.IP H +hour (00..23) +.IP I +hour (01..12) +.IP k +hour ( 0..23) +.IP l +hour ( 1..12) +.IP M +minute (00..59) +.IP p +locale's AM or PM +.IP r +time, 12-hour (hh:mm:ss [AP]M) +.IP S +Second (00.00 .. 61.00). There is a fractional part. +.IP T +time, 24-hour (hh:mm:ss) +.IP + +Date and time, separated by `+', for example +`2004\-04\-28+22:22:05.0'. This is a GNU extension. The time is +given in the current timezone (which may be affected by setting the TZ +environment variable). The seconds field includes a fractional part. +.IP X +locale's time representation (H:M:S) +.IP Z +time zone (e.g., EDT), or nothing if no time zone is determinable +.PP +Date fields: +.IP a +locale's abbreviated weekday name (Sun..Sat) +.IP A +locale's full weekday name, variable length (Sunday..Saturday) +.IP b +locale's abbreviated month name (Jan..Dec) +.IP B +locale's full month name, variable length (January..December) +.IP c +locale's date and time (Sat Nov 04 12:02:33 EST 1989). The format is +the same as for +.BR ctime (3) +and so to preserve compatibility with that format, there is no fractional part +in the seconds field. +.IP d +day of month (01..31) +.IP D +date (mm/dd/yy) +.IP h +same as b +.IP j +day of year (001..366) +.IP m +month (01..12) +.IP U +week number of year with Sunday as first day of week (00..53) +.IP w +day of week (0..6) +.IP W +week number of year with Monday as first day of week (00..53) +.IP x +locale's date representation (mm/dd/yy) +.IP y +last two digits of year (00..99) +.IP Y +year (1970...) +.RE +.IP %b +The amount of disk space used for this file in 512-byte blocks. Since disk +space is allocated in multiples of the filesystem block size this is usually +greater than %s/512, but it can also be smaller if the file is a sparse file. +.IP %c +File's last status change time in the format returned by the C `ctime' +function. +.IP %C\fIk\fP +File's last status change time in the format specified by \fIk\fR, +which is the same as for %A. +.IP %d +File's depth in the directory tree; 0 means the file is a command line +argument. +.IP %D +The device number on which the file exists (the st_dev field of struct +stat), in decimal. +.IP %f +File's name with any leading directories removed (only the last element). +.IP %F +Type of the filesystem the file is on; this value can be used for +\-fstype. +.IP %g +File's group name, or numeric group ID if the group has no name. +.IP %G +File's numeric group ID. +.IP %h +Leading directories of file's name (all but the last element). +If the file name contains no slashes (since it is in the current +directory) the %h specifier expands to ".". +.IP %H +Command line argument under which file was found. +.IP %i +File's inode number (in decimal). +.IP %k +The amount of disk space used for this file in 1K blocks. Since disk space is +allocated in multiples of the filesystem block size this is usually greater +than %s/1024, but it can also be smaller if the file is a sparse file. +.IP %l +Object of symbolic link (empty string if file is not a symbolic link). +.IP %m +File's permission bits (in octal). This option uses the `traditional' +numbers which most Unix implementations use, but if your particular +implementation uses an unusual ordering of octal permissions bits, you +will see a difference between the actual value of the file's mode and +the output of %m. Normally you will want to have a leading +zero on this number, and to do this, you should use the +.B # +flag (as in, for example, `%#m'). +.IP %M +File's permissions (in symbolic form, as for +.BR ls ). +This directive is supported in findutils 4.2.5 and later. +.IP %n +Number of hard links to file. +.IP %p +File's name. +.IP %P +File's name with the name of the command line argument under which +it was found removed. +.IP %s +File's size in bytes. +.IP %S +File's sparseness. This is calculated as (BLOCKSIZE*st_blocks / +st_size). The exact value you will get for an ordinary file of a +certain length is system-dependent. However, normally sparse files +will have values less than 1.0, and files which use indirect blocks +may have a value which is greater than 1.0. The value used for +BLOCKSIZE is system-dependent, but is usually 512 bytes. If the file +size is zero, the value printed is undefined. On systems which lack +support for st_blocks, a file's sparseness is assumed to be 1.0. +.IP %t +File's last modification time in the format returned by the C `ctime' +function. +.IP %T\fIk\fP +File's last modification time in the format specified by \fIk\fR, +which is the same as for %A. +.IP %u +File's user name, or numeric user ID if the user has no name. +.IP %U +File's numeric user ID. +.IP %y +File's type (like in ls \-l), U=unknown type (shouldn't happen) +.IP %Y +File's type (like %y), plus follow symlinks: L=loop, N=nonexistent +.PP +A `%' character followed by any other character is discarded, but the +other character is printed (don't rely on this, as further format +characters may be introduced). A `%' at the end of the format +argument causes undefined behaviour since there is no following +character. In some locales, it may hide your door keys, while in +others it may remove the final page from the novel you are reading. + +The %m and %d directives support the +.B # +, +.B 0 +and +.B + +flags, but the other directives do not, even if they +print numbers. Numeric directives that do not support these flags +include +.BR G , +.BR U , +.BR b , +.BR D , +.B k +and +.BR n . +The `\-' format flag is supported and changes the alignment of a field +from right-justified (which is the default) to left-justified. +.PP +See the +.B UNUSUAL FILENAMES +section for information about how unusual characters in filenames are handled. + + +.RE +.IP \-prune +If \-depth is not given, true; if the file is a directory, do not descend +into it. If \-depth is given, false; no effect. +Because +\-delete implies \-depth, you cannot usefully use \-prune and \-delete +together. + +.IP "\-quit" +Exit immediately. No child processes will be left running, but no more +paths specified on the command line will be processed. For example, +.B find /tmp/foo /tmp/bar \-print \-quit +will print only +.BR /tmp/foo . +Any command lines which have been built up with +.B \-execdir ... {} + +will be invoked before +.B find +exits. The exit status may or may not be zero, depending on whether +an error has already occurred. + +.SS UNUSUAL FILENAMES +Many of the actions of +.B find +result in the printing of data which is under the control of other +users. This includes file names, sizes, modification times and so +forth. File names are a potential problem since they can contain any +character except `\e0' and `/'. Unusual characters in file names can +do unexpected and often undesirable things to your terminal (for +example, changing the settings of your function keys on some +terminals). Unusual characters are handled differently by various +actions, as described below. + +.IP "\-print0, \-fprint0\" +Always print the exact filename, unchanged, even if the output is +going to a terminal. + +.IP "\-ls, \-fls" +Unusual characters are always escaped. White space, backslash, and +double quote characters are printed using C-style escaping (for +example `\ef', `\e"'). Other unusual characters are printed using an +octal escape. Other printable characters (for \-ls and \-fls these are +the characters between octal 041 and 0176) are printed as-is. + +.IP "\-printf, \-fprintf" +If the output is not going to a terminal, it is printed as-is. +Otherwise, the result depends on which directive is in use. The +directives %D, %F, %g, %G, %H, %Y, and %y expand to values which are +not under control of files' owners, and so are printed as-is. The +directives %a, %b, %c, %d, %i, %k, %m, %M, %n, %s, %t, %u and %U have +values which are under the control of files' owners but which cannot +be used to send arbitrary data to the terminal, and so these are +printed as-is. The directives %f, %h, %l, %p and %P are quoted. This +quoting is performed in the same way as for GNU +.BR ls . +This is not the same quoting mechanism as the one used for \-ls and +\-fls. If you are able to decide what format to use for the output +of +.B find +then it is normally better to use `\e0' as a terminator +than to use newline, as file names can contain white space and newline +characters. + +.IP "\-print, \-fprint" +Quoting is handled in the same way as for \-printf and \-fprintf. +If you are using +.B find +in a script or in a situation where the matched files might have +arbitrary names, you should consider using \-print0 instead of +\-print. +.P +The \-ok and \-okdir actions print the current filename as-is. This +may change in a future release. +.SS OPERATORS +.P +Listed in order of decreasing precedence: + +.IP "( \fIexpr\fR )" +Force precedence. Since parentheses are special to the shell, you +will normally need to quote them. Many of the examples in this manual +page use backslashes for this purpose: `\e(...\e)' instead of `(...)'. + +.IP "! \fIexpr\fR" +True if \fIexpr\fR is false. This character will also usually need +protection from interpretation by the shell. + +.IP "\-not \fIexpr\fR" +Same as ! \fIexpr\fR, but not POSIX compliant. + +.IP "\fIexpr1 expr2\fR" +Two expressions in a row are taken to be joined with an +implied "and"; \fIexpr2\fR is not evaluated if \fIexpr1\fR is false. + +.IP "\fIexpr1\fR \-a \fIexpr2\fR" +Same as \fIexpr1 expr2\fR. + +.IP "\fIexpr1\fR \-and \fIexpr2\fR" +Same as \fIexpr1 expr2\fR, but not POSIX compliant. + +.IP "\fIexpr1\fR \-o \fIexpr2\fR" +Or; \fIexpr2\fR is not evaluated if \fIexpr1\fR is true. + +.IP "\fIexpr1\fR \-or \fIexpr2\fR" +Same as \fIexpr1\fR \-o \fIexpr2\fR, but not POSIX compliant. + +.IP "\fIexpr1\fR , \fIexpr2\fR" +List; both \fIexpr1\fR and \fIexpr2\fR are always evaluated. The +value of \fIexpr1\fR is discarded; the value of the list is the value +of \fIexpr2\fR. The comma operator can be useful for searching for +several different types of thing, but traversing the filesystem +hierarchy only once. The +.B \-fprintf +action can be used to list the various matched items into several +different output files. + + +.SH "STANDARDS CONFORMANCE" +For closest compliance to the POSIX standard, you should set the +POSIXLY_CORRECT environment variable. The following options are +specified in the POSIX standard (IEEE Std 1003.1, 2003 Edition): + +.IP \fB\-H\fR +This option is supported. + +.IP \fB\-L\fR +This option is supported. + +.IP \fB\-name\fR +This option is supported, but POSIX conformance depends on the +POSIX conformance of the system's +.BR fnmatch (3) +library function. As of findutils-4.2.2, shell metacharacters +(`*', `?' or `[]' for example) will match a leading `.', because +IEEE PASC interpretation 126 requires this. This is a change from +previous versions of findutils. + +.IP \fB\-type\fR +Supported. POSIX specifies `b', `c', `d', `l', `p', `f' and `s'. +GNU find also supports `D', representing a Door, where the OS provides these. + +.IP \fB\-ok\fR +Supported. Interpretation of the response is not locale-dependent +(see ENVIRONMENT VARIABLES). + +.IP \fB\-newer\fR +Supported. If the file specified is a symbolic link, it is always +dereferenced. This is a change from previous behaviour, which used to +take the relevant time from the symbolic link; see the HISTORY section +below. + +.IP \fB\-perm\fR +Supported. If the POSIXLY_CORRECT environment variable is not set, +some mode arguments (for example +a+x) which are not valid in POSIX +are supported for backward-compatibility. + +.IP "Other predicates" +The predicates +.BR \-atime , +.BR \-ctime , +.BR \-depth , +.BR \-group , +.BR \-links , +.BR \-mtime , +.BR \-nogroup , +.BR \-nouser , +.BR \-print , +.BR \-prune , +.BR \-size , +.BR \-user +and +.B \-xdev +are all supported. + +.P +The POSIX standard specifies parentheses `(', `)', negation `!' and the +`and' and `or' operators (`\-a', `\-o'). +.P +All other options, predicates, expressions and so forth are extensions +beyond the POSIX standard. Many of these extensions are not unique to +GNU find, however. +.P +The POSIX standard requires that +.B find +detects loops: +.IP +The +.B find +utility shall detect infinite loops; that is, entering a +previously visited directory that is an ancestor of the last file +encountered. When it detects an infinite loop, find shall write a +diagnostic message to standard error and shall either recover its +position in the hierarchy or terminate. +.P +GNU +.B find +complies with these requirements. The link count of +directories which contain entries which are hard links to an ancestor +will often be lower than they otherwise should be. This can mean that +GNU find will sometimes optimise away the visiting of a subdirectory +which is actually a link to an ancestor. Since +.B find +does not actually enter such a subdirectory, it is allowed to avoid +emitting a diagnostic message. Although this behaviour may be +somewhat confusing, it is unlikely that anybody actually depends on +this behaviour. If the leaf optimisation has been turned off with +.BR \-noleaf , +the directory entry will always be examined and the diagnostic message +will be issued where it is appropriate. Symbolic links cannot be used +to create filesystem cycles as such, but if the \-L option or the +\-follow option is in use, a diagnostic message is issued when +.B find +encounters a loop of symbolic links. As with loops containing hard +links, the leaf optimisation will often mean that +.B find +knows that it doesn't need to call +.I stat() +or +.I chdir() +on the symbolic link, so this diagnostic is frequently not necessary. +.P +The \-d option is supported for compatibility with various BSD systems, +but you should use the POSIX-compliant option \-depth instead. +.P +The POSIXLY_CORRECT environment variable does not affect the behaviour +of the \-regex or \-iregex tests because those tests aren't specified in +the POSIX standard. +.SH "ENVIRONMENT VARIABLES" + +.IP LANG +Provides a default value for the internationalization variables that +are unset or null. + +.IP LC_ALL +If set to a non-empty string value, override the values of all the +other internationalization variables. + +.IP LC_COLLATE +The POSIX standard specifies that this variable affects the pattern +matching to be used for the `\-name' option. GNU find uses the +.BR fnmatch (3) +library function, and so support for `LC_COLLATE' depends on the +system library. + +.IP +POSIX also specifies that the `LC_COLLATE' environment +variable affects the interpretation of the user's response to the +query issued by `\-ok', but this is not the case for GNU find. + +.IP LC_CTYPE +This variable affects the treatment of character classes used with +the `\-name' test, if the system's +.BR fnmatch (3) +library function supports this. It has no effect on the behaviour +of the `\-ok' expression. + +.IP LC_MESSAGES +Determines the locale to be used for internationalised messages. + +.IP NLSPATH +Determines the location of the internationalisation message catalogues. + +.IP PATH +Affects the directories which are searched to find the executables +invoked by `\-exec', `\-execdir', `\-ok' and `\-okdir'. + +.IP POSIXLY_CORRECT +Determines the block size used by +.B \-ls +and +.BR \-fls . +If +.B POSIXLY_CORRECT +is set, blocks are units of 512 bytes. Otherwise +they are units of 1024 bytes. +.IP +Setting this variable also turns off +warning messages (that is, implies +.BR \-nowarn ) +by default, because POSIX requires that apart from +the output for +.BR \-ok , +all messages printed on stderr are diagnositcs and must result in a +non-zero exit status. +.IP +When POSIXLY_CORRECT is not set, +.B \-perm ++zzz +is treated just like +.B \-perm +/zzz +if ++zzz is not a valid symbolic mode. When POSIXLY_CORRECT is set, such +constructs are treated as an error. + +.IP TZ +Affects the time zone used for some of the time-related format +directives of \-printf and \-fprintf. +.SH "EXAMPLES" +.nf +.B find /tmp \-name core \-type f \-print | xargs /bin/rm \-f + +.fi +Find files named +.B core +in or below the directory +.B /tmp +and delete them. Note that this will work incorrectly if there are +any filenames containing newlines, single or double quotes, or spaces. +.P +.B find /tmp \-name core \-type f \-print0 | xargs \-0 /bin/rm \-f + +.fi +Find files named +.B core +in or below the directory +.B /tmp +and delete them, processing filenames in such a way that file or +directory names containing single or double quotes, spaces or newlines +are correctly handled. The +.B \-name +test comes before the +.B \-type +test in order to avoid having to call +.B stat(2) +on every file. + +.P +.nf +.B find . \-type f \-exec file \(aq{}\(aq \e\; + +.fi +Runs `file' on every file in or below the current directory. Notice +that the braces are enclosed in single quote marks to protect them +from interpretation as shell script punctuation. The semicolon is +similarly protected by the use of a backslash, though single quotes +could have been used in that case also. + +.P +.nf +.B find / \e +.B \e( \-perm \-4000 \-fprintf /root/suid.txt "%#m %u %p\en" \e) , \e +.B \e( \-size +100M \-fprintf /root/big.txt "%\-10s %p\en" \e) + +.fi +Traverse the filesystem just once, listing setuid files and +directories into +.B /root/suid.txt +and large files into +.BR /root/big.txt . + +.P +.nf +.B find $HOME \-mtime 0 + +.fi +Search for files in your home directory which have been modified in +the last twenty-four hours. This command works this way because the +time since each file was last modified is divided by 24 hours and any +remainder is discarded. That means that to match +.B \-mtime +.BR 0 , +a file will have to have a modification in the past which is less than +24 hours ago. + +.P +.nf +.B find /sbin /usr/sbin -executable \e! -readable \-print + +.fi +Search for files which are executable but not readable. + +.P +.nf +.B find . \-perm 664 + +.fi +Search for files which have read and write permission for their owner, +and group, but which other users can read but not write to. Files +which meet these criteria but have other permissions bits set (for +example if someone can execute the file) will not be matched. + +.P +.nf +.B find . \-perm \-664 + +.fi +Search for files which have read and write permission for their owner +and group, and which other users can read, without regard to the +presence of any extra permission bits (for example the executable +bit). This will match a file which has mode 0777, for example. + +.P +.nf +.B find . \-perm /222 + +.fi +Search for files which are writable by somebody (their owner, or +their group, or anybody else). + +.P +.nf +.B find . \-perm /220 +.B find . \-perm /u+w,g+w +.B find . \-perm /u=w,g=w + +.fi +All three of these commands do the same thing, but the first one uses +the octal representation of the file mode, and the other two use the +symbolic form. These commands all search for files which are +writable by either their owner or their group. The files don't have +to be writable by both the owner and group to be matched; either will +do. + +.P +.nf +.B find . \-perm \-220 +.B find . \-perm \-g+w,u+w + +.fi +Both these commands do the same thing; search for files which are +writable by both their owner and their group. + +.P +.nf +.B find . \-perm \-444 \-perm /222 ! \-perm /111 +.B find . \-perm \-a+r \-perm /a+w ! \-perm /a+x + +.fi +These two commands both search for files that are readable for +everybody (\-perm \-444 or \-perm \-a+r), have at least on write bit +set (\-perm /222 or \-perm /a+w) but are not executable for anybody (! +\-perm /111 and ! \-perm /a+x respectively) + +.P +.nf +.B cd /source-dir +.B find . \-name .snapshot \-prune \-o \e( \e! \-name "*~" \-print0 \e)| +.B cpio \-pmd0 /dest-dir + +.fi +This command copies the contents of +.B /source-dir +to +.BR /dest-dir , +but omits files and directories named +.B .snapshot +(and anything in them). It also omits files or directories whose name +ends in +.BR ~ , +but not their contents. The construct +.B \-prune \-o \e( ... \-print0 \e) +is quite common. The idea here is that the expression before +.B \-prune +matches things which are to be pruned. However, the +.B \-prune +action itself returns true, so the following +.B \-o +ensures that the right hand side is evaluated only for those +directories which didn't get pruned (the contents of the pruned +directories are not even visited, so their contents are irrelevant). +The expression on the right hand side of the +.B \-o +is in parentheses only for clarity. It emphasises that the +.B \-print0 +action takes place only for things that didn't have +.B \-prune +applied to them. Because the default `and' condition between tests +binds more tightly than +.BR \-o , +this is the default anyway, but the parentheses help to show +what is going on. + +.SH EXIT STATUS +.PP +.B find +exits with status 0 if all files are processed successfully, greater +than 0 if errors occur. This is deliberately a very broad +description, but if the return value is non-zero, you should not rely +on the correctness of the results of +.BR find . + +.SH "SEE ALSO" +\fBlocate\fP(1), \fBlocatedb\fP(5), \fBupdatedb\fP(1), \fBxargs\fP(1), +\fBchmod\fP(1), \fBfnmatch\fP(3), \fBregex\fP(7), \fBstat\fP(2), +\fBlstat\fP(2), \fBls\fP(1), \fBprintf\fP(3), \fBstrftime\fP(3), +\fBctime\fP(3), \fBFinding Files\fP (on-line in Info, or printed). +.SH "HISTORY" +As of findutils-4.2.2, shell metacharacters (`*', `?' or `[]' for +example) used in filename patterns will match a leading `.', because +IEEE POSIX interpretation 126 requires this. +.P +The syntax +\.B \-perm +MODE +was deprecated in findutils-4.2.21, in favour of +\.B \-perm +.BR /MODE . +As of findutils-4.3.3, +.B \-perm /000 +now matches all files instead of none. +.P +Nanosecond-resolution +timestamps were implemented in findutils-4.3.3. +.TS +l l l . +Feature Added in Also occurs in +\-newerXY 4.3.3 BSD +\-D 4.3.1 +\-O 4.3.1 +\-readable 4.3.0 +\-writable 4.3.0 +\-executable 4.3.0 +\-regextype 4.2.24 +\-exec ... + 4.2.12 POSIX +\-execdir 4.2.12 BSD +\-okdir 4.2.12 +\-samefile 4.2.11 +\-H 4.2.5 POSIX +\-L 4.2.5 POSIX +\-P 4.2.5 BSD +\-delete 4.2.3 +\-quit 4.2.3 +\-d 4.2.3 BSD +\-wholename 4.2.0 +\-iwholename 4.2.0 +\-ignore_readdir_race 4.2.0 +\-fls 4.0 +\-ilname 3.8 +\-iname 3.8 +\-ipath 3.8 +\-iregex 3.8 +.TE +.SH "NON-BUGS" +.nf +.B $ find . \-name *.c \-print +find: paths must precede expression +Usage: find [\-H] [\-L] [\-P] [\-Olevel] [\-D help|tree|search|stat|rates|opt|exec] [path...] [expression] +.fi +.P +This happens because +.I *.c +has been expanded by the shell +resulting in +.B find +actually receiving a command line like this: +.nf + +.B find . \-name bigram.c code.c frcode.c locate.c \-print + +.fi +That command is of course not going to work. Instead of doing things +this way, you should enclose the pattern in quotes or escape the wildcard: +.nf +.B $ find . \-name \e*.c \-print +.fi + +.SH "BUGS" +.P +There are security problems inherent in the behaviour that the POSIX +standard specifies for +.BR find , +which therefore cannot be fixed. For example, the \-exec action is +inherently insecure, and \-execdir should be used instead. +Please see \fBFinding Files\fP for more information. +.P +The environment variable +.B LC_COLLATE +has no effect on the +.B \-ok +action. +.P +The best way to report a bug is to use the form at +http://savannah.gnu.org/bugs/?group=findutils. +The reason for this is that you will then be able to track progress in +fixing the problem. Other comments about \fBfind\fP(1) and about +the findutils package in general can be sent to the +.I bug\-findutils +mailing list. To join the list, send email to +.IR bug\-findutils\-request@gnu.org . diff --git a/find/find.c b/find/find.c new file mode 100644 index 0000000..bc6f8e9 --- /dev/null +++ b/find/find.c @@ -0,0 +1,1510 @@ +/* find -- search for files in a directory hierarchy + Copyright (C) 1990, 91, 92, 93, 94, 2000, + 2003, 2004, 2005, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/* GNU find was written by Eric Decker , + with enhancements by David MacKenzie , + Jay Plett , + and Tim Wood . + The idea for -print0 and xargs -0 came from + Dan Bernstein . + Improvements have been made by James Youngman . +*/ + + +#include +#include "defs.h" + +#define USE_SAFE_CHDIR 1 +#undef STAT_MOUNTPOINTS + + +#include +#include + +#include +#include +#include + +#include "xalloc.h" +#include "human.h" +#include "canonicalize.h" +#include + +#include "closein.h" +#include "savedirinfo.h" +#include "buildcmd.h" +#include "dirname.h" +#include "quote.h" +#include "quotearg.h" +#include "xgetcwd.h" +#include "error.h" + +#ifdef HAVE_LOCALE_H +#include +#endif + +#if ENABLE_NLS +# include +# define _(Text) gettext (Text) +#else +# define _(Text) Text +#define textdomain(Domain) +#define bindtextdomain(Package, Directory) +#endif +#ifdef gettext_noop +# define N_(String) gettext_noop (String) +#else +/* See locate.c for explanation as to why not use (String) */ +# define N_(String) String +#endif + +#ifdef STAT_MOUNTPOINTS +static void init_mounted_dev_list(int mandatory); +#endif + +static void process_top_path PARAMS((char *pathname, mode_t mode)); +static int process_path PARAMS((char *pathname, char *name, boolean leaf, char *parent, mode_t type)); +static void process_dir PARAMS((char *pathname, char *name, int pathlen, const struct stat *statp, char *parent)); + + + +/* Name this program was run with. */ +char *program_name; + +/* A file descriptor open to the initial working directory. + Doing it this way allows us to work when the i.w.d. has + unreadable parents. */ +int starting_desc; + +/* The stat buffer of the initial working directory. */ +static struct stat starting_stat_buf; + +enum ChdirSymlinkHandling + { + SymlinkHandleDefault, /* Normally the right choice */ + SymlinkFollowOk /* see comment in process_top_path() */ + }; + + +enum TraversalDirection + { + TraversingUp, + TraversingDown + }; + +enum WdSanityCheckFatality + { + FATAL_IF_SANITY_CHECK_FAILS, + RETRY_IF_SANITY_CHECK_FAILS, + NON_FATAL_IF_SANITY_CHECK_FAILS + }; + + +int get_current_dirfd(void) +{ + return AT_FDCWD; +} + + +int +main (int argc, char **argv) +{ + int i; + int end_of_leading_options = 0; /* First arg after any -H/-L etc. */ + struct predicate *eval_tree; + + program_name = argv[0]; + state.exit_status = 0; + + /* Set the option defaults before we do the locale + * initialisation as check_nofollow() needs to be executed in the + * POSIX locale. + */ + set_option_defaults(&options); + +#ifdef HAVE_SETLOCALE + setlocale (LC_ALL, ""); +#endif + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + atexit (close_stdin); + + /* Check for -P, -H or -L options. */ + end_of_leading_options = process_leading_options(argc, argv); + + if (options.debug_options & DebugStat) + options.xstat = debug_stat; + +#ifdef DEBUG + fprintf (stderr, "cur_day_start = %s", ctime (&options.cur_day_start)); +#endif /* DEBUG */ + + /* state.cwd_dir_fd has to be initialised before we call build_expression_tree() + * because command-line parsing may lead us to stat some files. + */ + state.cwd_dir_fd = AT_FDCWD; + + /* We are now processing the part of the "find" command line + * after the -H/-L options (if any). + */ + eval_tree = build_expression_tree(argc, argv, end_of_leading_options); + + + /* safely_chdir() needs to check that it has ended up in the right place. + * To avoid bailing out when something gets automounted, it checks if + * the target directory appears to have had a directory mounted on it as + * we chdir()ed. The problem with this is that in order to notice that + * a file system was mounted, we would need to lstat() all the mount points. + * That strategy loses if our machine is a client of a dead NFS server. + * + * Hence if safely_chdir() and wd_sanity_check() can manage without needing + * to know the mounted device list, we do that. + */ + if (!options.open_nofollow_available) + { +#ifdef STAT_MOUNTPOINTS + init_mounted_dev_list(0); +#endif + } + + + starting_desc = open (".", O_RDONLY +#if defined O_LARGEFILE + |O_LARGEFILE +#endif + ); + if (0 <= starting_desc && fchdir (starting_desc) != 0) + { + close (starting_desc); + starting_desc = -1; + } + + if (starting_desc < 0) + { + starting_dir = xgetcwd (); + if (! starting_dir) + error (1, errno, _("cannot get current directory")); + } + set_stat_placeholders(&starting_stat_buf); + if ((*options.xstat) (".", &starting_stat_buf) != 0) + error (1, errno, _("cannot stat current directory")); + + /* If no paths are given, default to ".". */ + for (i = end_of_leading_options; i < argc && !looks_like_expression(argv[i], true); i++) + { + process_top_path (argv[i], 0); + } + + /* If there were no path arguments, default to ".". */ + if (i == end_of_leading_options) + { + /* + * We use a temporary variable here because some actions modify + * the path temporarily. Hence if we use a string constant, + * we get a coredump. The best example of this is if we say + * "find -printf %H" (note, not "find . -printf %H"). + */ + char defaultpath[2] = "."; + process_top_path (defaultpath, 0); + } + + /* If "-exec ... {} +" has been used, there may be some + * partially-full command lines which have been built, + * but which are not yet complete. Execute those now. + */ + show_success_rates(eval_tree); + cleanup(); + return state.exit_status; +} + +boolean is_fts_enabled(int *ftsoptions) +{ + /* this version of find (i.e. this main()) does not use fts. */ + *ftsoptions = 0; + return false; +} + + +static char * +specific_dirname(const char *dir) +{ + char dirbuf[1024]; + + if (0 == strcmp(".", dir)) + { + /* OK, what's '.'? */ + if (NULL != getcwd(dirbuf, sizeof(dirbuf))) + { + return strdup(dirbuf); + } + else + { + return strdup(dir); + } + } + else + { + char *result = canonicalize_filename_mode(dir, CAN_EXISTING); + if (NULL == result) + return strdup(dir); + else + return result; + } +} + + + +/* Return non-zero if FS is the name of a file system that is likely to + * be automounted + */ +static int +fs_likely_to_be_automounted(const char *fs) +{ + return ( (0==strcmp(fs, "nfs")) || (0==strcmp(fs, "autofs")) || (0==strcmp(fs, "subfs"))); +} + + + +#ifdef STAT_MOUNTPOINTS +static dev_t *mounted_devices = NULL; +static size_t num_mounted_devices = 0u; + + +static void +init_mounted_dev_list(int mandatory) +{ + assert (NULL == mounted_devices); + assert (0 == num_mounted_devices); + mounted_devices = get_mounted_devices(&num_mounted_devices); + if (mandatory && (NULL == mounted_devices)) + { + error(1, 0, "Cannot read list of mounted devices."); + } +} + +static void +refresh_mounted_dev_list(void) +{ + if (mounted_devices) + { + free(mounted_devices); + mounted_devices = 0; + } + num_mounted_devices = 0u; + init_mounted_dev_list(1); +} + + +/* Search for device DEV in the array LIST, which is of size N. */ +static int +dev_present(dev_t dev, const dev_t *list, size_t n) +{ + if (list) + { + while (n-- > 0u) + { + if ( (*list++) == dev ) + return 1; + } + } + return 0; +} + +enum MountPointStateChange + { + MountPointRecentlyMounted, + MountPointRecentlyUnmounted, + MountPointStateUnchanged + }; + + + +static enum MountPointStateChange +get_mount_state(dev_t newdev) +{ + int new_is_present, new_was_present; + + new_was_present = dev_present(newdev, mounted_devices, num_mounted_devices); + refresh_mounted_dev_list(); + new_is_present = dev_present(newdev, mounted_devices, num_mounted_devices); + + if (new_was_present == new_is_present) + return MountPointStateUnchanged; + else if (new_is_present) + return MountPointRecentlyMounted; + else + return MountPointRecentlyUnmounted; +} + + + +/* We stat()ed a directory, chdir()ed into it (we know this + * since direction is TraversingDown), stat()ed it again, + * and noticed that the device numbers are different. Check + * if the file system was recently mounted. + * + * If it was, it looks like chdir()ing into the directory + * caused a file system to be mounted. Maybe automount is + * running. Anyway, that's probably OK - but it happens + * only when we are moving downward. + * + * We also allow for the possibility that a similar thing + * has happened with the unmounting of a file system. This + * is much rarer, as it relies on an automounter timeout + * occurring at exactly the wrong moment. + */ +static enum WdSanityCheckFatality +dirchange_is_fatal(const char *specific_what, + enum WdSanityCheckFatality isfatal, + int silent, + struct stat *newinfo) +{ + enum MountPointStateChange transition = get_mount_state(newinfo->st_dev); + switch (transition) + { + case MountPointRecentlyUnmounted: + isfatal = NON_FATAL_IF_SANITY_CHECK_FAILS; + if (!silent) + { + error (0, 0, + _("Warning: file system %s has recently been unmounted."), + safely_quote_err_filename(0, specific_what)); + } + break; + + case MountPointRecentlyMounted: + isfatal = NON_FATAL_IF_SANITY_CHECK_FAILS; + if (!silent) + { + error (0, 0, + _("Warning: file system %s has recently been mounted."), + safely_quote_err_filename(0, specific_what)); + } + break; + + case MountPointStateUnchanged: + /* leave isfatal as it is */ + break; + } + + return isfatal; +} + + +#endif + + + +/* Examine the results of the stat() of a directory from before we + * entered or left it, with the results of stat()ing it afterward. If + * these are different, the file system tree has been modified while we + * were traversing it. That might be an attempt to use a race + * condition to persuade find to do something it didn't intend + * (e.g. an attempt by an ordinary user to exploit the fact that root + * sometimes runs find on the whole file system). However, this can + * also happen if automount is running (certainly on Solaris). With + * automount, moving into a directory can cause a file system to be + * mounted there. + * + * To cope sensibly with this, we will raise an error if we see the + * device number change unless we are chdir()ing into a subdirectory, + * and the directory we moved into has been mounted or unmounted "recently". + * Here "recently" means since we started "find" or we last re-read + * the /etc/mnttab file. + * + * If the device number does not change but the inode does, that is a + * problem. + * + * If the device number and inode are both the same, we are happy. + * + * If a file system is (un)mounted as we chdir() into the directory, that + * may mean that we're now examining a section of the file system that might + * have been excluded from consideration (via -prune or -quit for example). + * Hence we print a warning message to indicate that the output of find + * might be inconsistent due to the change in the file system. + */ +static boolean +wd_sanity_check(const char *thing_to_stat, + const char *progname, + const char *what, + dev_t old_dev, + ino_t old_ino, + struct stat *newinfo, + int parent, + int line_no, + enum TraversalDirection direction, + enum WdSanityCheckFatality isfatal, + boolean *changed) /* output parameter */ +{ + const char *fstype; + char *specific_what = NULL; + int silent = 0; + const char *current_dir = "."; + + *changed = false; + + set_stat_placeholders(newinfo); + if ((*options.xstat) (current_dir, newinfo) != 0) + fatal_file_error(thing_to_stat); + + if (old_dev != newinfo->st_dev) + { + *changed = true; + specific_what = specific_dirname(what); + fstype = filesystem_type(newinfo, current_dir); + silent = fs_likely_to_be_automounted(fstype); + + /* This condition is rare, so once we are here it is + * reasonable to perform an expensive computation to + * determine if we should continue or fail. + */ + if (TraversingDown == direction) + { +#ifdef STAT_MOUNTPOINTS + isfatal = dirchange_is_fatal(specific_what,isfatal,silent,newinfo); +#else + isfatal = RETRY_IF_SANITY_CHECK_FAILS; +#endif + } + + switch (isfatal) + { + case FATAL_IF_SANITY_CHECK_FAILS: + { + fstype = filesystem_type(newinfo, current_dir); + error (1, 0, + _("%s%s changed during execution of %s (old device number %ld, new device number %ld, file system type is %s) [ref %ld]"), + safely_quote_err_filename(0, specific_what), + parent ? "/.." : "", + safely_quote_err_filename(1, progname), + (long) old_dev, + (long) newinfo->st_dev, + fstype, + (long)line_no); + /*NOTREACHED*/ + return false; + } + + case NON_FATAL_IF_SANITY_CHECK_FAILS: + { + /* Since the device has changed under us, the inode number + * will almost certainly also be different. However, we have + * already decided that this is not a problem. Hence we return + * without checking the inode number. + */ + free(specific_what); + return true; + } + + case RETRY_IF_SANITY_CHECK_FAILS: + return false; + } + } + + /* Device number was the same, check if the inode has changed. */ + if (old_ino != newinfo->st_ino) + { + *changed = true; + specific_what = specific_dirname(what); + fstype = filesystem_type(newinfo, current_dir); + + error ((isfatal == FATAL_IF_SANITY_CHECK_FAILS) ? 1 : 0, + 0, /* no relevant errno value */ + _("%s%s changed during execution of %s (old inode number %ld, new inode number %ld, file system type is %s) [ref %ld]"), + safely_quote_err_filename(0, specific_what), + parent ? "/.." : "", + safely_quote_err_filename(1, progname), + (long) old_ino, + (long) newinfo->st_ino, + fstype, + (long)line_no); + free(specific_what); + return false; + } + + return true; +} + +enum SafeChdirStatus + { + SafeChdirOK, + SafeChdirFailSymlink, + SafeChdirFailNotDir, + SafeChdirFailStat, + SafeChdirFailWouldBeUnableToReturn, + SafeChdirFailChdirFailed, + SafeChdirFailNonexistent, + SafeChdirFailDestUnreadable + }; + +/* Safely perform a change in directory. We do this by calling + * lstat() on the subdirectory, using chdir() to move into it, and + * then lstat()ing ".". We compare the results of the two stat calls + * to see if they are consistent. If not, we sound the alarm. + * + * If following_links() is true, we do follow symbolic links. + */ +static enum SafeChdirStatus +safely_chdir_lstat(const char *dest, + enum TraversalDirection direction, + struct stat *statbuf_dest, + enum ChdirSymlinkHandling symlink_follow_option, + boolean *did_stat) +{ + struct stat statbuf_arrived; + int rv, dotfd=-1; + int saved_errno; /* specific_dirname() changes errno. */ + boolean rv_set = false; + boolean statflag = false; + int tries = 0; + enum WdSanityCheckFatality isfatal = RETRY_IF_SANITY_CHECK_FAILS; + + saved_errno = errno = 0; + + dotfd = open(".", O_RDONLY +#if defined O_LARGEFILE + |O_LARGEFILE +#endif + ); + + /* We jump back to here if wd_sanity_check() + * recoverably triggers an alert. + */ + retry: + ++tries; + + if (dotfd >= 0) + { + /* Stat the directory we're going to. */ + set_stat_placeholders(statbuf_dest); + if (0 == options.xstat(dest, statbuf_dest)) + { + statflag = true; + +#ifdef S_ISLNK + /* symlink_follow_option might be set to SymlinkFollowOk, which + * would allow us to chdir() into a symbolic link. This is + * only useful for the case where the directory we're + * chdir()ing into is the basename of a command line + * argument, for example where "foo/bar/baz" is specified on + * the command line. When -P is in effect (the default), + * baz will not be followed if it is a symlink, but if bar + * is a symlink, it _should_ be followed. Hence we need the + * ability to override the policy set by following_links(). + */ + if (!following_links() && S_ISLNK(statbuf_dest->st_mode)) + { + /* We're not supposed to be following links, but this is + * a link. Check symlink_follow_option to see if we should + * make a special exception. + */ + if (symlink_follow_option == SymlinkFollowOk) + { + /* We need to re-stat() the file so that the + * sanity check can pass. + */ + if (0 != stat(dest, statbuf_dest)) + { + rv = SafeChdirFailNonexistent; + rv_set = true; + saved_errno = errno; + goto fail; + } + statflag = true; + } + else + { + /* Not following symlinks, so the attempt to + * chdir() into a symlink should be prevented. + */ + rv = SafeChdirFailSymlink; + rv_set = true; + saved_errno = 0; /* silence the error message */ + goto fail; + } + } +#endif +#ifdef S_ISDIR + /* Although the immediately following chdir() would detect + * the fact that this is not a directory for us, this would + * result in an extra system call that fails. Anybody + * examining the system-call trace should ideally not be + * concerned that something is actually failing. + */ + if (!S_ISDIR(statbuf_dest->st_mode)) + { + rv = SafeChdirFailNotDir; + rv_set = true; + saved_errno = 0; /* silence the error message */ + goto fail; + } +#endif + + if (options.debug_options & DebugSearch) + fprintf(stderr, "safely_chdir(): chdir(\"%s\")\n", dest); + + if (0 == chdir(dest)) + { + /* check we ended up where we wanted to go */ + boolean changed = false; + if (!wd_sanity_check(".", program_name, ".", + statbuf_dest->st_dev, + statbuf_dest->st_ino, + &statbuf_arrived, + 0, __LINE__, direction, + isfatal, + &changed)) + { + /* Only allow one failure. */ + if (RETRY_IF_SANITY_CHECK_FAILS == isfatal) + { + if (0 == fchdir(dotfd)) + { + isfatal = FATAL_IF_SANITY_CHECK_FAILS; + goto retry; + } + else + { + /* Failed to return to original directory, + * but we know that the current working + * directory is not the one that we intend + * to be in. Since fchdir() failed, we + * can't recover from this and so this error + * is fatal. + */ + error(1, errno, + "failed to return to parent directory"); + } + } + else + { + /* XXX: not sure what to use as an excuse here. */ + rv = SafeChdirFailNonexistent; + rv_set = true; + saved_errno = 0; + goto fail; + } + } + + close(dotfd); + return SafeChdirOK; + } + else + { + saved_errno = errno; + if (ENOENT == saved_errno) + { + rv = SafeChdirFailNonexistent; + rv_set = true; + if (options.ignore_readdir_race) + errno = 0; /* don't issue err msg */ + } + else if (ENOTDIR == saved_errno) + { + /* This can happen if the we stat a directory, + * and then file system activity changes it into + * a non-directory. + */ + saved_errno = 0; /* don't issue err msg */ + rv = SafeChdirFailNotDir; + rv_set = true; + } + else + { + rv = SafeChdirFailChdirFailed; + rv_set = true; + } + goto fail; + } + } + else + { + saved_errno = errno; + rv = SafeChdirFailStat; + rv_set = true; + + if ( (ENOENT == saved_errno) || (0 == state.curdepth)) + saved_errno = 0; /* don't issue err msg */ + goto fail; + } + } + else + { + /* We do not have read permissions on "." */ + rv = SafeChdirFailWouldBeUnableToReturn; + rv_set = true; + goto fail; + } + + /* This is the success path, so we clear errno. The caller probably + * won't be calling error() anyway. + */ + saved_errno = 0; + + /* We use the same exit path for success or failure. + * which has occurred is recorded in RV. + */ + fail: + /* We do not call error() as this would result in a duplicate error + * message when the caller does the same thing. + */ + if (saved_errno) + errno = saved_errno; + + if (dotfd >= 0) + { + close(dotfd); + dotfd = -1; + } + + *did_stat = statflag; + assert (rv_set); + return rv; +} + +#if defined O_NOFOLLOW +/* Safely change working directory to the specified subdirectory. If + * we are not allowed to follow symbolic links, we use open() with + * O_NOFOLLOW, followed by fchdir(). This ensures that we don't + * follow symbolic links (of course, we do follow them if the -L + * option is in effect). + */ +static enum SafeChdirStatus +safely_chdir_nofollow(const char *dest, + enum TraversalDirection direction, + struct stat *statbuf_dest, + enum ChdirSymlinkHandling symlink_follow_option, + boolean *did_stat) +{ + int extraflags, fd; + + (void) direction; + (void) statbuf_dest; + + extraflags = 0; + *did_stat = false; + + switch (symlink_follow_option) + { + case SymlinkFollowOk: + extraflags = 0; + break; + + case SymlinkHandleDefault: + if (following_links()) + extraflags = 0; + else + extraflags = O_NOFOLLOW; + break; + } + + errno = 0; + fd = open(dest, O_RDONLY +#if defined O_LARGEFILE + |O_LARGEFILE +#endif + |extraflags); + if (fd < 0) + { + switch (errno) + { + case ELOOP: + return SafeChdirFailSymlink; /* This is why we use O_NOFOLLOW */ + case ENOENT: + return SafeChdirFailNonexistent; + default: + return SafeChdirFailDestUnreadable; + } + } + + errno = 0; + if (0 == fchdir(fd)) + { + close(fd); + return SafeChdirOK; + } + else + { + int saved_errno = errno; + close(fd); + errno = saved_errno; + + switch (errno) + { + case ENOTDIR: + return SafeChdirFailNotDir; + + case EACCES: + case EBADF: /* Shouldn't happen */ + case EINTR: + case EIO: + default: + return SafeChdirFailChdirFailed; + } + } +} +#endif + +static enum SafeChdirStatus +safely_chdir(const char *dest, + enum TraversalDirection direction, + struct stat *statbuf_dest, + enum ChdirSymlinkHandling symlink_follow_option, + boolean *did_stat) +{ + enum SafeChdirStatus result; + + /* We're about to leave a directory. If there are any -execdir + * argument lists which have been built but have not yet been + * processed, do them now because they must be done in the same + * directory. + */ + complete_pending_execdirs(get_current_dirfd()); + +#if !defined(O_NOFOLLOW) + options.open_nofollow_available = false; +#endif + if (options.open_nofollow_available) + result = safely_chdir_nofollow(dest, direction, statbuf_dest, symlink_follow_option, did_stat); + else + result = safely_chdir_lstat(dest, direction, statbuf_dest, symlink_follow_option, did_stat); + return result; +} + + + +/* Safely go back to the starting directory. */ +static void +chdir_back (void) +{ + struct stat stat_buf; + boolean dummy; + + if (starting_desc < 0) + { + if (options.debug_options & DebugSearch) + fprintf(stderr, "chdir_back(): chdir(\"%s\")\n", starting_dir); + +#ifdef STAT_MOUNTPOINTS + /* We will need the mounted device list. Get it now if we don't + * already have it. + */ + if (NULL == mounted_devices) + init_mounted_dev_list(1); +#endif + + if (chdir (starting_dir) != 0) + fatal_file_error(starting_dir); + + wd_sanity_check(starting_dir, + program_name, + starting_dir, + starting_stat_buf.st_dev, + starting_stat_buf.st_ino, + &stat_buf, 0, __LINE__, + TraversingUp, + FATAL_IF_SANITY_CHECK_FAILS, + &dummy); + } + else + { + if (options.debug_options & DebugSearch) + fprintf(stderr, "chdir_back(): chdir()\n"); + + if (fchdir (starting_desc) != 0) + { + fatal_file_error(starting_dir); + } + } +} + +/* Move to the parent of a given directory and then call a function, + * restoring the cwd. Don't bother changing directory if the + * specified directory is a child of "." or is the root directory. + */ +static void +at_top (char *pathname, + mode_t mode, + struct stat *pstat, + void (*action)(char *pathname, + char *basename, + int mode, + struct stat *pstat)) +{ + int dirchange; + char *parent_dir = dir_name (pathname); + char *base = last_component (pathname); + + state.curdepth = 0; + state.starting_path_length = strlen (pathname); + + if (0 == *base + || 0 == strcmp(parent_dir, ".")) + { + dirchange = 0; + base = pathname; + } + else + { + enum TraversalDirection direction; + enum SafeChdirStatus chdir_status; + struct stat st; + boolean did_stat = false; + + dirchange = 1; + if (0 == strcmp(base, "..")) + direction = TraversingUp; + else + direction = TraversingDown; + + /* We pass SymlinkFollowOk to safely_chdir(), which allows it to + * chdir() into a symbolic link. This is only useful for the + * case where the directory we're chdir()ing into is the + * basename of a command line argument, for example where + * "foo/bar/baz" is specified on the command line. When -P is + * in effect (the default), baz will not be followed if it is a + * symlink, but if bar is a symlink, it _should_ be followed. + * Hence we need the ability to override the policy set by + * following_links(). + */ + chdir_status = safely_chdir(parent_dir, direction, &st, SymlinkFollowOk, &did_stat); + if (SafeChdirOK != chdir_status) + { + const char *what = (SafeChdirFailWouldBeUnableToReturn == chdir_status) ? "." : parent_dir; + if (errno) + error (0, errno, "%s", + safely_quote_err_filename(0, what)); + else + error (0, 0, _("Failed to safely change directory into %s"), + safely_quote_err_filename(0, parent_dir)); + + /* We can't process this command-line argument. */ + state.exit_status = 1; + return; + } + } + + free (parent_dir); + parent_dir = NULL; + + action(pathname, base, mode, pstat); + + if (dirchange) + { + chdir_back(); + } +} + + +static void do_process_top_dir(char *pathname, + char *base, + int mode, + struct stat *pstat) +{ + (void) pstat; + + process_path (pathname, base, false, ".", mode); + complete_pending_execdirs(get_current_dirfd()); +} + +static void do_process_predicate(char *pathname, + char *base, + int mode, + struct stat *pstat) +{ + (void) mode; + + state.rel_pathname = base; /* cwd_dir_fd was already set by safely_chdir */ + apply_predicate (pathname, pstat, get_eval_tree()); +} + + + + +/* Descend PATHNAME, which is a command-line argument. + + Actions like -execdir assume that we are in the + parent directory of the file we're examining, + and on entry to this function our working directory + is whatever it was when find was invoked. Therefore + If PATHNAME is "." we just leave things as they are. + Otherwise, we figure out what the parent directory is, + and move to that. +*/ +static void +process_top_path (char *pathname, mode_t mode) +{ + at_top(pathname, mode, NULL, do_process_top_dir); +} + + +/* Info on each directory in the current tree branch, to avoid + getting stuck in symbolic link loops. */ +static struct dir_id *dir_ids = NULL; +/* Entries allocated in `dir_ids'. */ +static int dir_alloc = 0; +/* Index in `dir_ids' of directory currently being searched. + This is always the last valid entry. */ +static int dir_curr = -1; +/* (Arbitrary) number of entries to grow `dir_ids' by. */ +#define DIR_ALLOC_STEP 32 + + + +/* We've detected a file system loop. This is caused by one of + * two things: + * + * 1. Option -L is in effect and we've hit a symbolic link that + * points to an ancestor. This is harmless. We won't traverse the + * symbolic link. + * + * 2. We have hit a real cycle in the directory hierarchy. In this + * case, we issue a diagnostic message (POSIX requires this) and we + * skip that directory entry. + */ +static void +issue_loop_warning(const char *name, const char *pathname, int level) +{ + struct stat stbuf_link; + if (lstat(name, &stbuf_link) != 0) + stbuf_link.st_mode = S_IFREG; + + if (S_ISLNK(stbuf_link.st_mode)) + { + error(0, 0, + _("Symbolic link %s is part of a loop in the directory hierarchy; we have already visited the directory to which it points."), + safely_quote_err_filename(0, pathname)); + /* XXX: POSIX appears to require that the exit status be non-zero if a + * diagnostic is issued. + */ + } + else + { + int distance = 1 + (dir_curr-level); + /* We have found an infinite loop. POSIX requires us to + * issue a diagnostic. Usually we won't get to here + * because when the leaf optimisation is on, it will cause + * the subdirectory to be skipped. If /a/b/c/d is a hard + * link to /a/b, then the link count of /a/b/c is 2, + * because the ".." entry of /b/b/c/d points to /a, not + * to /a/b/c. + */ + error(0, 0, + _("Filesystem loop detected; %s has the same device number and inode as a directory which is %d %s."), + safely_quote_err_filename(0, pathname), + distance, + (distance == 1 ? + _("level higher in the file system hierarchy") : + _("levels higher in the file system hierarchy"))); + } +} + + + +/* Recursively descend path PATHNAME, applying the predicates. + LEAF is true if PATHNAME is known to be in a directory that has no + more unexamined subdirectories, and therefore it is not a directory. + Knowing this allows us to avoid calling stat as long as possible for + leaf files. + + NAME is PATHNAME relative to the current directory. We access NAME + but print PATHNAME. + + PARENT is the path of the parent of NAME, relative to find's + starting directory. + + Return nonzero iff PATHNAME is a directory. */ + +static int +process_path (char *pathname, char *name, boolean leaf, char *parent, + mode_t mode) +{ + struct stat stat_buf; + static dev_t root_dev; /* Device ID of current argument pathname. */ + int i; + struct predicate *eval_tree; + + eval_tree = get_eval_tree(); + /* Assume it is a non-directory initially. */ + stat_buf.st_mode = 0; + state.rel_pathname = name; + state.type = 0; + state.have_stat = false; + state.have_type = false; + + if (!digest_mode(mode, pathname, name, &stat_buf, leaf)) + return 0; + + if (!S_ISDIR (state.type)) + { + if (state.curdepth >= options.mindepth) + apply_predicate (pathname, &stat_buf, eval_tree); + return 0; + } + + /* From here on, we're working on a directory. */ + + + /* Now we really need to stat the directory, even if we know the + * type, because we need information like struct stat.st_rdev. + */ + if (get_statinfo(pathname, name, &stat_buf) != 0) + return 0; + + state.have_stat = true; + mode = state.type = stat_buf.st_mode; /* use full info now that we have it. */ + state.stop_at_current_level = + options.maxdepth >= 0 + && state.curdepth >= options.maxdepth; + + /* If we've already seen this directory on this branch, + don't descend it again. */ + for (i = 0; i <= dir_curr; i++) + if (stat_buf.st_ino == dir_ids[i].ino && + stat_buf.st_dev == dir_ids[i].dev) + { + state.stop_at_current_level = true; + issue_loop_warning(name, pathname, i); + } + + if (dir_alloc <= ++dir_curr) + { + dir_alloc += DIR_ALLOC_STEP; + dir_ids = (struct dir_id *) + xrealloc ((char *) dir_ids, dir_alloc * sizeof (struct dir_id)); + } + dir_ids[dir_curr].ino = stat_buf.st_ino; + dir_ids[dir_curr].dev = stat_buf.st_dev; + + if (options.stay_on_filesystem) + { + if (state.curdepth == 0) + root_dev = stat_buf.st_dev; + else if (stat_buf.st_dev != root_dev) + state.stop_at_current_level = true; + } + + if (options.do_dir_first && state.curdepth >= options.mindepth) + apply_predicate (pathname, &stat_buf, eval_tree); + + if (options.debug_options & DebugSearch) + fprintf(stderr, "pathname = %s, stop_at_current_level = %d\n", + pathname, state.stop_at_current_level); + + if (state.stop_at_current_level == false) + { + /* Scan directory on disk. */ + process_dir (pathname, name, strlen (pathname), &stat_buf, parent); + } + + if (options.do_dir_first == false && state.curdepth >= options.mindepth) + { + /* The fields in 'state' are now out of date. Correct them. + */ + if (!digest_mode(mode, pathname, name, &stat_buf, leaf)) + return 0; + + if (0 == dir_curr) + { + at_top(pathname, mode, &stat_buf, do_process_predicate); + } + else + { + do_process_predicate(pathname, name, mode, &stat_buf); + } + } + + dir_curr--; + + return 1; +} + + +/* Scan directory PATHNAME and recurse through process_path for each entry. + + PATHLEN is the length of PATHNAME. + + NAME is PATHNAME relative to the current directory. + + STATP is the results of *options.xstat on it. + + PARENT is the path of the parent of NAME, relative to find's + starting directory. */ + +static void +process_dir (char *pathname, char *name, int pathlen, const struct stat *statp, char *parent) +{ + int subdirs_left; /* Number of unexamined subdirs in PATHNAME. */ + boolean subdirs_unreliable; /* if true, cannot use dir link count as subdir limif (if false, it may STILL be unreliable) */ + unsigned int idx; /* Which entry are we on? */ + struct stat stat_buf; + size_t dircount = 0u; + struct savedir_dirinfo *dirinfo; +#if 0 + printf("process_dir: pathname=%s name=%s statp->st_nlink=%d st_ino=%d\n", + pathname, + name, + (int)statp->st_nlink, + (int)statp->st_ino); +#endif + if (statp->st_nlink < 2) + { + subdirs_unreliable = true; + subdirs_left = 0; + } + else + { + subdirs_unreliable = false; /* not necessarily right */ + subdirs_left = statp->st_nlink - 2; /* Account for name and ".". */ + } + + errno = 0; + dirinfo = xsavedir(name, 0); + + + if (dirinfo == NULL) + { + assert (errno != 0); + error (0, errno, "%s", safely_quote_err_filename(0, pathname)); + state.exit_status = 1; + } + else + { + register char *namep; /* Current point in `name_space'. */ + char *cur_path; /* Full path of each file to process. */ + char *cur_name; /* Base name of each file to process. */ + unsigned cur_path_size; /* Bytes allocated for `cur_path'. */ + register unsigned file_len; /* Length of each path to process. */ + register unsigned pathname_len; /* PATHLEN plus trailing '/'. */ + boolean did_stat = false; + + if (pathname[pathlen - 1] == '/') + pathname_len = pathlen + 1; /* For '\0'; already have '/'. */ + else + pathname_len = pathlen + 2; /* For '/' and '\0'. */ + cur_path_size = 0; + cur_path = NULL; + + /* We're about to leave the directory. If there are any + * -execdir argument lists which have been built but have not + * yet been processed, do them now because they must be done in + * the same directory. + */ + complete_pending_execdirs(get_current_dirfd()); + + if (strcmp (name, ".")) + { + enum SafeChdirStatus status = safely_chdir (name, TraversingDown, &stat_buf, SymlinkHandleDefault, &did_stat); + switch (status) + { + case SafeChdirOK: + /* If there had been a change but wd_sanity_check() + * accepted it, we need to accept that on the + * way back up as well, so modify our record + * of what we think we should see later. + * If there was no change, the assignments are a no-op. + * + * However, before performing the assignment, we need to + * check that we have the stat information. If O_NOFOLLOW + * is available, safely_chdir() will not have needed to use + * stat(), and so stat_buf will just contain random data. + */ + if (!did_stat) + { + /* If there is a link we need to follow it. Hence + * the direct call to stat() not through (options.xstat) + */ + set_stat_placeholders(&stat_buf); + if (0 != stat(".", &stat_buf)) + break; /* skip the assignment. */ + } + dir_ids[dir_curr].dev = stat_buf.st_dev; + dir_ids[dir_curr].ino = stat_buf.st_ino; + + break; + + case SafeChdirFailWouldBeUnableToReturn: + error (0, errno, "."); + state.exit_status = 1; + break; + + case SafeChdirFailNonexistent: + case SafeChdirFailDestUnreadable: + case SafeChdirFailStat: + case SafeChdirFailNotDir: + case SafeChdirFailChdirFailed: + error (0, errno, "%s", + safely_quote_err_filename(0, pathname)); + state.exit_status = 1; + return; + + case SafeChdirFailSymlink: + error (0, 0, + _("warning: not following the symbolic link %s"), + safely_quote_err_filename(0, pathname)); + state.exit_status = 1; + return; + } + } + + for (idx=0; idx < dirinfo->size; ++idx) + { + /* savedirinfo() may return dirinfo=NULL if extended information + * is not available. + */ + mode_t mode = (dirinfo->entries[idx].flags & SavedirHaveFileType) ? + dirinfo->entries[idx].type_info : 0; + namep = dirinfo->entries[idx].name; + + /* Append this directory entry's name to the path being searched. */ + file_len = pathname_len + strlen (namep); + if (file_len > cur_path_size) + { + while (file_len > cur_path_size) + cur_path_size += 1024; + if (cur_path) + free (cur_path); + cur_path = xmalloc (cur_path_size); + strcpy (cur_path, pathname); + cur_path[pathname_len - 2] = '/'; + } + cur_name = cur_path + pathname_len - 1; + strcpy (cur_name, namep); + + state.curdepth++; + if (!options.no_leaf_check && !subdirs_unreliable) + { + if (mode && S_ISDIR(mode) && (subdirs_left == 0)) + { + /* This is a subdirectory, but the number of directories we + * have found now exceeds the number we would expect given + * the hard link count on the parent. This is likely to be + * a bug in the file system driver (e.g. Linux's + * /proc file system) or may just be a fact that the OS + * doesn't really handle hard links with Unix semantics. + * In the latter case, -noleaf should be used routinely. + */ + error(0, 0, _("WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we already saw %d subdirectories): this may be a bug in your file system driver. Automatically turning on find's -noleaf option. Earlier results may have failed to include directories that should have been searched."), + safely_quote_err_filename(0, pathname), + statp->st_nlink, + dircount); + state.exit_status = 1; /* We know the result is wrong, now */ + options.no_leaf_check = true; /* Don't make same + mistake again */ + subdirs_unreliable = 1; + subdirs_left = 1; /* band-aid for this iteration. */ + } + + /* Normal case optimization. On normal Unix + file systems, a directory that has no subdirectories + has two links: its name, and ".". Any additional + links are to the ".." entries of its subdirectories. + Once we have processed as many subdirectories as + there are additional links, we know that the rest of + the entries are non-directories -- in other words, + leaf files. */ + { + int count; + count = process_path (cur_path, cur_name, + subdirs_left == 0, pathname, + mode); + subdirs_left -= count; + dircount += count; + } + } + else + { + /* There might be weird (e.g., CD-ROM or MS-DOS) file systems + mounted, which don't have Unix-like directory link counts. */ + process_path (cur_path, cur_name, false, pathname, mode); + } + + state.curdepth--; + } + + + /* We're about to leave the directory. If there are any + * -execdir argument lists which have been built but have not + * yet been processed, do them now because they must be done in + * the same directory. + */ + complete_pending_execdirs(get_current_dirfd()); + + if (strcmp (name, ".")) + { + enum SafeChdirStatus status; + struct dir_id did; + + /* We could go back and do the next command-line arg + instead, maybe using longjmp. */ + char const *dir; + boolean deref = following_links() ? true : false; + + if ( (state.curdepth>0) && !deref) + dir = ".."; + else + { + chdir_back (); + dir = parent; + } + + did_stat = false; + status = safely_chdir (dir, TraversingUp, &stat_buf, SymlinkHandleDefault, &did_stat); + switch (status) + { + case SafeChdirOK: + break; + + case SafeChdirFailWouldBeUnableToReturn: + error (1, errno, "."); + return; + + case SafeChdirFailNonexistent: + case SafeChdirFailDestUnreadable: + case SafeChdirFailStat: + case SafeChdirFailSymlink: + case SafeChdirFailNotDir: + case SafeChdirFailChdirFailed: + error (1, errno, "%s", safely_quote_err_filename(0, pathname)); + return; + } + + if (dir_curr > 0) + { + did.dev = dir_ids[dir_curr-1].dev; + did.ino = dir_ids[dir_curr-1].ino; + } + else + { + did.dev = starting_stat_buf.st_dev; + did.ino = starting_stat_buf.st_ino; + } + } + + if (cur_path) + free (cur_path); + free_dirinfo(dirinfo); + } + + if (subdirs_unreliable) + { + /* Make sure we hasn't used the variable subdirs_left if we knew + * we shouldn't do so. + */ + assert (0 == subdirs_left || options.no_leaf_check); + } +} diff --git a/find/finddata.c b/find/finddata.c new file mode 100644 index 0000000..373eb38 --- /dev/null +++ b/find/finddata.c @@ -0,0 +1,38 @@ +/* finddata.c -- global data for "find". + Copyright (C) 1990, 91, 92, 93, 94, 2000, + 2003, 2004, 2005, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include + +#include "defs.h" + + +/* Name this program was run with. */ +char *program_name; + +struct options options; +struct state state; + +/* The full path of the initial working directory, or "." if + STARTING_DESC is nonnegative. */ +char const *starting_dir = "."; + +/* A file descriptor open to the initial working directory. + Doing it this way allows us to work when the i.w.d. has + unreadable parents. */ +int starting_desc; + diff --git a/find/fstype.c b/find/fstype.c new file mode 100644 index 0000000..75b3371 --- /dev/null +++ b/find/fstype.c @@ -0,0 +1,313 @@ +/* fstype.c -- determine type of file systems that files are on + Copyright (C) 1990, 91, 92, 93, 94, 2000, 2004 Free Software Foundation, Inc. + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* Written by David MacKenzie . + * + * Converted to use gnulib's read_file_system_list() + * by James Youngman (which saves a lot + * of manual hacking of configure.in). + */ + + +#include +#include +#include + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#include + +/* The presence of unistd.h is assumed by gnulib these days, so we + * might as well assume it too. + */ +#include + +#include +#ifdef HAVE_SYS_MNTIO_H +#include +#endif +#ifdef HAVE_SYS_MKDEV_H +#include +#endif + +#ifdef STDC_HEADERS +#include +#else +extern int errno; +#endif + +#include "defs.h" +#include "../gnulib/lib/dirname.h" +#include "xalloc.h" +#include "modetype.h" + +/* Need declaration of function `xstrtoumax' */ +#include "../gnulib/lib/xstrtol.h" + +#include "extendbuf.h" +#include "mountlist.h" +#include "error.h" + + + +#if ENABLE_NLS +# include +# define _(Text) gettext (Text) +#else +# define _(Text) Text +#endif +#ifdef gettext_noop +# define N_(String) gettext_noop (String) +#else +/* See locate.c for explanation as to why not use (String) */ +# define N_(String) String +#endif + +static char *file_system_type_uncached PARAMS((const struct stat *statp, const char *path)); + + +/* Get MNTTYPE_IGNORE if it is available. */ +#if HAVE_MNTENT_H +# include +#endif +#if HAVE_SYS_MNTTAB_H +# include +# include +#endif + + + + + +static void +free_file_system_list(struct mount_entry *p) +{ + while (p) + { + struct mount_entry *pnext = p->me_next; + + free(p->me_devname); + free(p->me_mountdir); + + if(p->me_type_malloced) + free(p->me_type); + p->me_next = NULL; + free(p); + p = pnext; + } +} + + + + +#ifdef AFS +#include +#include +#if __STDC__ +/* On SunOS 4, afs/vice.h defines this to rely on a pre-ANSI cpp. */ +#undef _VICEIOCTL +#define _VICEIOCTL(id) ((unsigned int ) _IOW('V', id, struct ViceIoctl)) +#endif +#ifndef _IOW +/* AFS on Solaris 2.3 doesn't get this definition. */ +#include +#endif + +static int +in_afs (char *path) +{ + static char space[2048]; + struct ViceIoctl vi; + + vi.in_size = 0; + vi.out_size = sizeof (space); + vi.out = space; + + if (pioctl (path, VIOC_FILE_CELL_NAME, &vi, 1) + && (errno == EINVAL || errno == ENOENT)) + return 0; + return 1; +} +#endif /* AFS */ + +/* Nonzero if the current file system's type is known. */ +static int fstype_known = 0; + +/* Return a static string naming the type of file system that the file PATH, + described by STATP, is on. + RELPATH is the file name relative to the current directory. + Return "unknown" if its file system type is unknown. */ + +char * +filesystem_type (const struct stat *statp, const char *path) +{ + static char *current_fstype = NULL; + static dev_t current_dev; + + if (current_fstype != NULL) + { + if (fstype_known && statp->st_dev == current_dev) + return current_fstype; /* Cached value. */ + free (current_fstype); + } + current_dev = statp->st_dev; + current_fstype = file_system_type_uncached (statp, path); + return current_fstype; +} + +static int +set_fstype_devno(struct mount_entry *p) +{ + struct stat stbuf; + + if (p->me_dev == (dev_t)-1) + { + set_stat_placeholders(&stbuf); + if (0 == (options.xstat)(p->me_mountdir, &stbuf)) + { + p->me_dev = stbuf.st_dev; + return 0; + } + else + { + return -1; + } + } + return 0; /* not needed */ +} + +static struct mount_entry * +must_read_fs_list(bool need_fs_type) +{ + struct mount_entry *entries = read_file_system_list(need_fs_type); + if (NULL == entries) + { + /* We cannot determine for sure which file we were trying to + * use because gnulib has extracted all that stuff away. + * Hence we cannot issue a specific error message here. + */ + error(1, 0, "Cannot read mounted file system list"); + } + return entries; +} + + + +/* Return a newly allocated string naming the type of file system that the + file PATH, described by STATP, is on. + RELPATH is the file name relative to the current directory. + Return "unknown" if its file system type is unknown. */ + +static char * +file_system_type_uncached (const struct stat *statp, const char *path) +{ + struct mount_entry *entries, *entry; + char *type; + + (void) path; + +#ifdef AFS + if (in_afs(path)) + { + fstype_known = 1; + return xstrdup("afs"); + } +#endif + + entries = must_read_fs_list(true); + for (type=NULL, entry=entries; entry; entry=entry->me_next) + { +#ifdef MNTTYPE_IGNORE + if (!strcmp (entry->me_type, MNTTYPE_IGNORE)) + continue; +#endif + set_fstype_devno(entry); + if (entry->me_dev == statp->st_dev) + { + type = xstrdup(entry->me_type); + break; + } + } + free_file_system_list(entries); + + /* Don't cache unknown values. */ + fstype_known = (type != NULL); + + return type ? type : xstrdup(_("unknown")); +} + + +char * +get_mounted_filesystems (void) +{ + char *result = NULL; + size_t alloc_size = 0u; + size_t used = 0u; + struct mount_entry *entries, *entry; + + entries = must_read_fs_list(false); + for (entry=entries; entry; entry=entry->me_next) + { + size_t len; + +#ifdef MNTTYPE_IGNORE + if (!strcmp (entry->me_type, MNTTYPE_IGNORE)) + continue; +#endif + set_fstype_devno(entry); + + len = strlen(entry->me_mountdir) + 1; + result = extendbuf(result, used+len, &alloc_size); + strcpy(&result[used], entry->me_mountdir); + used += len; /* len already includes one for the \0 */ + } + + free_file_system_list(entries); + return result; +} + + +dev_t * +get_mounted_devices (size_t *n) +{ + size_t alloc_size = 0u; + size_t used = 0u; + struct mount_entry *entries, *entry; + dev_t *result = NULL; + + /* Use read_file_system_list() rather than must_read_fs_list() + * because on some system this is always called at startup, + * and find should only exit fatally if it needs to use the + * result of this operation. If we can't get the fs list + * but we never need the information, there is no need to fail. + */ + for (entry = entries = read_file_system_list(false); + entry; + entry = entry->me_next) + { + result = extendbuf(result, sizeof(dev_t)*(used+1), &alloc_size); + set_fstype_devno(entry); + result[used] = entry->me_dev; + ++used; + } + free_file_system_list(entries); + *n = used; + return result; +} + + + diff --git a/find/ftsfind.c b/find/ftsfind.c new file mode 100644 index 0000000..7f882a6 --- /dev/null +++ b/find/ftsfind.c @@ -0,0 +1,751 @@ +/* find -- search for files in a directory hierarchy (fts version) + Copyright (C) 1990, 91, 92, 93, 94, 2000, + 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* This file was written by James Youngman, based on find.c. + + GNU find was written by Eric Decker , + with enhancements by David MacKenzie , + Jay Plett , + and Tim Wood . + The idea for -print0 and xargs -0 came from + Dan Bernstein . +*/ + + +#include +#include "defs.h" + + +#define USE_SAFE_CHDIR 1 +#undef STAT_MOUNTPOINTS + + +#include +#include + +#include +#include + +#include + +#include "xalloc.h" +#include "closeout.h" +#include +#include "quotearg.h" +#include "quote.h" +#include "fts_.h" +#include "openat.h" +#include "save-cwd.h" +#include "xgetcwd.h" +#include "error.h" +#include "dircallback.h" + +#ifdef HAVE_LOCALE_H +#include +#endif + +#if ENABLE_NLS +# include +# define _(Text) gettext (Text) +#else +# define _(Text) Text +#define textdomain(Domain) +#define bindtextdomain(Package, Directory) +#endif +#ifdef gettext_noop +# define N_(String) gettext_noop (String) +#else +/* See locate.c for explanation as to why not use (String) */ +# define N_(String) String +#endif + + +static void set_close_on_exec(int fd) +{ +#if defined F_GETFD && defined FD_CLOEXEC + int flags; + flags = fcntl(fd, F_GETFD); + if (flags >= 0) + { + flags |= FD_CLOEXEC; + fcntl(fd, F_SETFD, flags); + } +#endif +} + + + +/* FTS_TIGHT_CYCLE_CHECK tries to work around Savannah bug #17877 + * (but actually using it doesn't fix the bug). + */ +static int ftsoptions = FTS_NOSTAT|FTS_TIGHT_CYCLE_CHECK; + +static int prev_depth = INT_MIN; /* fts_level can be < 0 */ +static int curr_fd = -1; + +int get_current_dirfd(void) +{ + if (ftsoptions & FTS_CWDFD) + { + assert (curr_fd != -1); + assert ( (AT_FDCWD == curr_fd) || (curr_fd >= 0) ); + + if (AT_FDCWD == curr_fd) + return starting_desc; + else + return curr_fd; + } + else + { + return AT_FDCWD; + } +} + +static void left_dir(void) +{ + if (ftsoptions & FTS_CWDFD) + { + if (curr_fd >= 0) + { + close(curr_fd); + curr_fd = -1; + } + } + else + { + /* do nothing. */ + } +} + +/* + * Signal that we are now inside a directory pointed to by dirfd. + * The caller can't tell if this is the first time this happens, so + * we have to be careful not to call dup() more than once + */ +static void inside_dir(int dirfd) +{ + if (ftsoptions & FTS_CWDFD) + { + assert (dirfd == AT_FDCWD || dirfd >= 0); + + state.cwd_dir_fd = dirfd; + if (curr_fd < 0) + { + if (AT_FDCWD == dirfd) + { + curr_fd = AT_FDCWD; + } + else if (dirfd >= 0) + { + curr_fd = dup(dirfd); + set_close_on_exec(curr_fd); + } + else + { + /* curr_fd is invalid, but dirfd is also invalid. + * This should not have happened. + */ + assert (curr_fd >= 0 || dirfd >= 0); + } + } + } + else + { + /* FTS_CWDFD is not in use. We can always assume that + * AT_FDCWD refers to the directory we are currentl searching. + * + * Therefore there is nothing to do. + */ + } +} + + + +#ifdef STAT_MOUNTPOINTS +static void init_mounted_dev_list(void); +#endif + +/* We have encountered an error which should affect the exit status. + * This is normally used to change the exit status from 0 to 1. + * However, if the exit status is already 2 for example, we don't want to + * reduce it to 1. + */ +static void +error_severity(int level) +{ + if (state.exit_status < level) + state.exit_status = level; +} + + +#define STRINGIFY(X) #X +#define HANDLECASE(N) case N: return #N; + +static char * +get_fts_info_name(int info) +{ + static char buf[10]; + switch (info) + { + HANDLECASE(FTS_D); + HANDLECASE(FTS_DC); + HANDLECASE(FTS_DEFAULT); + HANDLECASE(FTS_DNR); + HANDLECASE(FTS_DOT); + HANDLECASE(FTS_DP); + HANDLECASE(FTS_ERR); + HANDLECASE(FTS_F); + HANDLECASE(FTS_INIT); + HANDLECASE(FTS_NS); + HANDLECASE(FTS_NSOK); + HANDLECASE(FTS_SL); + HANDLECASE(FTS_SLNONE); + HANDLECASE(FTS_W); + default: + sprintf(buf, "[%d]", info); + return buf; + } +} + +static void +visit(FTS *p, FTSENT *ent, struct stat *pstat) +{ + struct predicate *eval_tree; + + state.curdepth = ent->fts_level; + state.have_stat = (ent->fts_info != FTS_NS) && (ent->fts_info != FTS_NSOK); + state.rel_pathname = ent->fts_accpath; + state.cwd_dir_fd = p->fts_cwd_fd; + + /* Apply the predicates to this path. */ + eval_tree = get_eval_tree(); + apply_predicate(ent->fts_path, pstat, eval_tree); + + /* Deal with any side effects of applying the predicates. */ + if (state.stop_at_current_level) + { + fts_set(p, ent, FTS_SKIP); + } +} + +static const char* +partial_quotearg_n(int n, char *s, size_t len, enum quoting_style style) +{ + if (0 == len) + { + return quotearg_n_style(n, style, ""); + } + else + { + char saved; + const char *result; + + saved = s[len]; + s[len] = 0; + result = quotearg_n_style(n, style, s); + s[len] = saved; + return result; + } +} + + +/* We've detected a file system loop. This is caused by one of + * two things: + * + * 1. Option -L is in effect and we've hit a symbolic link that + * points to an ancestor. This is harmless. We won't traverse the + * symbolic link. + * + * 2. We have hit a real cycle in the directory hierarchy. In this + * case, we issue a diagnostic message (POSIX requires this) and we + * skip that directory entry. + */ +static void +issue_loop_warning(FTSENT * ent) +{ + if (S_ISLNK(ent->fts_statp->st_mode)) + { + error(0, 0, + _("Symbolic link %s is part of a loop in the directory hierarchy; we have already visited the directory to which it points."), + safely_quote_err_filename(0, ent->fts_path)); + } + else + { + /* We have found an infinite loop. POSIX requires us to + * issue a diagnostic. Usually we won't get to here + * because when the leaf optimisation is on, it will cause + * the subdirectory to be skipped. If /a/b/c/d is a hard + * link to /a/b, then the link count of /a/b/c is 2, + * because the ".." entry of /a/b/c/d points to /a, not + * to /a/b/c. + */ + error(0, 0, + _("File system loop detected; " + "%s is part of the same file system loop as %s."), + safely_quote_err_filename(0, ent->fts_path), + partial_quotearg_n(1, + ent->fts_cycle->fts_path, + ent->fts_cycle->fts_pathlen, + options.err_quoting_style)); + } +} + +/* + * Return true if NAME corresponds to a file which forms part of a + * symbolic link loop. The command + * rm -f a b; ln -s a b; ln -s b a + * produces such a loop. + */ +static boolean +symlink_loop(const char *name) +{ + struct stat stbuf; + int rv; + if (following_links()) + rv = stat(name, &stbuf); + else + rv = lstat(name, &stbuf); + return (0 != rv) && (ELOOP == errno); +} + + +static int +complete_execdirs_cb(void *context) +{ + (void) context; + /* By the tme this callback is called, the current directory is correct. */ + complete_pending_execdirs(AT_FDCWD); + return 0; +} + +static void +show_outstanding_execdirs(FILE *fp) +{ + if (options.debug_options & DebugExec) + { + int seen=0; + struct predicate *p; + p = get_eval_tree(); + fprintf(fp, "Outstanding execdirs:"); + + while (p) + { + const char *pfx; + + if (pred_is(p, pred_execdir)) + pfx = "-execdir"; + else if (pred_is(p, pred_okdir)) + pfx = "-okdir"; + else + pfx = NULL; + if (pfx) + { + int i; + const struct exec_val *execp = &p->args.exec_vec; + ++seen; + + fprintf(fp, "%s ", pfx); + if (execp->multiple) + fprintf(fp, "multiple "); + fprintf(fp, "%d args: ", execp->state.cmd_argc); + for (i=0; istate.cmd_argc; ++i) + { + fprintf(fp, "%s ", execp->state.cmd_argv[i]); + } + fprintf(fp, "\n"); + } + p = p->pred_next; + } + if (!seen) + fprintf(fp, " none\n"); + } + else + { + /* No debug output is wanted. */ + } +} + + + + +static void +consider_visiting(FTS *p, FTSENT *ent) +{ + struct stat statbuf; + mode_t mode; + int ignore, isdir; + + if (options.debug_options & DebugSearch) + fprintf(stderr, + "consider_visiting: fts_info=%-6s, fts_level=%2d, prev_depth=%d " + "fts_path=%s, fts_accpath=%s\n", + get_fts_info_name(ent->fts_info), + (int)ent->fts_level, prev_depth, + quotearg_n_style(0, options.err_quoting_style, ent->fts_path), + quotearg_n_style(1, options.err_quoting_style, ent->fts_accpath)); + + if (ent->fts_info == FTS_DP) + { + left_dir(); + } + else if (ent->fts_level > prev_depth || ent->fts_level==0) + { + left_dir(); + } + inside_dir(p->fts_cwd_fd); + prev_depth = ent->fts_level; + + + /* Cope with various error conditions. */ + if (ent->fts_info == FTS_ERR + || ent->fts_info == FTS_DNR) + { + error(0, ent->fts_errno, "%s", + safely_quote_err_filename(0, ent->fts_path)); + error_severity(1); + return; + } + else if (ent->fts_info == FTS_DC) + { + issue_loop_warning(ent); + error_severity(1); + return; + } + else if (ent->fts_info == FTS_SLNONE) + { + /* fts_read() claims that ent->fts_accpath is a broken symbolic + * link. That would be fine, but if this is part of a symbolic + * link loop, we diagnose the problem and also ensure that the + * eventual return value is nonzero. Note that while the path + * we stat is local (fts_accpath), we print the fill path name + * of the file (fts_path) in the error message. + */ + if (symlink_loop(ent->fts_accpath)) + { + error(0, ELOOP, "%s", safely_quote_err_filename(0, ent->fts_path)); + error_severity(1); + return; + } + } + else if (ent->fts_info == FTS_NS) + { + if (ent->fts_level == 0) + { + /* e.g., nonexistent starting point */ + error(0, ent->fts_errno, "%s", + safely_quote_err_filename(0, ent->fts_path)); + error_severity(1); /* remember problem */ + return; + } + else + { + /* The following if statement fixes Savannah bug #19605 + * (failure to diagnose a symbolic link loop) + */ + if (symlink_loop(ent->fts_accpath)) + { + error(0, ELOOP, "%s", + safely_quote_err_filename(0, ent->fts_path)); + error_severity(1); + return; + } + } + } + + /* Cope with the usual cases. */ + if (ent->fts_info == FTS_NSOK + || ent->fts_info == FTS_NS /* e.g. symlink loop */) + { + assert (!state.have_stat); + assert (!state.have_type); + state.type = mode = 0; + } + else + { + state.have_stat = true; + state.have_type = true; + statbuf = *(ent->fts_statp); + state.type = mode = statbuf.st_mode; + + if (00000 == mode) + { + /* Savannah bug #16378. */ + error(0, 0, _("Warning: file %s appears to have mode 0000"), + quotearg_n_style(0, options.err_quoting_style, ent->fts_path)); + } + } + + if (mode) + { + if (!digest_mode(mode, ent->fts_path, ent->fts_name, &statbuf, 0)) + return; + } + + /* examine this item. */ + ignore = 0; + isdir = S_ISDIR(statbuf.st_mode) + || (FTS_D == ent->fts_info) + || (FTS_DP == ent->fts_info) + || (FTS_DC == ent->fts_info); + + if (isdir && (ent->fts_info == FTS_NSOK)) + { + /* This is a directory, but fts did not stat it, so + * presumably would not be planning to search its + * children. Force a stat of the file so that the + * children can be checked. + */ + fts_set(p, ent, FTS_AGAIN); + return; + } + + if (options.maxdepth >= 0) + { + if (ent->fts_level >= options.maxdepth) + { + fts_set(p, ent, FTS_SKIP); /* descend no further */ + + if (ent->fts_level > options.maxdepth) + ignore = 1; /* don't even look at this one */ + } + } + + if ( (ent->fts_info == FTS_D) && !options.do_dir_first ) + { + /* this is the preorder visit, but user said -depth */ + ignore = 1; + } + else if ( (ent->fts_info == FTS_DP) && options.do_dir_first ) + { + /* this is the postorder visit, but user didn't say -depth */ + ignore = 1; + } + else if (ent->fts_level < options.mindepth) + { + ignore = 1; + } + + if (!ignore) + { + visit(p, ent, &statbuf); + } + + /* XXX: if we allow a build-up of pending arguments for "-execdir foo {} +" + * we need to execute them in the same directory as we found the item. + * If we are trying to do "find a -execdir echo {} +", we will need to + * echo + * a while in the original working directory + * b while in a + * c while in b (just before leaving b) + * + * These restrictions are hard to satisfy while using fts(). The reason is + * that it doesn't tell us just before we leave a directory. For the moment, + * we punt and don't allow the arguments to build up. + */ + if (state.execdirs_outstanding) + { + show_outstanding_execdirs(stderr); + run_in_dir(p->fts_cwd_fd, complete_execdirs_cb, NULL); + } + + if (ent->fts_info == FTS_DP) + { + /* we're leaving a directory. */ + state.stop_at_current_level = false; + } +} + + + +static void +find(char *arg) +{ + char * arglist[2]; + FTS *p; + FTSENT *ent; + + + state.starting_path_length = strlen(arg); + inside_dir(AT_FDCWD); + + arglist[0] = arg; + arglist[1] = NULL; + + switch (options.symlink_handling) + { + case SYMLINK_ALWAYS_DEREF: + ftsoptions |= FTS_COMFOLLOW|FTS_LOGICAL; + break; + + case SYMLINK_DEREF_ARGSONLY: + ftsoptions |= FTS_COMFOLLOW|FTS_PHYSICAL; + break; + + case SYMLINK_NEVER_DEREF: + ftsoptions |= FTS_PHYSICAL; + break; + } + + if (options.stay_on_filesystem) + ftsoptions |= FTS_XDEV; + + p = fts_open(arglist, ftsoptions, NULL); + if (NULL == p) + { + error (0, errno, _("cannot search %s"), + safely_quote_err_filename(0, arg)); + } + else + { + while ( (ent=fts_read(p)) != NULL ) + { + state.have_stat = false; + state.have_type = false; + state.type = 0; + consider_visiting(p, ent); + } + fts_close(p); + p = NULL; + } +} + + +static void +process_all_startpoints(int argc, char *argv[]) +{ + int i; + + /* figure out how many start points there are */ + for (i = 0; i < argc && !looks_like_expression(argv[i], true); i++) + { + state.starting_path_length = strlen(argv[i]); /* TODO: is this redundant? */ + find(argv[i]); + } + + if (i == 0) + { + /* + * We use a temporary variable here because some actions modify + * the path temporarily. Hence if we use a string constant, + * we get a coredump. The best example of this is if we say + * "find -printf %H" (note, not "find . -printf %H"). + */ + char defaultpath[2] = "."; + find(defaultpath); + } +} + + + + +int +main (int argc, char **argv) +{ + int end_of_leading_options = 0; /* First arg after any -H/-L etc. */ + struct predicate *eval_tree; + + program_name = argv[0]; + state.exit_status = 0; + state.execdirs_outstanding = false; + state.cwd_dir_fd = AT_FDCWD; + + /* Set the option defaults before we do the locale initialisation as + * check_nofollow() needs to be executed in the POSIX locale. + */ + set_option_defaults(&options); + +#ifdef HAVE_SETLOCALE + setlocale (LC_ALL, ""); +#endif + + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + atexit (close_stdout); + + /* Check for -P, -H or -L options. Also -D and -O, which are + * both GNU extensions. + */ + end_of_leading_options = process_leading_options(argc, argv); + + if (options.debug_options & DebugStat) + options.xstat = debug_stat; + +#ifdef DEBUG + fprintf (stderr, "cur_day_start = %s", ctime (&options.cur_day_start)); +#endif /* DEBUG */ + + + /* We are now processing the part of the "find" command line + * after the -H/-L options (if any). + */ + eval_tree = build_expression_tree(argc, argv, end_of_leading_options); + + /* safely_chdir() needs to check that it has ended up in the right place. + * To avoid bailing out when something gets automounted, it checks if + * the target directory appears to have had a directory mounted on it as + * we chdir()ed. The problem with this is that in order to notice that + * a file system was mounted, we would need to lstat() all the mount points. + * That strategy loses if our machine is a client of a dead NFS server. + * + * Hence if safely_chdir() and wd_sanity_check() can manage without needing + * to know the mounted device list, we do that. + */ + if (!options.open_nofollow_available) + { +#ifdef STAT_MOUNTPOINTS + init_mounted_dev_list(); +#endif + } + + + starting_desc = open (".", O_RDONLY +#if defined O_LARGEFILE + |O_LARGEFILE +#endif + ); + if (0 <= starting_desc && fchdir (starting_desc) != 0) + { + close (starting_desc); + starting_desc = -1; + } + if (starting_desc < 0) + { + starting_dir = xgetcwd (); + if (! starting_dir) + error (1, errno, _("cannot get current directory")); + } + + + process_all_startpoints(argc-end_of_leading_options, argv+end_of_leading_options); + + /* If "-exec ... {} +" has been used, there may be some + * partially-full command lines which have been built, + * but which are not yet complete. Execute those now. + */ + show_success_rates(eval_tree); + cleanup(); + return state.exit_status; +} + +boolean +is_fts_enabled(int *fts_options) +{ + /* this version of find (i.e. this main()) uses fts. */ + *fts_options = ftsoptions; + return true; +} diff --git a/find/parser.c b/find/parser.c new file mode 100644 index 0000000..18d26cc --- /dev/null +++ b/find/parser.c @@ -0,0 +1,3455 @@ +/* parser.c -- convert the command line args into an expression tree. + Copyright (C) 1990, 1991, 1992, 1993, 1994, 2000, 2001, 2003, + 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include + +#include "defs.h" +#include +#include +#include +#include +#include +#include +#include +#include "modechange.h" +#include "modetype.h" +#include "xstrtol.h" +#include "xalloc.h" +#include "quote.h" +#include "quotearg.h" +#include "buildcmd.h" +#include "nextelem.h" +#include "stdio-safer.h" +#include "regextype.h" +#include "stat-time.h" +#include "xstrtod.h" +#include "fts_.h" +#include "getdate.h" +#include "error.h" +#include "findutils-version.h" + +#include + + +/* The presence of unistd.h is assumed by gnulib these days, so we + * might as well assume it too. + */ +/* We need for isatty(). */ +#include +#include + +#if ENABLE_NLS +# include +# define _(Text) gettext (Text) +#else +# define _(Text) Text +#endif +#ifdef gettext_noop +# define N_(String) gettext_noop (String) +#else +/* See locate.c for explanation as to why not use (String) */ +# define N_(String) String +#endif + +#if !defined (isascii) || defined (STDC_HEADERS) +#ifdef isascii +#undef isascii +#endif +#define isascii(c) 1 +#endif + +#define ISDIGIT(c) (isascii ((unsigned char)c) && isdigit ((unsigned char)c)) +#define ISUPPER(c) (isascii ((unsigned char)c) && isupper ((unsigned char)c)) + +#ifndef HAVE_ENDGRENT +#define endgrent() +#endif +#ifndef HAVE_ENDPWENT +#define endpwent() +#endif + +static boolean parse_accesscheck PARAMS((const struct parser_table* entry, char **argv, int *arg_ptr)); +static boolean parse_amin PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_and PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_anewer PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_cmin PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_cnewer PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_comma PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_daystart PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_delete PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_d PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_depth PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_empty PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_exec PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_execdir PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_false PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_fls PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_fprintf PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_follow PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_fprint PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_fprint0 PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_fstype PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_gid PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_group PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_help PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_ilname PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_iname PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_inum PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_ipath PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_iregex PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_iwholename PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_links PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_lname PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_ls PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_maxdepth PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_mindepth PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_mmin PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_name PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_negate PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_newer PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_newerXY PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_noleaf PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_nogroup PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_nouser PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_nowarn PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_ok PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_okdir PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_or PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_path PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_perm PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_print0 PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_printf PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_prune PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_regex PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_regextype PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_samefile PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +#if 0 +static boolean parse_show_control_chars PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +#endif +static boolean parse_size PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_time PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_true PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_type PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_uid PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_used PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_user PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_version PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_wholename PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_xdev PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_ignore_race PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_noignore_race PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_warn PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_xtype PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); +static boolean parse_quit PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); + +boolean parse_print PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); + + +static boolean insert_type PARAMS((char **argv, int *arg_ptr, + const struct parser_table *entry, + PRED_FUNC which_pred)); +static boolean insert_regex PARAMS((char *argv[], int *arg_ptr, + const struct parser_table *entry, + int regex_options)); +static boolean insert_fprintf (struct format_val *vec, + const struct parser_table *entry, + PRED_FUNC func, + const char *format); + +static struct segment **make_segment PARAMS((struct segment **segment, + char *format, int len, + int kind, char format_char, + char aux_format_char, + struct predicate *pred)); +static boolean insert_exec_ok PARAMS((const char *action, + const struct parser_table *entry, + int dirfd, + char *argv[], + int *arg_ptr)); +static boolean get_comp_type PARAMS((const char **str, + enum comparison_type *comp_type)); +static boolean get_relative_timestamp PARAMS((const char *str, + struct time_val *tval, + time_t origin, + double sec_per_unit, + const char *overflowmessage)); +static boolean get_num PARAMS((const char *str, + uintmax_t *num, + enum comparison_type *comp_type)); +static struct predicate* insert_num PARAMS((char *argv[], int *arg_ptr, + const struct parser_table *entry)); +static void open_output_file (const char *path, struct format_val *p); +static void open_stdout (struct format_val *p); +static boolean stream_is_tty(FILE *fp); +static boolean parse_noop PARAMS((const struct parser_table* entry, + char **argv, int *arg_ptr)); + +#define PASTE(x,y) x##y +#define STRINGIFY(s) #s + +#define PARSE_OPTION(what,suffix) \ + { (ARG_OPTION), (what), PASTE(parse_,suffix), NULL } + +#define PARSE_POSOPT(what,suffix) \ + { (ARG_POSITIONAL_OPTION), (what), PASTE(parse_,suffix), NULL } + +#define PARSE_TEST(what,suffix) \ + { (ARG_TEST), (what), PASTE(parse_,suffix), PASTE(pred_,suffix) } + +#define PARSE_TEST_NP(what,suffix) \ + { (ARG_TEST), (what), PASTE(parse_,suffix), NULL } + +#define PARSE_ACTION(what,suffix) \ + { (ARG_ACTION), (what), PASTE(parse_,suffix), PASTE(pred_,suffix) } + +#define PARSE_ACTION_NP(what,suffix) \ + { (ARG_ACTION), (what), PASTE(parse_,suffix), NULL } + +#define PARSE_PUNCTUATION(what,suffix) \ + { (ARG_PUNCTUATION), (what), PASTE(parse_,suffix), PASTE(pred_,suffix) } + + +/* Predicates we cannot handle in the usual way. If you add an entry + * to this table, double-check the switch statement in + * pred_sanity_check() to make sure that the new case is being + * correctly handled. + */ +static struct parser_table const parse_entry_newerXY = + { + ARG_SPECIAL_PARSE, "newerXY", parse_newerXY, pred_newerXY /* BSD */ + }; + +/* GNU find predicates that are not mentioned in POSIX.2 are marked `GNU'. + If they are in some Unix versions of find, they are marked `Unix'. */ + +static struct parser_table const parse_table[] = +{ + PARSE_PUNCTUATION("!", negate), /* POSIX */ + PARSE_PUNCTUATION("not", negate), /* GNU */ + PARSE_PUNCTUATION("(", openparen), /* POSIX */ + PARSE_PUNCTUATION(")", closeparen), /* POSIX */ + PARSE_PUNCTUATION(",", comma), /* GNU */ + PARSE_PUNCTUATION("a", and), /* POSIX */ + PARSE_TEST ("amin", amin), /* GNU */ + PARSE_PUNCTUATION("and", and), /* GNU */ + PARSE_TEST ("anewer", anewer), /* GNU */ + {ARG_TEST, "atime", parse_time, pred_atime}, /* POSIX */ + PARSE_TEST ("cmin", cmin), /* GNU */ + PARSE_TEST ("cnewer", cnewer), /* GNU */ + {ARG_TEST, "ctime", parse_time, pred_ctime}, /* POSIX */ + PARSE_POSOPT ("daystart", daystart), /* GNU */ + PARSE_ACTION ("delete", delete), /* GNU, Mac OS, FreeBSD */ + PARSE_OPTION ("d", d), /* Mac OS X, FreeBSD, NetBSD, OpenBSD, but deprecated in favour of -depth */ + PARSE_OPTION ("depth", depth), /* POSIX */ + PARSE_TEST ("empty", empty), /* GNU */ + {ARG_ACTION, "exec", parse_exec, pred_exec}, /* POSIX */ + {ARG_TEST, "executable", parse_accesscheck, pred_executable}, /* GNU, 4.3.0+ */ + PARSE_ACTION ("execdir", execdir), /* *BSD, GNU */ + PARSE_ACTION ("fls", fls), /* GNU */ + PARSE_POSOPT ("follow", follow), /* GNU, Unix */ + PARSE_ACTION ("fprint", fprint), /* GNU */ + PARSE_ACTION ("fprint0", fprint0), /* GNU */ + {ARG_ACTION, "fprintf", parse_fprintf, pred_fprintf}, /* GNU */ + PARSE_TEST ("fstype", fstype), /* GNU, Unix */ + PARSE_TEST ("gid", gid), /* GNU */ + PARSE_TEST ("group", group), /* POSIX */ + PARSE_OPTION ("ignore_readdir_race", ignore_race), /* GNU */ + PARSE_TEST ("ilname", ilname), /* GNU */ + PARSE_TEST ("iname", iname), /* GNU */ + PARSE_TEST ("inum", inum), /* GNU, Unix */ + PARSE_TEST ("ipath", ipath), /* GNU, deprecated in favour of iwholename */ + PARSE_TEST_NP ("iregex", iregex), /* GNU */ + PARSE_TEST_NP ("iwholename", iwholename), /* GNU */ + PARSE_TEST ("links", links), /* POSIX */ + PARSE_TEST ("lname", lname), /* GNU */ + PARSE_ACTION ("ls", ls), /* GNU, Unix */ + PARSE_OPTION ("maxdepth", maxdepth), /* GNU */ + PARSE_OPTION ("mindepth", mindepth), /* GNU */ + PARSE_TEST ("mmin", mmin), /* GNU */ + PARSE_OPTION ("mount", xdev), /* Unix */ + {ARG_TEST, "mtime", parse_time, pred_mtime}, /* POSIX */ + PARSE_TEST ("name", name), +#ifdef UNIMPLEMENTED_UNIX + PARSE(ARG_UNIMPLEMENTED, "ncpio", ncpio), /* Unix */ +#endif + PARSE_TEST ("newer", newer), /* POSIX */ + {ARG_TEST, "atime", parse_time, pred_atime}, /* POSIX */ + PARSE_OPTION ("noleaf", noleaf), /* GNU */ + PARSE_TEST ("nogroup", nogroup), /* POSIX */ + PARSE_TEST ("nouser", nouser), /* POSIX */ + PARSE_OPTION ("noignore_readdir_race", noignore_race), /* GNU */ + PARSE_POSOPT ("nowarn", nowarn), /* GNU */ + PARSE_PUNCTUATION("o", or), /* POSIX */ + PARSE_PUNCTUATION("or", or), /* GNU */ + PARSE_ACTION ("ok", ok), /* POSIX */ + PARSE_ACTION ("okdir", okdir), /* GNU (-execdir is BSD) */ + PARSE_TEST ("path", path), /* GNU, HP-UX, RMS prefers wholename, but anyway soon POSIX */ + PARSE_TEST ("perm", perm), /* POSIX */ + PARSE_ACTION ("print", print), /* POSIX */ + PARSE_ACTION ("print0", print0), /* GNU */ + {ARG_ACTION, "printf", parse_printf, NULL}, /* GNU */ + PARSE_ACTION ("prune", prune), /* POSIX */ + PARSE_ACTION ("quit", quit), /* GNU */ + {ARG_TEST, "readable", parse_accesscheck, pred_readable}, /* GNU, 4.3.0+ */ + PARSE_TEST ("regex", regex), /* GNU */ + PARSE_OPTION ("regextype", regextype), /* GNU */ + PARSE_TEST ("samefile", samefile), /* GNU */ +#if 0 + PARSE_OPTION ("show-control-chars", show_control_chars), /* GNU, 4.3.0+ */ +#endif + PARSE_TEST ("size", size), /* POSIX */ + PARSE_TEST ("type", type), /* POSIX */ + PARSE_TEST ("uid", uid), /* GNU */ + PARSE_TEST ("used", used), /* GNU */ + PARSE_TEST ("user", user), /* POSIX */ + PARSE_OPTION ("warn", warn), /* GNU */ + PARSE_TEST_NP ("wholename", wholename), /* GNU, replaced -path, but anyway -path will soon be in POSIX */ + {ARG_TEST, "writable", parse_accesscheck, pred_writable}, /* GNU, 4.3.0+ */ + PARSE_OPTION ("xdev", xdev), /* POSIX */ + PARSE_TEST ("xtype", xtype), /* GNU */ +#ifdef UNIMPLEMENTED_UNIX + /* It's pretty ugly for find to know about archive formats. + Plus what it could do with cpio archives is very limited. + Better to leave it out. */ + PARSE(ARG_UNIMPLEMENTED, "cpio", cpio), /* Unix */ +#endif + /* gnulib's stdbool.h might have made true and false into macros, + * so we can't leave named 'true' and 'false' tokens, so we have + * to expeant the relevant entries longhand. + */ + {ARG_TEST, "false", parse_false, pred_false}, /* GNU */ + {ARG_TEST, "true", parse_true, pred_true }, /* GNU */ + {ARG_NOOP, "noop", NULL, pred_true }, /* GNU, internal use only */ + + /* Various other cases that don't fit neatly into our macro scheme. */ + {ARG_TEST, "help", parse_help, NULL}, /* GNU */ + {ARG_TEST, "-help", parse_help, NULL}, /* GNU */ + {ARG_TEST, "version", parse_version, NULL}, /* GNU */ + {ARG_TEST, "-version", parse_version, NULL}, /* GNU */ + {0, 0, 0, 0} +}; + + +static const char *first_nonoption_arg = NULL; +static const struct parser_table *noop = NULL; + + +static const struct parser_table* +get_noop(void) +{ + int i; + if (NULL == noop) + { + for (i = 0; parse_table[i].parser_name != 0; i++) + { + if (ARG_NOOP ==parse_table[i].type) + { + noop = &(parse_table[i]); + break; + } + } + } + return noop; +} + +static int +get_stat_Ytime(const struct stat *p, + char what, + struct timespec *ret) +{ + switch (what) + { + case 'a': + *ret = get_stat_atime(p); + return 1; + case 'B': + *ret = get_stat_birthtime(p); + return (ret->tv_nsec >= 0); + case 'c': + *ret = get_stat_ctime(p); + return 1; + case 'm': + *ret = get_stat_mtime(p); + return 1; + default: + assert (0); + abort(); + } +} + +void +set_follow_state(enum SymlinkOption opt) +{ + if (options.debug_options & DebugStat) + { + /* For DebugStat, the choice is made at runtime within debug_stat() + * by checking the contents of the symlink_handling variable. + */ + options.xstat = debug_stat; + } + else + { + switch (opt) + { + case SYMLINK_ALWAYS_DEREF: /* -L */ + options.xstat = optionl_stat; + options.no_leaf_check = true; + break; + + case SYMLINK_NEVER_DEREF: /* -P (default) */ + options.xstat = optionp_stat; + /* Can't turn no_leaf_check off because the user might have specified + * -noleaf anyway + */ + break; + + case SYMLINK_DEREF_ARGSONLY: /* -H */ + options.xstat = optionh_stat; + options.no_leaf_check = true; + } + } + options.symlink_handling = opt; +} + + +void +parse_begin_user_args (char **args, int argno, + const struct predicate *last, + const struct predicate *predicates) +{ + (void) args; + (void) argno; + (void) last; + (void) predicates; + first_nonoption_arg = NULL; +} + +void +parse_end_user_args (char **args, int argno, + const struct predicate *last, + const struct predicate *predicates) +{ + /* does nothing */ + (void) args; + (void) argno; + (void) last; + (void) predicates; +} + + +/* Check that it is legal to fid the given primary in its + * position and return it. + */ +const struct parser_table* +found_parser(const char *original_arg, const struct parser_table *entry) +{ + /* If this is an option, but we have already had a + * non-option argument, the user may be under the + * impression that the behaviour of the option + * argument is conditional on some preceding + * tests. This might typically be the case with, + * for example, -maxdepth. + * + * The options -daystart and -follow are exempt + * from this treatment, since their positioning + * in the command line does have an effect on + * subsequent tests but not previous ones. That + * might be intentional on the part of the user. + */ + if (entry->type != ARG_POSITIONAL_OPTION) + { + /* Something other than -follow/-daystart. + * If this is an option, check if it followed + * a non-option and if so, issue a warning. + */ + if (entry->type == ARG_OPTION) + { + if ((first_nonoption_arg != NULL) + && options.warnings ) + { + /* option which follows a non-option */ + error (0, 0, + _("warning: you have specified the %s " + "option after a non-option argument %s, " + "but options are not positional (%s affects " + "tests specified before it as well as those " + "specified after it). Please specify options " + "before other arguments.\n"), + original_arg, + first_nonoption_arg, + original_arg); + } + } + else + { + /* Not an option or a positional option, + * so remember we've seen it in order to + * use it in a possible future warning message. + */ + if (first_nonoption_arg == NULL) + { + first_nonoption_arg = original_arg; + } + } + } + + return entry; +} + + +/* Return a pointer to the parser function to invoke for predicate + SEARCH_NAME. + Return NULL if SEARCH_NAME is not a valid predicate name. */ + +const struct parser_table* +find_parser (char *search_name) +{ + int i; + const char *original_arg = search_name; + + /* Ugh. Special case -newerXY. */ + if (0 == strncmp("-newer", search_name, 6) + && (8 == strlen(search_name))) + { + return found_parser(original_arg, &parse_entry_newerXY); + } + + if (*search_name == '-') + search_name++; + + for (i = 0; parse_table[i].parser_name != 0; i++) + { + if (strcmp (parse_table[i].parser_name, search_name) == 0) + { + return found_parser(original_arg, &parse_table[i]); + } + } + return NULL; +} + +static float +estimate_file_age_success_rate(float num_days) +{ + if (num_days < 0.1) + { + /* Assume 1% of files have timestamps in the future */ + return 0.01f; + } + else if (num_days < 1) + { + /* Assume 30% of files have timestamps today */ + return 0.3f; + } + else if (num_days > 100) + { + /* Assume 30% of files are very old */ + return 0.3f; + } + else + { + /* Assume 39% of files are between 1 and 100 days old. */ + return 0.39f; + } +} + +static float +estimate_timestamp_success_rate(time_t when) +{ + int num_days = (options.cur_day_start - when) / 86400; + return estimate_file_age_success_rate(num_days); +} + +/* Collect an argument from the argument list, or + * return false. + */ +static boolean +collect_arg(char **argv, int *arg_ptr, const char **collected_arg) +{ + if ((argv == NULL) || (argv[*arg_ptr] == NULL)) + { + *collected_arg = NULL; + return false; + } + else + { + *collected_arg = argv[*arg_ptr]; + (*arg_ptr)++; + return true; + } +} + +static boolean +collect_arg_stat_info(char **argv, int *arg_ptr, struct stat *p) +{ + const char *filename; + if (collect_arg(argv, arg_ptr, &filename)) + { + if (0 == (options.xstat)(filename, p)) + { + return true; + } + else + { + fatal_file_error(filename); + } + } + else + { + return false; + } +} + +/* The parsers are responsible to continue scanning ARGV for + their arguments. Each parser knows what is and isn't + allowed for itself. + + ARGV is the argument array. + *ARG_PTR is the index to start at in ARGV, + updated to point beyond the last element consumed. + + The predicate structure is updated with the new information. */ + + +static boolean +parse_and (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *our_pred; + + (void) argv; + (void) arg_ptr; + + our_pred = get_new_pred (entry); + our_pred->pred_func = pred_and; + our_pred->p_type = BI_OP; + our_pred->p_prec = AND_PREC; + our_pred->need_stat = our_pred->need_type = false; + return true; +} + +static boolean +parse_anewer (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct stat stat_newer; + + set_stat_placeholders(&stat_newer); + if (collect_arg_stat_info(argv, arg_ptr, &stat_newer)) + { + struct predicate *our_pred = insert_primary (entry); + our_pred->args.reftime.xval = XVAL_ATIME; + our_pred->args.reftime.ts = get_stat_mtime(&stat_newer); + our_pred->args.reftime.kind = COMP_GT; + our_pred->est_success_rate = estimate_timestamp_success_rate(stat_newer.st_mtime); + return true; + } + return false; +} + +boolean +parse_closeparen (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *our_pred; + + (void) argv; + (void) arg_ptr; + + our_pred = get_new_pred (entry); + our_pred->pred_func = pred_closeparen; + our_pred->p_type = CLOSE_PAREN; + our_pred->p_prec = NO_PREC; + our_pred->need_stat = our_pred->need_type = false; + return true; +} + +static boolean +parse_cnewer (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct stat stat_newer; + + set_stat_placeholders(&stat_newer); + if (collect_arg_stat_info(argv, arg_ptr, &stat_newer)) + { + struct predicate *our_pred = insert_primary (entry); + our_pred->args.reftime.xval = XVAL_CTIME; /* like -newercm */ + our_pred->args.reftime.ts = get_stat_mtime(&stat_newer); + our_pred->args.reftime.kind = COMP_GT; + our_pred->est_success_rate = estimate_timestamp_success_rate(stat_newer.st_mtime); + return true; + } + return false; +} + +static boolean +parse_comma (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *our_pred; + + (void) argv; + (void) arg_ptr; + + our_pred = get_new_pred (entry); + our_pred->pred_func = pred_comma; + our_pred->p_type = BI_OP; + our_pred->p_prec = COMMA_PREC; + our_pred->need_stat = our_pred->need_type = false; + our_pred->est_success_rate = 1.0f; + return true; +} + +static boolean +parse_daystart (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct tm *local; + + (void) entry; + (void) argv; + (void) arg_ptr; + + if (options.full_days == false) + { + options.cur_day_start += DAYSECS; + local = localtime (&options.cur_day_start); + options.cur_day_start -= (local + ? (local->tm_sec + local->tm_min * 60 + + local->tm_hour * 3600) + : options.cur_day_start % DAYSECS); + options.full_days = true; + } + return true; +} + +static boolean +parse_delete (const struct parser_table* entry, char *argv[], int *arg_ptr) +{ + struct predicate *our_pred; + (void) argv; + (void) arg_ptr; + + our_pred = insert_primary (entry); + our_pred->side_effects = our_pred->no_default_print = true; + /* -delete implies -depth */ + options.do_dir_first = false; + + /* We do not need stat information because we check for the case + * (errno==EISDIR) in pred_delete. + */ + our_pred->need_stat = our_pred->need_type = false; + + our_pred->est_success_rate = 1.0f; + return true; +} + +static boolean +parse_depth (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + (void) entry; + (void) argv; + + options.do_dir_first = false; + return parse_noop(entry, argv, arg_ptr); +} + +static boolean +parse_d (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + if (options.warnings) + { + error (0, 0, + _("warning: the -d option is deprecated; please use " + "-depth instead, because the latter is a " + "POSIX-compliant feature.")); + } + return parse_depth(entry, argv, arg_ptr); +} + +static boolean +parse_empty (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *our_pred; + (void) argv; + (void) arg_ptr; + + our_pred = insert_primary (entry); + our_pred->est_success_rate = 0.01f; /* assume 1% of files are empty. */ + return true; +} + +static boolean +parse_exec (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + return insert_exec_ok ("-exec", entry, get_start_dirfd(), argv, arg_ptr); +} + +static boolean +parse_execdir (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + return insert_exec_ok ("-execdir", entry, -1, argv, arg_ptr); +} + +static boolean +parse_false (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *our_pred; + + (void) argv; + (void) arg_ptr; + + our_pred = insert_primary (entry); + our_pred->need_stat = our_pred->need_type = false; + our_pred->side_effects = our_pred->no_default_print = false; + our_pred->est_success_rate = 0.0f; + return true; +} + +static boolean +insert_fls (const struct parser_table* entry, const char *filename) +{ + struct predicate *our_pred = insert_primary (entry); + if (filename) + open_output_file (filename, &our_pred->args.printf_vec); + else + open_stdout (&our_pred->args.printf_vec); + our_pred->side_effects = our_pred->no_default_print = true; + our_pred->est_success_rate = 1.0f; + return true; +} + + +static boolean +parse_fls (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + const char *filename; + return collect_arg(argv, arg_ptr, &filename) + && insert_fls(entry, filename); +} + +static boolean +parse_follow (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + set_follow_state(SYMLINK_ALWAYS_DEREF); + return parse_noop(entry, argv, arg_ptr); +} + +static boolean +parse_fprint (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *our_pred; + const char *filename; + if (collect_arg(argv, arg_ptr, &filename)) + { + our_pred = insert_primary (entry); + open_output_file (filename, &our_pred->args.printf_vec); + our_pred->side_effects = our_pred->no_default_print = true; + our_pred->need_stat = our_pred->need_type = false; + our_pred->est_success_rate = 1.0f; + return true; + } + else + { + return false; + } +} + +static boolean +insert_fprint(const struct parser_table* entry, const char *filename) +{ + struct predicate *our_pred = insert_primary (entry); + if (filename) + open_output_file (filename, &our_pred->args.printf_vec); + else + open_stdout (&our_pred->args.printf_vec); + our_pred->side_effects = our_pred->no_default_print = true; + our_pred->need_stat = our_pred->need_type = false; + our_pred->est_success_rate = 1.0f; + return true; +} + + +static boolean +parse_fprint0 (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + const char *filename; + if (collect_arg(argv, arg_ptr, &filename)) + return insert_fprint(entry, filename); + else + return false; +} + +static float estimate_fstype_success_rate(const char *fsname) +{ + struct stat dir_stat; + const char *dir = "/"; + if (0 == stat(dir, &dir_stat)) + { + const char *fstype = filesystem_type(&dir_stat, dir); + /* Assume most files are on the same file system type as the root fs. */ + if (0 == strcmp(fsname, fstype)) + return 0.7f; + else + return 0.3f; + } + return 1.0f; +} + + +static boolean +parse_fstype (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + const char *typename; + if (collect_arg(argv, arg_ptr, &typename)) + { + struct predicate *our_pred = insert_primary (entry); + our_pred->args.str = typename; + + /* This is an expensive operation, so although there are + * circumstances where it is selective, we ignore this fact + * because we probably don't want to promote this test to the + * front anyway. + */ + our_pred->est_success_rate = estimate_fstype_success_rate(typename); + return true; + } + else + { + return false; + } +} + +static boolean +parse_gid (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *p = insert_num (argv, arg_ptr, entry); + if (p) + { + p->est_success_rate = (p->args.numinfo.l_val < 100) ? 0.99 : 0.2; + return true; + } + else + { + return false; + } +} + + +static int +safe_atoi (const char *s) +{ + long lval; + char *end; + + errno = 0; + lval = strtol(s, &end, 10); + if ( (LONG_MAX == lval) || (LONG_MIN == lval) ) + { + /* max/min possible value, or an error. */ + if (errno == ERANGE) + { + /* too big, or too small. */ + error(1, errno, "%s", s); + } + else + { + /* not a valid number */ + error(1, errno, "%s", s); + } + /* Otherwise, we do a range chack against INT_MAX and INT_MIN + * below. + */ + } + + if (lval > INT_MAX || lval < INT_MIN) + { + /* The number was in range for long, but not int. */ + errno = ERANGE; + error(1, errno, "%s", s); + } + else if (*end) + { + error(1, errno, "Unexpected suffix %s on %s", + quotearg_n_style(0, options.err_quoting_style, end), + quotearg_n_style(1, options.err_quoting_style, s)); + } + else if (end == s) + { + error(1, errno, "Expected an integer: %s", + quotearg_n_style(0, options.err_quoting_style, s)); + } + return (int)lval; +} + + +static boolean +parse_group (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + const char *groupname; + + if (collect_arg(argv, arg_ptr, &groupname)) + { + gid_t gid; + struct predicate *our_pred; + struct group *cur_gr = getgrnam(groupname); + endgrent(); + if (cur_gr) + { + gid = cur_gr->gr_gid; + } + else + { + const int gid_len = strspn (groupname, "0123456789"); + if (gid_len) + { + if (groupname[gid_len] == 0) + { + gid = safe_atoi (groupname); + } + else + { + /* XXX: no test in test suite for this */ + error(1, 0, _("%s is not the name of an existing group and" + " it does not look like a numeric group ID " + "because it has the unexpected suffix %s"), + quotearg_n_style(0, options.err_quoting_style, groupname), + quotearg_n_style(1, options.err_quoting_style, groupname+gid_len)); + return false; + } + } + else + { + if (*groupname) + { + /* XXX: no test in test suite for this */ + error(1, 0, _("%s is not the name of an existing group"), + quotearg_n_style(0, options.err_quoting_style, groupname)); + } + else + { + error(1, 0, _("argument to -group is empty, but should be a group name")); + } + return false; + } + } + our_pred = insert_primary (entry); + our_pred->args.gid = gid; + our_pred->est_success_rate = (our_pred->args.numinfo.l_val < 100) ? 0.99 : 0.2; + return true; + } + return false; +} + +static boolean +parse_help (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + (void) entry; + (void) argv; + (void) arg_ptr; + + usage(stdout, 0, NULL); + puts (_("\n\ +default path is the current directory; default expression is -print\n\ +expression may consist of: operators, options, tests, and actions:\n")); + puts (_("\ +operators (decreasing precedence; -and is implicit where no others are given):\n\ + ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n\ + EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n")); + puts (_("\ +positional options (always true): -daystart -follow -regextype\n\n\ +normal options (always true, specified before other expressions):\n\ + -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n\ + --version -xdev -ignore_readdir_race -noignore_readdir_race\n")); + puts (_("\ +tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n\ + -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n\ + -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex PATTERN\n\ + -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE")); + puts (_("\ + -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n\ + -readable -writable -executable\n\ + -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n\ + -used N -user NAME -xtype [bcdpfls]\n")); + puts (_("\ +actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n\ + -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n\ + -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n\ + -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n\ +")); + puts (_("Report (and track progress on fixing) bugs via the findutils bug-reporting\n\ +page at http://savannah.gnu.org/ or, if you have no web access, by sending\n\ +email to .")); + exit (0); +} + +static float +estimate_pattern_match_rate(const char *pattern, int is_regex) +{ + if (strpbrk(pattern, "*?[") || (is_regex && strpbrk(pattern, "."))) + { + /* A wildcard; assume the pattern matches most files. */ + return 0.8f; + } + else + { + return 0.1f; + } +} + +static boolean +parse_ilname (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + const char *name; + if (collect_arg(argv, arg_ptr, &name)) + { + struct predicate *our_pred = insert_primary (entry); + our_pred->args.str = name; + /* Use the generic glob pattern estimator to figure out how many + * links will match, but bear in mind that most files won't be links. + */ + our_pred->est_success_rate = 0.1 * estimate_pattern_match_rate(name, 0); + return true; + } + else + { + return false; + } +} + + +/* sanity check the fnmatch() function to make sure that case folding + * is supported (as opposed to just having the flag ignored). + */ +static boolean +fnmatch_sanitycheck(void) +{ + static boolean checked = false; + if (!checked) + { + if (0 != fnmatch("foo", "foo", 0) + || 0 == fnmatch("Foo", "foo", 0) + || 0 != fnmatch("Foo", "foo", FNM_CASEFOLD)) + { + error (1, 0, _("sanity check of the fnmatch() library function failed.")); + return false; + } + checked = true; + } + return checked; +} + + +static boolean +check_name_arg(const char *pred, const char *arg) +{ + if (options.warnings && strchr(arg, '/')) + { + error(0, 0,_("warning: Unix filenames usually don't contain slashes " + "(though pathnames do). That means that '%s %s' will " + "probably evaluate to false all the time on this system. " + "You might find the '-wholename' test more useful, or " + "perhaps '-samefile'. Alternatively, if you are using " + "GNU grep, you could " + "use 'find ... -print0 | grep -FzZ %s'."), + pred, + safely_quote_err_filename(0, arg), + safely_quote_err_filename(1, arg)); + } + return true; /* allow it anyway */ +} + + + +static boolean +parse_iname (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + const char *name; + fnmatch_sanitycheck(); + if (collect_arg(argv, arg_ptr, &name)) + { + if (check_name_arg("-iname", name)) + { + struct predicate *our_pred = insert_primary (entry); + our_pred->need_stat = our_pred->need_type = false; + our_pred->args.str = name; + our_pred->est_success_rate = estimate_pattern_match_rate(name, 0); + return true; + } + } + return false; +} + +static boolean +parse_inum (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *p = insert_num (argv, arg_ptr, entry); + if (p) + { + /* inode number is exact match only, so very low proportions of + * files match + */ + p->est_success_rate = 1e-6; + return true; + } + else + { + return false; + } +} + +/* -ipath is deprecated (at RMS's request) in favour of + * -iwholename. See the node "GNU Manuals" in standards.texi + * for the rationale for this (basically, GNU prefers the use + * of the phrase "file name" to "path name" + */ +static boolean +parse_ipath (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + const char *name; + + fnmatch_sanitycheck (); + if (collect_arg (argv, arg_ptr, &name)) + { + struct predicate *our_pred = insert_primary_withpred (entry, pred_ipath); + our_pred->need_stat = our_pred->need_type = false; + our_pred->args.str = name; + our_pred->est_success_rate = estimate_pattern_match_rate (name, 0); + return true; + } + return false; +} + +static boolean +parse_iwholename (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + return parse_ipath (entry, argv, arg_ptr); +} + +static boolean +parse_iregex (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + return insert_regex (argv, arg_ptr, entry, RE_ICASE|options.regex_options); +} + +static boolean +parse_links (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *p = insert_num (argv, arg_ptr, entry); + if (p) + { + if (p->args.numinfo.l_val == 1) + p->est_success_rate = 0.99; + else if (p->args.numinfo.l_val == 2) + p->est_success_rate = 0.01; + else + p->est_success_rate = 1e-3; + return true; + } + else + { + return false; + } +} + +static boolean +parse_lname (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + const char *name; + fnmatch_sanitycheck(); + if (collect_arg(argv, arg_ptr, &name)) + { + struct predicate *our_pred = insert_primary (entry); + our_pred->args.str = name; + our_pred->est_success_rate = 0.1 * estimate_pattern_match_rate(name, 0); + return true; + } + return false; +} + +static boolean +parse_ls (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + (void) &argv; + (void) &arg_ptr; + return insert_fls(entry, NULL); +} + +static boolean +insert_depthspec(const struct parser_table* entry, char **argv, int *arg_ptr, + int *limitptr) +{ + const char *depthstr; + int depth_len; + const char *predicate = argv[(*arg_ptr)-1]; + if (collect_arg(argv, arg_ptr, &depthstr)) + { + depth_len = strspn (depthstr, "0123456789"); + if ((depth_len > 0) && (depthstr[depth_len] == 0)) + { + (*limitptr) = safe_atoi (depthstr); + if (*limitptr >= 0) + { + return parse_noop(entry, argv, arg_ptr); + } + } + error(1, 0, _("Expected a positive decimal integer argument to %s, but got %s"), + predicate, + quotearg_n_style(0, options.err_quoting_style, depthstr)); + return false; + } + /* missing argument */ + return false; +} + + +static boolean +parse_maxdepth (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + return insert_depthspec(entry, argv, arg_ptr, &options.maxdepth); +} + +static boolean +parse_mindepth (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + return insert_depthspec(entry, argv, arg_ptr, &options.mindepth); +} + + +static boolean +do_parse_xmin (const struct parser_table* entry, + char **argv, + int *arg_ptr, + enum xval xv) +{ + const char *minutes; + + if (collect_arg(argv, arg_ptr, &minutes)) + { + struct time_val tval; + tval.xval = xv; + if (get_relative_timestamp(minutes, &tval, + options.cur_day_start + DAYSECS, 60, + "arithmetic overflow while converting %s " + "minutes to a number of seconds")) + { + struct predicate *our_pred = insert_primary (entry); + our_pred->args.reftime = tval; + our_pred->est_success_rate = estimate_timestamp_success_rate(tval.ts.tv_sec); + return true; + } + } + return false; +} +static boolean +parse_amin (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + return do_parse_xmin(entry, argv, arg_ptr, XVAL_ATIME); +} + +static boolean +parse_cmin (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + return do_parse_xmin(entry, argv, arg_ptr, XVAL_CTIME); +} + + +static boolean +parse_mmin (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + return do_parse_xmin(entry, argv, arg_ptr, XVAL_MTIME); +} + +static boolean +parse_name (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + const char *name; + if (collect_arg(argv, arg_ptr, &name)) + { + fnmatch_sanitycheck(); + if (check_name_arg("-name", name)) + { + struct predicate *our_pred = insert_primary (entry); + our_pred->need_stat = our_pred->need_type = false; + our_pred->args.str = name; + our_pred->est_success_rate = estimate_pattern_match_rate(name, 0); + return true; + } + } + return false; +} + +static boolean +parse_negate (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *our_pred; + + (void) &argv; + (void) &arg_ptr; + + our_pred = get_new_pred_chk_op (entry); + our_pred->pred_func = pred_negate; + our_pred->p_type = UNI_OP; + our_pred->p_prec = NEGATE_PREC; + our_pred->need_stat = our_pred->need_type = false; + return true; +} + +static boolean +parse_newer (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *our_pred; + struct stat stat_newer; + + set_stat_placeholders(&stat_newer); + if (collect_arg_stat_info(argv, arg_ptr, &stat_newer)) + { + our_pred = insert_primary (entry); + our_pred->args.reftime.ts = get_stat_mtime(&stat_newer); + our_pred->args.reftime.xval = XVAL_MTIME; + our_pred->args.reftime.kind = COMP_GT; + our_pred->est_success_rate = estimate_timestamp_success_rate(stat_newer.st_mtime); + return true; + } + return false; +} + + +static boolean +parse_newerXY (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + (void) argv; + (void) arg_ptr; + + if ((argv == NULL) || (argv[*arg_ptr] == NULL)) + { + return false; + } + else if (8u != strlen(argv[*arg_ptr])) + { + return false; + } + else + { + char x, y; + const char validchars[] = "aBcmt"; + + assert (0 == strncmp("-newer", argv[*arg_ptr], 6)); + x = argv[*arg_ptr][6]; + y = argv[*arg_ptr][7]; + + +#if !defined(HAVE_STRUCT_STAT_ST_BIRTHTIME) && !defined(HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC) && !defined(HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC) + if ('B' == x || 'B' == y) + { + error(0, 0, + _("This system does not provide a way to find the birth time of a file.")); + return 0; + } +#endif + + /* -newertY (for any Y) is invalid. */ + if (x == 't' + || 0 == strchr(validchars, x) + || 0 == strchr( validchars, y)) + { + return false; + } + else + { + struct predicate *our_pred; + + /* Because this item is ARG_SPECIAL_PARSE, we have to advance arg_ptr + * past the test name (for most other tests, this is already done) + */ + (*arg_ptr)++; + + our_pred = insert_primary (entry); + + + switch (x) + { + case 'a': + our_pred->args.reftime.xval = XVAL_ATIME; + break; + case 'B': + our_pred->args.reftime.xval = XVAL_BIRTHTIME; + break; + case 'c': + our_pred->args.reftime.xval = XVAL_CTIME; + break; + case 'm': + our_pred->args.reftime.xval = XVAL_MTIME; + break; + default: + assert (strchr(validchars, x)); + assert (0); + } + + if ('t' == y) + { + if (!get_date(&our_pred->args.reftime.ts, + argv[*arg_ptr], + &options.start_time)) + { + error(1, 0, + _("I cannot figure out how to interpret %s as a date or time"), + quotearg_n_style(0, options.err_quoting_style, argv[*arg_ptr])); + } + } + else + { + struct stat stat_newer; + + /* Stat the named file. */ + set_stat_placeholders(&stat_newer); + if ((*options.xstat) (argv[*arg_ptr], &stat_newer)) + fatal_file_error(argv[*arg_ptr]); + + if (!get_stat_Ytime(&stat_newer, y, &our_pred->args.reftime.ts)) + { + /* We cannot extract a timestamp from the struct stat. */ + error(1, 0, _("Cannot obtain birth time of file %s"), + safely_quote_err_filename(0, argv[*arg_ptr])); + } + } + our_pred->args.reftime.kind = COMP_GT; + our_pred->est_success_rate = estimate_timestamp_success_rate(our_pred->args.reftime.ts.tv_sec); + (*arg_ptr)++; + + assert (our_pred->pred_func != NULL); + assert (our_pred->pred_func == pred_newerXY); + assert (our_pred->need_stat); + return true; + } + } +} + + +static boolean +parse_noleaf (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + options.no_leaf_check = true; + return parse_noop(entry, argv, arg_ptr); +} + +#ifdef CACHE_IDS +/* Arbitrary amount by which to increase size + of `uid_unused' and `gid_unused'. */ +#define ALLOC_STEP 2048 + +/* Boolean: if uid_unused[n] is nonzero, then UID n has no passwd entry. */ +char *uid_unused = NULL; + +/* Number of elements in `uid_unused'. */ +unsigned uid_allocated; + +/* Similar for GIDs and group entries. */ +char *gid_unused = NULL; +unsigned gid_allocated; +#endif + +static boolean +parse_nogroup (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *our_pred; + + (void) &argv; + (void) &arg_ptr; + + our_pred = insert_primary (entry); + our_pred->est_success_rate = 1e-4; +#ifdef CACHE_IDS + if (gid_unused == NULL) + { + struct group *gr; + + gid_allocated = ALLOC_STEP; + gid_unused = xmalloc (gid_allocated); + memset (gid_unused, 1, gid_allocated); + setgrent (); + while ((gr = getgrent ()) != NULL) + { + if ((unsigned) gr->gr_gid >= gid_allocated) + { + unsigned new_allocated = (unsigned) gr->gr_gid + ALLOC_STEP; + gid_unused = xrealloc (gid_unused, new_allocated); + memset (gid_unused + gid_allocated, 1, + new_allocated - gid_allocated); + gid_allocated = new_allocated; + } + gid_unused[(unsigned) gr->gr_gid] = 0; + } + endgrent (); + } +#endif + return true; +} + +static boolean +parse_nouser (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *our_pred; + (void) argv; + (void) arg_ptr; + + + our_pred = insert_primary (entry); + our_pred->est_success_rate = 1e-3; +#ifdef CACHE_IDS + if (uid_unused == NULL) + { + struct passwd *pw; + + uid_allocated = ALLOC_STEP; + uid_unused = xmalloc (uid_allocated); + memset (uid_unused, 1, uid_allocated); + setpwent (); + while ((pw = getpwent ()) != NULL) + { + if ((unsigned) pw->pw_uid >= uid_allocated) + { + unsigned new_allocated = (unsigned) pw->pw_uid + ALLOC_STEP; + uid_unused = xrealloc (uid_unused, new_allocated); + memset (uid_unused + uid_allocated, 1, + new_allocated - uid_allocated); + uid_allocated = new_allocated; + } + uid_unused[(unsigned) pw->pw_uid] = 0; + } + endpwent (); + } +#endif + return true; +} + +static boolean +parse_nowarn (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + options.warnings = false; + return parse_noop(entry, argv, arg_ptr); +} + +static boolean +parse_ok (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + return insert_exec_ok ("-ok", entry, get_start_dirfd(), argv, arg_ptr); +} + +static boolean +parse_okdir (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + return insert_exec_ok ("-okdir", entry, -1, argv, arg_ptr); +} + +boolean +parse_openparen (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *our_pred; + + (void) argv; + (void) arg_ptr; + + our_pred = get_new_pred_chk_op (entry); + our_pred->pred_func = pred_openparen; + our_pred->p_type = OPEN_PAREN; + our_pred->p_prec = NO_PREC; + our_pred->need_stat = our_pred->need_type = false; + return true; +} + +static boolean +parse_or (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *our_pred; + + (void) argv; + (void) arg_ptr; + + our_pred = get_new_pred (entry); + our_pred->pred_func = pred_or; + our_pred->p_type = BI_OP; + our_pred->p_prec = OR_PREC; + our_pred->need_stat = our_pred->need_type = false; + return true; +} + +/* For some time, -path was deprecated (at RMS's request) in favour of + * -iwholename. See the node "GNU Manuals" in standards.texi for the + * rationale for this (basically, GNU prefers the use of the phrase + * "file name" to "path name". + * + * We do not issue a warning that this usage is deprecated + * since + * (a) HPUX find supports this predicate also and + * (b) it will soon be in POSIX anyway. + */ +static boolean +parse_path (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + const char *name; + if (collect_arg(argv, arg_ptr, &name)) + { + struct predicate *our_pred = insert_primary_withpred (entry, pred_path); + our_pred->need_stat = our_pred->need_type = false; + our_pred->args.str = name; + our_pred->est_success_rate = estimate_pattern_match_rate (name, 0); + return true; + } + return false; +} + +static boolean +parse_wholename (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + return parse_path (entry, argv, arg_ptr); +} + +static void +non_posix_mode(const char *mode) +{ + if (options.posixly_correct) + { + error (1, 0, _("Mode %s is not valid when POSIXLY_CORRECT is on."), + quotearg_n_style(0, options.err_quoting_style, mode)); + } +} + + +static boolean +parse_perm (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + mode_t perm_val[2]; + float rate; + int mode_start = 0; + boolean havekind = false; + enum permissions_type kind = PERM_EXACT; + struct mode_change *change = NULL; + struct predicate *our_pred; + const char *perm_expr; + + if (!collect_arg(argv, arg_ptr, &perm_expr)) + return false; + + switch (perm_expr[0]) + { + case '-': + mode_start = 1; + kind = PERM_AT_LEAST; + havekind = true; + rate = 0.2; + break; + + case '+': + change = mode_compile (perm_expr); + if (NULL == change) + { + /* Most likely the caller is an old script that is still + * using the obsolete GNU syntax '-perm +MODE'. This old + * syntax was withdrawn in favor of '-perm /MODE' because + * it is incompatible with POSIX in some cases, but we + * still support uses of it that are not incompatible with + * POSIX. + * + * Example: POSIXLY_CORRECT=y find -perm +a+x + */ + non_posix_mode(perm_expr); + + /* support the previous behaviour. */ + mode_start = 1; + kind = PERM_ANY; + rate = 0.3; + } + else + { + /* This is a POSIX-compatible usage */ + mode_start = 0; + kind = PERM_EXACT; + rate = 0.1; + } + havekind = true; + break; + + case '/': /* GNU extension */ + non_posix_mode(perm_expr); + mode_start = 1; + kind = PERM_ANY; + havekind = true; + rate = 0.3; + break; + + default: + /* For example, '-perm 0644', which is valid and matches + * only files whose mode is exactly 0644. + */ + mode_start = 0; + kind = PERM_EXACT; + havekind = true; + rate = 0.01; + break; + } + + if (NULL == change) + { + change = mode_compile (perm_expr + mode_start); + if (NULL == change) + error (1, 0, _("invalid mode %s"), + quotearg_n_style(0, options.err_quoting_style, perm_expr)); + } + perm_val[0] = mode_adjust (0, false, 0, change, NULL); + perm_val[1] = mode_adjust (0, true, 0, change, NULL); + free (change); + + if (('/' == perm_expr[0]) && (0 == perm_val[0]) && (0 == perm_val[1])) + { + /* The meaning of -perm /000 will change in the future. It + * currently matches no files, but like -perm -000 it should + * match all files. + * + * Starting in 2005, we used to issue a warning message + * informing the user that the behaviour would change in the + * future. We have now changed the behaviour and issue a + * warning message that the behaviour recently changed. + */ + error (0, 0, + _("warning: you have specified a mode pattern %s (which is " + "equivalent to /000). The meaning of -perm /000 has now been " + "changed to be consistent with -perm -000; that is, while it " + "used to match no files, it now matches all files."), + perm_expr); + + kind = PERM_AT_LEAST; + havekind = true; + + /* The "magic" number below is just the fraction of files on my + * own system that "-type l -xtype l" fails for (i.e. unbroken symlinks). + * Actual totals are 1472 and 1073833. + */ + rate = 0.9986; /* probably matches anything but a broken symlink */ + } + + our_pred = insert_primary (entry); + our_pred->est_success_rate = rate; + if (havekind) + { + our_pred->args.perm.kind = kind; + } + else + { + + switch (perm_expr[0]) + { + case '-': + our_pred->args.perm.kind = PERM_AT_LEAST; + break; + case '+': + our_pred->args.perm.kind = PERM_ANY; + break; + default: + our_pred->args.perm.kind = PERM_EXACT; + break; + } + } + memcpy (our_pred->args.perm.val, perm_val, sizeof perm_val); + return true; +} + +boolean +parse_print (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *our_pred; + + (void) argv; + (void) arg_ptr; + + our_pred = insert_primary (entry); + /* -print has the side effect of printing. This prevents us + from doing undesired multiple printing when the user has + already specified -print. */ + our_pred->side_effects = our_pred->no_default_print = true; + our_pred->need_stat = our_pred->need_type = false; + open_stdout(&our_pred->args.printf_vec); + return true; +} + +static boolean +parse_print0 (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + return insert_fprint(entry, NULL); +} + +static boolean +parse_printf (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + const char *format; + if (collect_arg(argv, arg_ptr, &format)) + { + struct format_val fmt; + open_stdout(&fmt); + return insert_fprintf (&fmt, entry, pred_fprintf, format); + } + return false; +} + +static boolean +parse_fprintf (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + const char *format, *filename; + if (collect_arg(argv, arg_ptr, &filename)) + { + if (collect_arg(argv, arg_ptr, &format)) + { + struct format_val fmt; + open_output_file (filename, &fmt); + return insert_fprintf (&fmt, entry, pred_fprintf, format); + } + } + return false; +} + +static boolean +parse_prune (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *our_pred; + + (void) argv; + (void) arg_ptr; + + our_pred = insert_primary (entry); + our_pred->need_stat = our_pred->need_type = false; + /* -prune has a side effect that it does not descend into + the current directory. */ + our_pred->side_effects = true; + our_pred->no_default_print = false; + return true; +} + +static boolean +parse_quit (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *our_pred = insert_primary (entry); + (void) argv; + (void) arg_ptr; + our_pred->need_stat = our_pred->need_type = false; + our_pred->side_effects = true; /* Exiting is a side effect... */ + our_pred->no_default_print = false; /* Don't inhibit the default print, though. */ + our_pred->est_success_rate = 1.0f; + return true; +} + + +static boolean +parse_regextype (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + const char *type_name; + if (collect_arg(argv, arg_ptr, &type_name)) + { + /* collect the regex type name */ + options.regex_options = get_regex_type(type_name); + return parse_noop(entry, argv, arg_ptr); + } + return false; +} + + +static boolean +parse_regex (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + return insert_regex (argv, arg_ptr, entry, options.regex_options); +} + +static boolean +insert_regex (char **argv, + int *arg_ptr, + const struct parser_table *entry, + int regex_options) +{ + const char *rx; + if (collect_arg(argv, arg_ptr, &rx)) + { + struct re_pattern_buffer *re; + const char *error_message; + struct predicate *our_pred = insert_primary_withpred (entry, pred_regex); + our_pred->need_stat = our_pred->need_type = false; + re = xmalloc (sizeof (struct re_pattern_buffer)); + our_pred->args.regex = re; + re->allocated = 100; + re->buffer = xmalloc (re->allocated); + re->fastmap = NULL; + + re_set_syntax(regex_options); + re->syntax = regex_options; + re->translate = NULL; + + error_message = re_compile_pattern (rx, strlen(rx), re); + if (error_message) + error (1, 0, "%s", error_message); + our_pred->est_success_rate = estimate_pattern_match_rate(rx, 1); + return true; + } + return false; +} + +static boolean +parse_size (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *our_pred; + uintmax_t num; + char suffix; + enum comparison_type c_type; + + int blksize = 512; + int len; + + /* XXX: cannot (yet) convert to ue collect_arg() as this + * function modifies the args in-place. + */ + if ((argv == NULL) || (argv[*arg_ptr] == NULL)) + return false; + + len = strlen (argv[*arg_ptr]); + if (len == 0) + error (1, 0, _("invalid null argument to -size")); + + suffix = argv[*arg_ptr][len - 1]; + switch (suffix) + { + case 'b': + blksize = 512; + argv[*arg_ptr][len - 1] = '\0'; + break; + + case 'c': + blksize = 1; + argv[*arg_ptr][len - 1] = '\0'; + break; + + case 'k': + blksize = 1024; + argv[*arg_ptr][len - 1] = '\0'; + break; + + case 'M': /* Megabytes */ + blksize = 1024*1024; + argv[*arg_ptr][len - 1] = '\0'; + break; + + case 'G': /* Gigabytes */ + blksize = 1024*1024*1024; + argv[*arg_ptr][len - 1] = '\0'; + break; + + case 'w': + blksize = 2; + argv[*arg_ptr][len - 1] = '\0'; + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + break; + + default: + error (1, 0, _("invalid -size type `%c'"), argv[*arg_ptr][len - 1]); + } + /* TODO: accept fractional megabytes etc. ? */ + if (!get_num (argv[*arg_ptr], &num, &c_type)) + { + error(1, 0, + _("Invalid argument `%s%c' to -size"), + argv[*arg_ptr], (int)suffix); + return false; + } + our_pred = insert_primary (entry); + our_pred->args.size.kind = c_type; + our_pred->args.size.blocksize = blksize; + our_pred->args.size.size = num; + our_pred->need_stat = true; + our_pred->need_type = false; + + if (COMP_GT == c_type) + our_pred->est_success_rate = (num*blksize > 20480) ? 0.1 : 0.9; + else if (COMP_LT == c_type) + our_pred->est_success_rate = (num*blksize > 20480) ? 0.9 : 0.1; + else + our_pred->est_success_rate = 0.01; + + (*arg_ptr)++; + return true; +} + + +static boolean +parse_samefile (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + /* General idea: stat the file, remember device and inode numbers. + * If a candidate file matches those, it's the same file. + */ + struct predicate *our_pred; + struct stat st, fst; + int fd, openflags; + + set_stat_placeholders(&st); + if (!collect_arg_stat_info(argv, arg_ptr, &st)) + return false; + + set_stat_placeholders(&fst); + /* POSIX systems are free to re-use the inode number of a deleted + * file. To ensure that we are not fooled by inode reuse, we hold + * the file open if we can. This would prevent the system reusing + * the file. + */ + fd = -3; /* means, uninitialised */ + openflags = O_RDONLY; + + if (options.symlink_handling == SYMLINK_NEVER_DEREF) + { + if (options.open_nofollow_available) + { + assert (O_NOFOLLOW != 0); + openflags |= O_NOFOLLOW; + fd = -1; /* safe to open it. */ + } + else + { + if (S_ISLNK(st.st_mode)) + { + /* no way to ensure that a symlink will not be followed + * by open(2), so fall back on using lstat(). Accept + * the risk that the named file will be deleted and + * replaced with another having the same inode. + * + * Avoid opening the file. + */ + fd = -2; /* Do not open it */ + } + else + { + fd = -1; + /* Race condition here: the file might become a symlink here. */ + } + } + } + else + { + /* We want to dereference the symlink anyway */ + fd = -1; /* safe to open it without O_NOFOLLOW */ + } + + assert (fd != -3); /* check we made a decision */ + if (fd == -1) + { + /* Race condition here. The file might become a + * symbolic link in between out call to stat and + * the call to open. + */ + fd = open(argv[*arg_ptr], openflags); + + if (fd >= 0) + { + /* We stat the file again here to prevent a race condition + * between the first stat and the call to open(2). + */ + if (0 != fstat(fd, &fst)) + { + fatal_file_error(argv[*arg_ptr]); + } + else + { + /* Worry about the race condition. If the file became a + * symlink after our first stat and before our call to + * open, fst may contain the stat information for the + * destination of the link, not the link itself. + */ + if ((*options.xstat) (argv[*arg_ptr], &st)) + fatal_file_error(argv[*arg_ptr]); + + if ((options.symlink_handling == SYMLINK_NEVER_DEREF) + && (!options.open_nofollow_available)) + { + if (S_ISLNK(st.st_mode)) + { + /* We lost the race. Leave the data in st. The + * file descriptor points to the wrong thing. + */ + close(fd); + fd = -1; + } + else + { + /* Several possibilities here: + * 1. There was no race + * 2. The file changed into a symlink after the stat and + * before the open, and then back into a non-symlink + * before the second stat. + * + * In case (1) there is no problem. In case (2), + * the stat() and fstat() calls will have returned + * different data. O_NOFOLLOW was not available, + * so the open() call may have followed a symlink + * even if the -P option is in effect. + */ + if ((st.st_dev == fst.st_dev) + && (st.st_ino == fst.st_ino)) + { + /* No race. No need to copy fst to st, + * since they should be identical (modulo + * differences in padding bytes). + */ + } + else + { + /* We lost the race. Leave the data in st. The + * file descriptor points to the wrong thing. + */ + close(fd); + fd = -1; + } + } + } + else + { + st = fst; + } + } + } + } + + our_pred = insert_primary (entry); + our_pred->args.samefileid.ino = st.st_ino; + our_pred->args.samefileid.dev = st.st_dev; + our_pred->args.samefileid.fd = fd; + our_pred->need_type = false; + our_pred->need_stat = true; + our_pred->est_success_rate = 0.01f; + return true; +} + +#if 0 +/* This function is commented out partly because support for it is + * uneven. + */ +static boolean +parse_show_control_chars (const struct parser_table* entry, + char **argv, + int *arg_ptr) +{ + const char *arg; + const char *errmsg = _("The -show-control-chars option takes " + "a single argument which " + "must be 'literal' or 'safe'"); + + if ((argv == NULL) || (argv[*arg_ptr] == NULL)) + { + error (1, errno, "%s", errmsg); + return false; + } + else + { + arg = argv[*arg_ptr]; + + if (0 == strcmp("literal", arg)) + { + options.literal_control_chars = true; + } + else if (0 == strcmp("safe", arg)) + { + options.literal_control_chars = false; + } + else + { + error (1, errno, "%s", errmsg); + return false; + } + (*arg_ptr)++; /* consume the argument. */ + return true; + } +} +#endif + + +static boolean +parse_true (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *our_pred; + + (void) argv; + (void) arg_ptr; + + our_pred = insert_primary (entry); + our_pred->need_stat = our_pred->need_type = false; + our_pred->est_success_rate = 1.0f; + return true; +} + +static boolean +parse_noop (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + (void) entry; + return parse_true(get_noop(), argv, arg_ptr); +} + +static boolean +parse_accesscheck (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *our_pred; + (void) argv; + (void) arg_ptr; + our_pred = insert_primary (entry); + our_pred->need_stat = our_pred->need_type = false; + our_pred->side_effects = our_pred->no_default_print = false; + if (pred_is(our_pred, pred_executable)) + our_pred->est_success_rate = 0.2; + else + our_pred->est_success_rate = 0.9; + return true; +} + +static boolean +parse_type (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + return insert_type (argv, arg_ptr, entry, pred_type); +} + +static boolean +parse_uid (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *p = insert_num (argv, arg_ptr, entry); + if (p) + { + p->est_success_rate = (p->args.numinfo.l_val < 100) ? 0.99 : 0.2; + return true; + } + else + { + return false; + } +} + +static boolean +parse_used (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + struct predicate *our_pred; + struct time_val tval; + const char *offset_str; + const char *errmsg = "arithmetic overflow while converting %s days to a number of seconds"; + + if (collect_arg(argv, arg_ptr, &offset_str)) + { + /* The timespec is actually a delta value, so we use an origin of 0. */ + if (get_relative_timestamp(offset_str, &tval, 0, DAYSECS, errmsg)) + { + our_pred = insert_primary (entry); + our_pred->args.reftime = tval; + our_pred->est_success_rate = estimate_file_age_success_rate(tval.ts.tv_sec / DAYSECS); + return true; + } + else + { + error(1, 0, _("Invalid argument %s to -used"), offset_str); + return false; + } + } + else + { + return false; /* missing argument */ + } +} + +static boolean +parse_user (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + const char *username; + + if (collect_arg(argv, arg_ptr, &username)) + { + struct predicate *our_pred; + uid_t uid; + struct passwd *cur_pwd = getpwnam(username); + endpwent(); + if (cur_pwd != NULL) + { + uid = cur_pwd->pw_uid; + } + else + { + int uid_len = strspn (username, "0123456789"); + if (uid_len && (username[uid_len]==0)) + uid = safe_atoi (username); + else + return false; + } + our_pred = insert_primary (entry); + our_pred->args.uid = uid; + our_pred->est_success_rate = (our_pred->args.uid < 100) ? 0.99 : 0.2; + return true; + } + return false; +} + +static boolean +parse_version (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + int features = 0; + int flags; + + (void) argv; + (void) arg_ptr; + (void) entry; + + display_findutils_version("find"); + printf (_("Features enabled: ")); + +#if CACHE_IDS + printf("CACHE_IDS "); + ++features; +#endif +#if DEBUG + printf("DEBUG "); + ++features; +#endif +#if DEBUG_STAT + printf("DEBUG_STAT "); + ++features; +#endif +#if defined USE_STRUCT_DIRENT_D_TYPE && defined HAVE_STRUCT_DIRENT_D_TYPE + printf("D_TYPE "); + ++features; +#endif +#if defined O_NOFOLLOW + printf("O_NOFOLLOW(%s) ", + (options.open_nofollow_available ? "enabled" : "disabled")); + ++features; +#endif +#if defined LEAF_OPTIMISATION + printf("LEAF_OPTIMISATION "); + ++features; +#endif + + flags = 0; + if (is_fts_enabled(&flags)) + { + int nflags = 0; + printf("FTS("); + ++features; + + if (flags & FTS_CWDFD) + { + if (nflags) + { + printf(","); + } + printf("FTS_CWDFD"); + ++nflags; + } + printf(") "); + } + + printf("CBO(level=%d) ", (int)(options.optimisation_level)); + ++features; + + if (0 == features) + { + /* For the moment, leave this as English in case someone wants + to parse these strings. */ + printf("none"); + } + printf("\n"); + + exit (0); +} + +static boolean +parse_xdev (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + options.stay_on_filesystem = true; + return parse_noop(entry, argv, arg_ptr); +} + +static boolean +parse_ignore_race (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + options.ignore_readdir_race = true; + return parse_noop(entry, argv, arg_ptr); +} + +static boolean +parse_noignore_race (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + options.ignore_readdir_race = false; + return parse_noop(entry, argv, arg_ptr); +} + +static boolean +parse_warn (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + options.warnings = true; + return parse_noop(entry, argv, arg_ptr); +} + +static boolean +parse_xtype (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + return insert_type (argv, arg_ptr, entry, pred_xtype); +} + +static boolean +insert_type (char **argv, int *arg_ptr, + const struct parser_table *entry, + PRED_FUNC which_pred) +{ + mode_t type_cell; + struct predicate *our_pred; + float rate = 0.5; + const char *typeletter; + + if (collect_arg(argv, arg_ptr, &typeletter)) + { + if (strlen(typeletter) != 1u) + { + error(1, 0, _("Arguments to -type should contain only one letter")); + return false; + } + + switch (typeletter[0]) + { + case 'b': /* block special */ + type_cell = S_IFBLK; + rate = 0.01f; + break; + case 'c': /* character special */ + type_cell = S_IFCHR; + rate = 0.01f; + break; + case 'd': /* directory */ + type_cell = S_IFDIR; + rate = 0.4f; + break; + case 'f': /* regular file */ + type_cell = S_IFREG; + rate = 0.95f; + break; +#ifdef S_IFLNK + case 'l': /* symbolic link */ + type_cell = S_IFLNK; + rate = 0.1f; + break; +#endif +#ifdef S_IFIFO + case 'p': /* pipe */ + type_cell = S_IFIFO; + rate = 0.01f; + break; +#endif +#ifdef S_IFSOCK + case 's': /* socket */ + type_cell = S_IFSOCK; + rate = 0.01f; + break; +#endif +#ifdef S_IFDOOR + case 'D': /* Solaris door */ + type_cell = S_IFDOOR; + rate = 0.01f; + break; +#endif + default: /* None of the above ... nuke 'em. */ + error(1, 0, _("Unknown argument to -type: %c"), (*typeletter)); + return false; + } + our_pred = insert_primary_withpred (entry, which_pred); + our_pred->est_success_rate = rate; + + /* Figure out if we will need to stat the file, because if we don't + * need to follow symlinks, we can avoid a stat call by using + * struct dirent.d_type. + */ + if (which_pred == pred_xtype) + { + our_pred->need_stat = true; + our_pred->need_type = false; + } + else + { + our_pred->need_stat = false; /* struct dirent is enough */ + our_pred->need_type = true; + } + our_pred->args.type = type_cell; + return true; + } + return false; +} + + +/* Return true if the file accessed via FP is a terminal. + */ +static boolean +stream_is_tty(FILE *fp) +{ + int fd = fileno(fp); + if (-1 == fd) + { + return false; /* not a valid stream */ + } + else + { + return isatty(fd) ? true : false; + } + +} + + + + +/* XXX: do we need to pass FUNC to this function? */ +static boolean +insert_fprintf (struct format_val *vec, + const struct parser_table *entry, PRED_FUNC func, + const char *format_const) +{ + char *format = (char*)format_const; /* XXX: casting away constness */ + register char *scan; /* Current address in scanning `format'. */ + register char *scan2; /* Address inside of element being scanned. */ + struct segment **segmentp; /* Address of current segment. */ + struct predicate *our_pred; + + our_pred = insert_primary_withpred (entry, func); + our_pred->side_effects = our_pred->no_default_print = true; + our_pred->args.printf_vec = *vec; + our_pred->need_type = false; + our_pred->need_stat = false; + our_pred->p_cost = NeedsNothing; + + segmentp = &our_pred->args.printf_vec.segment; + *segmentp = NULL; + + for (scan = format; *scan; scan++) + { + if (*scan == '\\') + { + scan2 = scan + 1; + if (*scan2 >= '0' && *scan2 <= '7') + { + register int n, i; + + for (i = n = 0; i < 3 && (*scan2 >= '0' && *scan2 <= '7'); + i++, scan2++) + n = 8 * n + *scan2 - '0'; + scan2--; + *scan = n; + } + else + { + switch (*scan2) + { + case 'a': + *scan = 7; + break; + case 'b': + *scan = '\b'; + break; + case 'c': + make_segment (segmentp, format, scan - format, + KIND_STOP, 0, 0, + our_pred); + if (our_pred->need_stat && (our_pred->p_cost < NeedsStatInfo)) + our_pred->p_cost = NeedsStatInfo; + return true; + case 'f': + *scan = '\f'; + break; + case 'n': + *scan = '\n'; + break; + case 'r': + *scan = '\r'; + break; + case 't': + *scan = '\t'; + break; + case 'v': + *scan = '\v'; + break; + case '\\': + /* *scan = '\\'; * it already is */ + break; + default: + error (0, 0, + _("warning: unrecognized escape `\\%c'"), *scan2); + scan++; + continue; + } + } + segmentp = make_segment (segmentp, format, scan - format + 1, + KIND_PLAIN, 0, 0, + our_pred); + format = scan2 + 1; /* Move past the escape. */ + scan = scan2; /* Incremented immediately by `for'. */ + } + else if (*scan == '%') + { + if (scan[1] == 0) + { + /* Trailing %. We don't like those. */ + error (1, 0, _("error: %s at end of format string"), scan); + } + else if (scan[1] == '%') + { + segmentp = make_segment (segmentp, format, scan - format + 1, + KIND_PLAIN, 0, 0, + our_pred); + scan++; + format = scan + 1; + continue; + } + /* Scan past flags, width and precision, to verify kind. */ + for (scan2 = scan; *++scan2 && strchr ("-+ #", *scan2);) + /* Do nothing. */ ; + while (ISDIGIT (*scan2)) + scan2++; + if (*scan2 == '.') + for (scan2++; ISDIGIT (*scan2); scan2++) + /* Do nothing. */ ; + if (strchr ("abcdDfFgGhHiklmMnpPsStuUyY", *scan2)) + { + segmentp = make_segment (segmentp, format, scan2 - format, + KIND_FORMAT, *scan2, 0, + our_pred); + scan = scan2; + format = scan + 1; + } + else if (strchr ("ABCT", *scan2) && scan2[1]) + { + segmentp = make_segment (segmentp, format, scan2 - format, + KIND_FORMAT, scan2[0], scan2[1], + our_pred); + scan = scan2 + 1; + format = scan + 1; + continue; + } + else + { + /* An unrecognized % escape. Print the char after the %. */ + error (0, 0, _("warning: unrecognized format directive `%%%c'"), + *scan2); + segmentp = make_segment (segmentp, format, scan - format, + KIND_PLAIN, 0, 0, + our_pred); + format = scan + 1; + continue; + } + } + } + + if (scan > format) + make_segment (segmentp, format, scan - format, KIND_PLAIN, 0, 0, + our_pred); + return true; +} + +/* Create a new fprintf segment in *SEGMENT, with type KIND, + from the text in FORMAT, which has length LEN. + Return the address of the `next' pointer of the new segment. */ + +static struct segment ** +make_segment (struct segment **segment, + char *format, + int len, + int kind, + char format_char, + char aux_format_char, + struct predicate *pred) +{ + enum EvaluationCost mycost = NeedsNothing; + char *fmt; + + *segment = xmalloc (sizeof (struct segment)); + + (*segment)->segkind = kind; + (*segment)->format_char[0] = format_char; + (*segment)->format_char[1] = aux_format_char; + (*segment)->next = NULL; + (*segment)->text_len = len; + + fmt = (*segment)->text = xmalloc (len + sizeof "d"); + strncpy (fmt, format, len); + fmt += len; + + switch (kind) + { + case KIND_PLAIN: /* Plain text string, no % conversion. */ + case KIND_STOP: /* Terminate argument, no newline. */ + assert (0 == format_char); + assert (0 == aux_format_char); + *fmt = '\0'; + if (mycost > pred->p_cost) + pred->p_cost = NeedsNothing; + return &(*segment)->next; + break; + } + + assert (kind == KIND_FORMAT); + switch (format_char) + { + case 'l': /* object of symlink */ + pred->need_stat = true; + mycost = NeedsLinkName; + *fmt++ = 's'; + break; + + case 'y': /* file type */ + pred->need_type = true; + mycost = NeedsType; + *fmt++ = 's'; + break; + + case 'a': /* atime in `ctime' format */ + case 'A': /* atime in user-specified strftime format */ + case 'B': /* birth time in user-specified strftime format */ + case 'c': /* ctime in `ctime' format */ + case 'C': /* ctime in user-specified strftime format */ + case 'F': /* file system type */ + case 'g': /* group name */ + case 'i': /* inode number */ + case 'M': /* mode in `ls -l' format (eg., "drwxr-xr-x") */ + case 's': /* size in bytes */ + case 't': /* mtime in `ctime' format */ + case 'T': /* mtime in user-specified strftime format */ + case 'u': /* user name */ + pred->need_stat = true; + mycost = NeedsStatInfo; + *fmt++ = 's'; + break; + + case 'S': /* sparseness */ + pred->need_stat = true; + mycost = NeedsStatInfo; + *fmt++ = 'g'; + break; + + case 'Y': /* symlink pointed file type */ + pred->need_stat = true; + mycost = NeedsType; /* true for amortised effect */ + *fmt++ = 's'; + break; + + case 'f': /* basename of path */ + case 'h': /* leading directories part of path */ + case 'p': /* pathname */ + case 'P': /* pathname with ARGV element stripped */ + *fmt++ = 's'; + break; + + case 'H': /* ARGV element file was found under */ + *fmt++ = 's'; + break; + + /* Numeric items that one might expect to honour + * #, 0, + flags but which do not. + */ + case 'G': /* GID number */ + case 'U': /* UID number */ + case 'b': /* size in 512-byte blocks (NOT birthtime in ctime fmt)*/ + case 'D': /* Filesystem device on which the file exits */ + case 'k': /* size in 1K blocks */ + case 'n': /* number of links */ + pred->need_stat = true; + mycost = NeedsStatInfo; + *fmt++ = 's'; + break; + + /* Numeric items that DO honour #, 0, + flags. + */ + case 'd': /* depth in search tree (0 = ARGV element) */ + *fmt++ = 'd'; + break; + + case 'm': /* mode as octal number (perms only) */ + *fmt++ = 'o'; + pred->need_stat = true; + mycost = NeedsStatInfo; + break; + + case '{': + case '[': + case '(': + error (1, 0, + _("error: the format directive `%%%c' is reserved for future use"), + (int)kind); + /*NOTREACHED*/ + break; + } + *fmt = '\0'; + + if (mycost > pred->p_cost) + pred->p_cost = mycost; + return &(*segment)->next; +} + +static void +check_path_safety(const char *action, char **argv) +{ + char *s; + const char *path = getenv("PATH"); + if (NULL == path) + { + /* $PATH is not set. Assume the OS default is safe. + * That may not be true on Windows, but I'm not aware + * of a way to get Windows to avoid searching the + * current directory anyway. + */ + return; + } + + (void)argv; + + s = next_element(path, 1); + while ((s = next_element ((char *) NULL, 1)) != NULL) + { + if (0 == strcmp(s, ".")) + { + error(1, 0, _("The current directory is included in the PATH " + "environment variable, which is insecure in " + "combination with the %s action of find. " + "Please remove the current directory from your " + "$PATH (that is, remove \".\" or leading or trailing " + "colons)"), + action); + } + else if ('/' != s[0]) + { + /* Relative paths are also dangerous in $PATH. */ + error(1, 0, _("The relative path %s is included in the PATH " + "environment variable, which is insecure in " + "combination with the %s action of find. " + "Please remove that entry from $PATH"), + safely_quote_err_filename(0, s), + action); + } + } +} + + +/* handles both exec and ok predicate */ +static boolean +new_insert_exec_ok (const char *action, + const struct parser_table *entry, + int dirfd, + char **argv, + int *arg_ptr) +{ + int start, end; /* Indexes in ARGV of start & end of cmd. */ + int i; /* Index into cmd args */ + int saw_braces; /* True if previous arg was '{}'. */ + boolean allow_plus; /* True if + is a valid terminator */ + int brace_count; /* Number of instances of {}. */ + PRED_FUNC func = entry->pred_func; + enum BC_INIT_STATUS bcstatus; + + struct predicate *our_pred; + struct exec_val *execp; /* Pointer for efficiency. */ + + if ((argv == NULL) || (argv[*arg_ptr] == NULL)) + return false; + + our_pred = insert_primary_withpred (entry, func); + our_pred->side_effects = our_pred->no_default_print = true; + our_pred->need_type = our_pred->need_stat = false; + + execp = &our_pred->args.exec_vec; + + if ((func != pred_okdir) && (func != pred_ok)) + { + allow_plus = true; + execp->close_stdin = false; + } + else + { + allow_plus = false; + /* If find reads stdin (i.e. for -ok and similar), close stdin + * in the child to prevent some script from consiming the output + * intended for find. + */ + execp->close_stdin = true; + } + + + if ((func == pred_execdir) || (func == pred_okdir)) + { + options.ignore_readdir_race = false; + check_path_safety(action, argv); + execp->use_current_dir = true; + } + else + { + execp->use_current_dir = false; + } + + our_pred->args.exec_vec.multiple = 0; + + /* Count the number of args with path replacements, up until the ';'. + * Also figure out if the command is terminated by ";" or by "+". + */ + start = *arg_ptr; + for (end = start, saw_braces=0, brace_count=0; + (argv[end] != NULL) + && ((argv[end][0] != ';') || (argv[end][1] != '\0')); + end++) + { + /* For -exec and -execdir, "{} +" can terminate the command. */ + if ( allow_plus + && argv[end][0] == '+' && argv[end][1] == 0 + && saw_braces) + { + our_pred->args.exec_vec.multiple = 1; + break; + } + + saw_braces = 0; + if (mbsstr (argv[end], "{}")) + { + saw_braces = 1; + ++brace_count; + + if (0 == end && (func == pred_execdir || func == pred_okdir)) + { + /* The POSIX standard says that {} replacement should + * occur even in the utility name. This is insecure + * since it means we will be executing a command whose + * name is chosen according to whatever find finds in + * the file system. That can be influenced by an + * attacker. Hence for -execdir and -okdir this is not + * allowed. We can specify this as those options are + * not defined by POSIX. + */ + error(1, 0, _("You may not use {} within the utility name for " + "-execdir and -okdir, because this is a potential " + "security problem.")); + } + } + } + + /* Fail if no command given or no semicolon found. */ + if ((end == start) || (argv[end] == NULL)) + { + *arg_ptr = end; + free(our_pred); + return false; + } + + if (our_pred->args.exec_vec.multiple && brace_count > 1) + { + + const char *suffix; + if (func == pred_execdir) + suffix = "dir"; + else + suffix = ""; + + error(1, 0, + _("Only one instance of {} is supported with -exec%s ... +"), + suffix); + } + + /* We use a switch statement here so that the compiler warns us when + * we forget to handle a newly invented enum value. + * + * Like xargs, we allow 2KiB of headroom for the launched utility to + * export its own environment variables before calling something + * else. + */ + bcstatus = bc_init_controlinfo(&execp->ctl, 2048u); + switch (bcstatus) + { + case BC_INIT_ENV_TOO_BIG: + case BC_INIT_CANNOT_ACCOMODATE_HEADROOM: + error(1, 0, + _("The environment is too large for exec().")); + break; + case BC_INIT_OK: + /* Good news. Carry on. */ + break; + } + bc_use_sensible_arg_max(&execp->ctl); + + + execp->ctl.exec_callback = launch; + + if (our_pred->args.exec_vec.multiple) + { + /* "+" terminator, so we can just append our arguments after the + * command and initial arguments. + */ + execp->replace_vec = NULL; + execp->ctl.replace_pat = NULL; + execp->ctl.rplen = 0; + execp->ctl.lines_per_exec = 0; /* no limit */ + execp->ctl.args_per_exec = 0; /* no limit */ + + /* remember how many arguments there are */ + execp->ctl.initial_argc = (end-start) - 1; + + /* execp->state = xmalloc(sizeof struct buildcmd_state); */ + bc_init_state(&execp->ctl, &execp->state, execp); + + /* Gather the initial arguments. Skip the {}. */ + for (i=start; ictl, &execp->state, + argv[i], strlen(argv[i])+1, + NULL, 0, + 1); + } + } + else + { + /* Semicolon terminator - more than one {} is supported, so we + * have to do brace-replacement. + */ + execp->num_args = end - start; + + execp->ctl.replace_pat = "{}"; + execp->ctl.rplen = strlen(execp->ctl.replace_pat); + execp->ctl.lines_per_exec = 0; /* no limit */ + execp->ctl.args_per_exec = 0; /* no limit */ + execp->replace_vec = xmalloc(sizeof(char*)*execp->num_args); + + + /* execp->state = xmalloc(sizeof(*(execp->state))); */ + bc_init_state(&execp->ctl, &execp->state, execp); + + /* Remember the (pre-replacement) arguments for later. */ + for (i=0; inum_args; ++i) + { + execp->replace_vec[i] = argv[i+start]; + } + } + + if (argv[end] == NULL) + *arg_ptr = end; + else + *arg_ptr = end + 1; + + return true; +} + + + +static boolean +insert_exec_ok (const char *action, + const struct parser_table *entry, + int dirfd, + char **argv, + int *arg_ptr) +{ + return new_insert_exec_ok(action, entry, dirfd, argv, arg_ptr); +} + + + +/* Get a timestamp and comparison type. + + STR is the ASCII representation. + Set *NUM_DAYS to the number of days/minutes/whatever, taken as being + relative to ORIGIN (usually the current moment or midnight). + Thus the sense of the comparison type appears to be reversed. + Set *COMP_TYPE to the kind of comparison that is requested. + Issue OVERFLOWMESSAGE if overflow occurs. + Return true if all okay, false if input error. + + Used by -atime, -ctime and -mtime (parsers) to + get the appropriate information for a time predicate processor. */ + +static boolean +get_relative_timestamp (const char *str, + struct time_val *result, + time_t origin, + double sec_per_unit, + const char *overflowmessage) +{ + uintmax_t checkval; + double offset, seconds, f; + + if (get_comp_type(&str, &result->kind)) + { + /* Invert the sense of the comparison */ + switch (result->kind) + { + case COMP_LT: result->kind = COMP_GT; break; + case COMP_GT: result->kind = COMP_LT; break; + default: break; + } + + /* Convert the ASCII number into floating-point. */ + if (xstrtod(str, NULL, &offset, strtod)) + { + /* Separate the floating point number the user specified + * (which is a number of days, or minutes, etc) into an + * integral number of seconds (SECONDS) and a fraction (F). + */ + f = modf(offset * sec_per_unit, &seconds); + + result->ts.tv_sec = origin - seconds; + result->ts.tv_nsec = fabs(f * 1e9); + + /* Check for overflow. */ + checkval = (uintmax_t)origin - seconds; + if (checkval != result->ts.tv_sec) + { + /* an overflow has occurred. */ + error (1, 0, overflowmessage, str); + } + return true; + } + else + { + /* Conversion from ASCII to double failed. */ + return false; + } + } + else + { + return false; + } +} + +/* Insert a time predicate based on the information in ENTRY. + ARGV is a pointer to the argument array. + ARG_PTR is a pointer to an index into the array, incremented if + all went well. + + Return true if input is valid, false if not. + + A new predicate node is assigned, along with an argument node + obtained with malloc. + + Used by -atime, -ctime, and -mtime parsers. */ + +static boolean +parse_time (const struct parser_table* entry, char *argv[], int *arg_ptr) +{ + struct predicate *our_pred; + struct time_val tval; + enum comparison_type comp; + const char *timearg, *orig_timearg; + const char *errmsg = "arithmetic overflow while converting %s " + "days to a number of seconds"; + time_t origin; + + if (!collect_arg(argv, arg_ptr, &timearg)) + return false; + orig_timearg = timearg; + + /* Decide the origin by previewing the comparison type. */ + origin = options.cur_day_start; + + if (get_comp_type(&timearg, &comp)) + { + /* Remember, we invert the sense of the comparison, so this tests + * against COMP_LT instead of COMP_GT... + */ + if (COMP_LT == comp) + { + uintmax_t expected = origin + (DAYSECS-1); + origin += (DAYSECS-1); + if (origin != expected) + { + error(1, 0, + _("arithmetic overflow when trying to calculate the end of today")); + } + } + } + /* We discard the value of comp here, as get_relative_timestamp + * will set tval.kind. For that to work, we have to restore + * timearg so that it points to the +/- prefix, if any. get_comp_type() + * will have advanced timearg, so we restore it. + */ + timearg = orig_timearg; + + if (!get_relative_timestamp(timearg, &tval, origin, DAYSECS, errmsg)) + return false; + + our_pred = insert_primary (entry); + our_pred->args.reftime = tval; + our_pred->est_success_rate = estimate_timestamp_success_rate(tval.ts.tv_sec); + + if (options.debug_options & DebugExpressionTree) + { + time_t t; + + fprintf (stderr, "inserting %s\n", our_pred->p_name); + fprintf (stderr, " type: %s %s ", + (tval.kind == COMP_GT) ? "gt" : + ((tval.kind == COMP_LT) ? "lt" : ((tval.kind == COMP_EQ) ? "eq" : "?")), + (tval.kind == COMP_GT) ? " >" : + ((tval.kind == COMP_LT) ? " <" : ((tval.kind == COMP_EQ) ? ">=" : " ?"))); + t = our_pred->args.reftime.ts.tv_sec; + fprintf (stderr, "%ju %s", + (uintmax_t) our_pred->args.reftime.ts.tv_sec, + ctime (&t)); + if (tval.kind == COMP_EQ) + { + t = our_pred->args.reftime.ts.tv_sec + DAYSECS; + fprintf (stderr, " < %ju %s", + (uintmax_t) t, ctime (&t)); + } + } + + return true; +} + +/* Get the comparison type prefix (if any) from a number argument. + The prefix is at *STR. + Set *COMP_TYPE to the kind of comparison that is requested. + Advance *STR beyond any initial comparison prefix. + + Return true if all okay, false if input error. */ +static boolean +get_comp_type(const char **str, enum comparison_type *comp_type) +{ + switch (**str) + { + case '+': + *comp_type = COMP_GT; + (*str)++; + break; + case '-': + *comp_type = COMP_LT; + (*str)++; + break; + default: + *comp_type = COMP_EQ; + break; + } + return true; +} + + + + + +/* Get a number with comparison information. + The sense of the comparison information is 'normal'; that is, + '+' looks for a count > than the number and '-' less than. + + STR is the ASCII representation of the number. + Set *NUM to the number. + Set *COMP_TYPE to the kind of comparison that is requested. + + Return true if all okay, false if input error. */ + +static boolean +get_num (const char *str, + uintmax_t *num, + enum comparison_type *comp_type) +{ + char *pend; + + if (str == NULL) + return false; + + /* Figure out the comparison type if the caller accepts one. */ + if (comp_type) + { + if (!get_comp_type(&str, comp_type)) + return false; + } + + return xstrtoumax (str, &pend, 10, num, "") == LONGINT_OK; +} + +/* Insert a number predicate. + ARGV is a pointer to the argument array. + *ARG_PTR is an index into ARGV, incremented if all went well. + *PRED is the predicate processor to insert. + + Return true if input is valid, false if error. + + A new predicate node is assigned, along with an argument node + obtained with malloc. + + Used by -inum and -links parsers. */ + +static struct predicate * +insert_num (char **argv, int *arg_ptr, const struct parser_table *entry) +{ + const char *numstr; + + if (collect_arg(argv, arg_ptr, &numstr)) + { + uintmax_t num; + enum comparison_type c_type; + + if (get_num (numstr, &num, &c_type)) + { + struct predicate *our_pred = insert_primary (entry); + our_pred->args.numinfo.kind = c_type; + our_pred->args.numinfo.l_val = num; + + if (options.debug_options & DebugExpressionTree) + { + fprintf (stderr, "inserting %s\n", our_pred->p_name); + fprintf (stderr, " type: %s %s ", + (c_type == COMP_GT) ? "gt" : + ((c_type == COMP_LT) ? "lt" : ((c_type == COMP_EQ) ? "eq" : "?")), + (c_type == COMP_GT) ? " >" : + ((c_type == COMP_LT) ? " <" : ((c_type == COMP_EQ) ? " =" : " ?"))); + fprintf (stderr, "%ju\n", our_pred->args.numinfo.l_val); + } + return our_pred; + } + } + return NULL; +} + +static void +open_output_file (const char *path, struct format_val *p) +{ + p->segment = NULL; + p->quote_opts = clone_quoting_options (NULL); + + if (!strcmp (path, "/dev/stderr")) + { + p->stream = stderr; + p->filename = _("standard error"); + } + else if (!strcmp (path, "/dev/stdout")) + { + p->stream = stdout; + p->filename = _("standard output"); + } + else + { + p->stream = fopen_safer (path, "w"); + p->filename = path; + + if (p->stream == NULL) + { + fatal_file_error(path); + } + } + + p->dest_is_tty = stream_is_tty(p->stream); +} + +static void +open_stdout (struct format_val *p) +{ + open_output_file("/dev/stdout", p); +} diff --git a/find/pred.c b/find/pred.c new file mode 100644 index 0000000..730a876 --- /dev/null +++ b/find/pred.c @@ -0,0 +1,2382 @@ +/* pred.c -- execute the expression tree. + Copyright (C) 1990, 1991, 1992, 1993, 1994, 2000, 2003, + 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include +#include "defs.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "xalloc.h" +#include "dirname.h" +#include "human.h" +#include "modetype.h" +#include "filemode.h" +#include "wait.h" +#include "printquoted.h" +#include "buildcmd.h" +#include "yesno.h" +#include "listfile.h" +#include "stat-time.h" +#include "dircallback.h" +#include "error.h" +#include "verify.h" + +#if ENABLE_NLS +# include +# define _(Text) gettext (Text) +#else +# define _(Text) Text +#endif +#ifdef gettext_noop +# define N_(String) gettext_noop (String) +#else +/* See locate.c for explanation as to why not use (String) */ +# define N_(String) String +#endif + +#if !defined(SIGCHLD) && defined(SIGCLD) +#define SIGCHLD SIGCLD +#endif + + + +#if HAVE_DIRENT_H +# include +# define NAMLEN(dirent) strlen((dirent)->d_name) +#else +# define dirent direct +# define NAMLEN(dirent) (dirent)->d_namlen +# if HAVE_SYS_NDIR_H +# include +# endif +# if HAVE_SYS_DIR_H +# include +# endif +# if HAVE_NDIR_H +# include +# endif +#endif + +#ifdef CLOSEDIR_VOID +/* Fake a return value. */ +#define CLOSEDIR(d) (closedir (d), 0) +#else +#define CLOSEDIR(d) closedir (d) +#endif + + + + +/* Get or fake the disk device blocksize. + Usually defined by sys/param.h (if at all). */ +#ifndef DEV_BSIZE +# ifdef BSIZE +# define DEV_BSIZE BSIZE +# else /* !BSIZE */ +# define DEV_BSIZE 4096 +# endif /* !BSIZE */ +#endif /* !DEV_BSIZE */ + +/* Extract or fake data from a `struct stat'. + ST_BLKSIZE: Preferred I/O blocksize for the file, in bytes. + ST_NBLOCKS: Number of blocks in the file, including indirect blocks. + ST_NBLOCKSIZE: Size of blocks used when calculating ST_NBLOCKS. */ +#ifndef HAVE_STRUCT_STAT_ST_BLOCKS +# define ST_BLKSIZE(statbuf) DEV_BSIZE +# if defined _POSIX_SOURCE || !defined BSIZE /* fileblocks.c uses BSIZE. */ +# define ST_NBLOCKS(statbuf) \ + (S_ISREG ((statbuf).st_mode) \ + || S_ISDIR ((statbuf).st_mode) \ + ? (statbuf).st_size / ST_NBLOCKSIZE + ((statbuf).st_size % ST_NBLOCKSIZE != 0) : 0) +# else /* !_POSIX_SOURCE && BSIZE */ +# define ST_NBLOCKS(statbuf) \ + (S_ISREG ((statbuf).st_mode) \ + || S_ISDIR ((statbuf).st_mode) \ + ? st_blocks ((statbuf).st_size) : 0) +# endif /* !_POSIX_SOURCE && BSIZE */ +#else /* HAVE_STRUCT_STAT_ST_BLOCKS */ +/* Some systems, like Sequents, return st_blksize of 0 on pipes. */ +# define ST_BLKSIZE(statbuf) ((statbuf).st_blksize > 0 \ + ? (statbuf).st_blksize : DEV_BSIZE) +# if defined hpux || defined __hpux__ || defined __hpux +/* HP-UX counts st_blocks in 1024-byte units. + This loses when mixing HP-UX and BSD file systems with NFS. */ +# define ST_NBLOCKSIZE 1024 +# else /* !hpux */ +# if defined _AIX && defined _I386 +/* AIX PS/2 counts st_blocks in 4K units. */ +# define ST_NBLOCKSIZE (4 * 1024) +# else /* not AIX PS/2 */ +# if defined _CRAY +# define ST_NBLOCKS(statbuf) \ + (S_ISREG ((statbuf).st_mode) \ + || S_ISDIR ((statbuf).st_mode) \ + ? (statbuf).st_blocks * ST_BLKSIZE(statbuf)/ST_NBLOCKSIZE : 0) +# endif /* _CRAY */ +# endif /* not AIX PS/2 */ +# endif /* !hpux */ +#endif /* HAVE_STRUCT_STAT_ST_BLOCKS */ + +#ifndef ST_NBLOCKS +# define ST_NBLOCKS(statbuf) \ + (S_ISREG ((statbuf).st_mode) \ + || S_ISDIR ((statbuf).st_mode) \ + ? (statbuf).st_blocks : 0) +#endif + +#ifndef ST_NBLOCKSIZE +# define ST_NBLOCKSIZE 512 +#endif + + +#undef MAX +#define MAX(a, b) ((a) > (b) ? (a) : (b)) + +static boolean match_lname PARAMS((const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr, boolean ignore_case)); + +static char *format_date PARAMS((struct timespec ts, int kind)); +static char *ctime_format PARAMS((struct timespec ts)); + +#ifdef DEBUG +struct pred_assoc +{ + PRED_FUNC pred_func; + char *pred_name; +}; + +struct pred_assoc pred_table[] = +{ + {pred_amin, "amin "}, + {pred_and, "and "}, + {pred_anewer, "anewer "}, + {pred_atime, "atime "}, + {pred_closeparen, ") "}, + {pred_cmin, "cmin "}, + {pred_cnewer, "cnewer "}, + {pred_comma, ", "}, + {pred_ctime, "ctime "}, + {pred_delete, "delete "}, + {pred_empty, "empty "}, + {pred_exec, "exec "}, + {pred_execdir, "execdir "}, + {pred_executable, "executable "}, + {pred_false, "false "}, + {pred_fprint, "fprint "}, + {pred_fprint0, "fprint0 "}, + {pred_fprintf, "fprintf "}, + {pred_fstype, "fstype "}, + {pred_gid, "gid "}, + {pred_group, "group "}, + {pred_ilname, "ilname "}, + {pred_iname, "iname "}, + {pred_inum, "inum "}, + {pred_ipath, "ipath "}, + {pred_links, "links "}, + {pred_lname, "lname "}, + {pred_ls, "ls "}, + {pred_mmin, "mmin "}, + {pred_mtime, "mtime "}, + {pred_name, "name "}, + {pred_negate, "not "}, + {pred_newer, "newer "}, + {pred_newerXY, "newerXY "}, + {pred_nogroup, "nogroup "}, + {pred_nouser, "nouser "}, + {pred_ok, "ok "}, + {pred_okdir, "okdir "}, + {pred_openparen, "( "}, + {pred_or, "or "}, + {pred_path, "path "}, + {pred_perm, "perm "}, + {pred_print, "print "}, + {pred_print0, "print0 "}, + {pred_prune, "prune "}, + {pred_quit, "quit "}, + {pred_readable, "readable "}, + {pred_regex, "regex "}, + {pred_samefile,"samefile "}, + {pred_size, "size "}, + {pred_true, "true "}, + {pred_type, "type "}, + {pred_uid, "uid "}, + {pred_used, "used "}, + {pred_user, "user "}, + {pred_writable, "writable "}, + {pred_xtype, "xtype "}, + {0, "none "} +}; +#endif + +/* Returns ts1 - ts2 */ +static double ts_difference(struct timespec ts1, + struct timespec ts2) +{ + double d = difftime(ts1.tv_sec, ts2.tv_sec) + + (1.0e-9 * (ts1.tv_nsec - ts2.tv_nsec)); + return d; +} + + +static int +compare_ts(struct timespec ts1, + struct timespec ts2) +{ + if ((ts1.tv_sec == ts2.tv_sec) && + (ts1.tv_nsec == ts2.tv_nsec)) + { + return 0; + } + else + { + double diff = ts_difference(ts1, ts2); + return diff < 0.0 ? -1 : +1; + } +} + +/* Predicate processing routines. + + PATHNAME is the full pathname of the file being checked. + *STAT_BUF contains information about PATHNAME. + *PRED_PTR contains information for applying the predicate. + + Return true if the file passes this predicate, false if not. */ + + +/* pred_timewindow + * + * Returns true if THE_TIME is + * COMP_GT: after the specified time + * COMP_LT: before the specified time + * COMP_EQ: less than WINDOW seconds after the specified time. + */ +static boolean +pred_timewindow(struct timespec ts, struct predicate const *pred_ptr, int window) +{ + switch (pred_ptr->args.reftime.kind) + { + case COMP_GT: + return compare_ts(ts, pred_ptr->args.reftime.ts) > 0; + + case COMP_LT: + return compare_ts(ts, pred_ptr->args.reftime.ts) < 0; + + case COMP_EQ: + { + double delta = ts_difference(ts, pred_ptr->args.reftime.ts); + return (delta >= 0.0 && delta < window); + } + } + assert (0); + abort (); +} + + +boolean +pred_amin (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) &pathname; + return pred_timewindow(get_stat_atime(stat_buf), pred_ptr, 60); +} + +boolean +pred_and (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + if (pred_ptr->pred_left == NULL + || apply_predicate(pathname, stat_buf, pred_ptr->pred_left)) + { + return apply_predicate(pathname, stat_buf, pred_ptr->pred_right); + } + else + return false; +} + +boolean +pred_anewer (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) &pathname; + assert (COMP_GT == pred_ptr->args.reftime.kind); + return compare_ts(get_stat_atime(stat_buf), pred_ptr->args.reftime.ts) > 0; +} + +boolean +pred_atime (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) &pathname; + return pred_timewindow(get_stat_atime(stat_buf), pred_ptr, DAYSECS); +} + +boolean +pred_closeparen (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) &pathname; + (void) &stat_buf; + (void) &pred_ptr; + + return true; +} + +boolean +pred_cmin (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + return pred_timewindow(get_stat_ctime(stat_buf), pred_ptr, 60); +} + +boolean +pred_cnewer (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + + assert (COMP_GT == pred_ptr->args.reftime.kind); + return compare_ts(get_stat_ctime(stat_buf), pred_ptr->args.reftime.ts) > 0; +} + +boolean +pred_comma (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + if (pred_ptr->pred_left != NULL) + { + apply_predicate(pathname, stat_buf,pred_ptr->pred_left); + } + return apply_predicate(pathname, stat_buf, pred_ptr->pred_right); +} + +boolean +pred_ctime (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) &pathname; + return pred_timewindow(get_stat_ctime(stat_buf), pred_ptr, DAYSECS); +} + +static boolean +perform_delete(int flags) +{ + return 0 == unlinkat(state.cwd_dir_fd, state.rel_pathname, flags); +} + + +boolean +pred_delete (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pred_ptr; + (void) stat_buf; + if (strcmp (state.rel_pathname, ".")) + { + int flags=0; + if (state.have_stat && S_ISDIR(stat_buf->st_mode)) + flags |= AT_REMOVEDIR; + if (perform_delete(flags)) + { + return true; + } + else + { + if (EISDIR == errno) + { + if ((flags & AT_REMOVEDIR) == 0) + { + /* unlink() operation failed because we should have done rmdir(). */ + flags |= AT_REMOVEDIR; + if (perform_delete(flags)) + return true; + } + } + } + error (0, errno, _("cannot delete %s"), + safely_quote_err_filename(0, pathname)); + return false; + } + else + { + /* nothing to do. */ + return true; + } +} + +boolean +pred_empty (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + (void) pred_ptr; + + if (S_ISDIR (stat_buf->st_mode)) + { + int fd; + DIR *d; + struct dirent *dp; + boolean empty = true; + + errno = 0; + if ((fd = openat(state.cwd_dir_fd, state.rel_pathname, O_RDONLY +#if defined O_LARGEFILE + |O_LARGEFILE +#endif + )) < 0) + { + error (0, errno, "%s", safely_quote_err_filename(0, pathname)); + state.exit_status = 1; + return false; + } + d = fdopendir (fd); + if (d == NULL) + { + error (0, errno, "%s", safely_quote_err_filename(0, pathname)); + state.exit_status = 1; + return false; + } + for (dp = readdir (d); dp; dp = readdir (d)) + { + if (dp->d_name[0] != '.' + || (dp->d_name[1] != '\0' + && (dp->d_name[1] != '.' || dp->d_name[2] != '\0'))) + { + empty = false; + break; + } + } + if (CLOSEDIR (d)) + { + error (0, errno, "%s", safely_quote_err_filename(0, pathname)); + state.exit_status = 1; + return false; + } + return (empty); + } + else if (S_ISREG (stat_buf->st_mode)) + return (stat_buf->st_size == 0); + else + return (false); +} + +static boolean +new_impl_pred_exec (int dirfd, const char *pathname, + struct stat *stat_buf, + struct predicate *pred_ptr, + const char *prefix, size_t pfxlen) +{ + struct exec_val *execp = &pred_ptr->args.exec_vec; + size_t len = strlen(pathname); + + (void) stat_buf; + execp->dirfd = dirfd; + if (execp->multiple) + { + /* Push the argument onto the current list. + * The command may or may not be run at this point, + * depending on the command line length limits. + */ + bc_push_arg(&execp->ctl, + &execp->state, + pathname, len+1, + prefix, pfxlen, + 0); + + /* remember that there are pending execdirs. */ + state.execdirs_outstanding = true; + + /* POSIX: If the primary expression is punctuated by a plus + * sign, the primary shall always evaluate as true + */ + return true; + } + else + { + int i; + + for (i=0; inum_args; ++i) + { + bc_do_insert(&execp->ctl, + &execp->state, + execp->replace_vec[i], + strlen(execp->replace_vec[i]), + prefix, pfxlen, + pathname, len, + 0); + } + + /* Actually invoke the command. */ + return execp->ctl.exec_callback(&execp->ctl, + &execp->state); + } +} + + +boolean +pred_exec (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + return new_impl_pred_exec(get_start_dirfd(), + pathname, stat_buf, pred_ptr, NULL, 0); +} + +boolean +pred_execdir (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + const char *prefix = (state.rel_pathname[0] == '/') ? NULL : "./"; + (void) &pathname; + return new_impl_pred_exec (get_current_dirfd(), + state.rel_pathname, stat_buf, pred_ptr, + prefix, (prefix ? 2 : 0)); +} + +boolean +pred_false (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) &pathname; + (void) &stat_buf; + (void) &pred_ptr; + + + return (false); +} + +boolean +pred_fls (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + FILE * stream = pred_ptr->args.printf_vec.stream; + list_file (pathname, state.cwd_dir_fd, state.rel_pathname, stat_buf, + options.start_time.tv_sec, + options.output_block_size, + pred_ptr->literal_control_chars, stream); + return true; +} + +boolean +pred_fprint (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) &pathname; + (void) &stat_buf; + + print_quoted(pred_ptr->args.printf_vec.stream, + pred_ptr->args.printf_vec.quote_opts, + pred_ptr->args.printf_vec.dest_is_tty, + "%s\n", + pathname); + return true; +} + +boolean +pred_fprint0 (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + FILE * fp = pred_ptr->args.printf_vec.stream; + + (void) &stat_buf; + + fputs (pathname, fp); + putc (0, fp); + return true; +} + + + +static char* +mode_to_filetype(mode_t m) +{ +#define HANDLE_TYPE(t,letter) if (m==t) { return letter; } +#ifdef S_IFREG + HANDLE_TYPE(S_IFREG, "f"); /* regular file */ +#endif +#ifdef S_IFDIR + HANDLE_TYPE(S_IFDIR, "d"); /* directory */ +#endif +#ifdef S_IFLNK + HANDLE_TYPE(S_IFLNK, "l"); /* symbolic link */ +#endif +#ifdef S_IFSOCK + HANDLE_TYPE(S_IFSOCK, "s"); /* Unix domain socket */ +#endif +#ifdef S_IFBLK + HANDLE_TYPE(S_IFBLK, "b"); /* block device */ +#endif +#ifdef S_IFCHR + HANDLE_TYPE(S_IFCHR, "c"); /* character device */ +#endif +#ifdef S_IFIFO + HANDLE_TYPE(S_IFIFO, "p"); /* FIFO */ +#endif +#ifdef S_IFDOOR + HANDLE_TYPE(S_IFDOOR, "D"); /* Door (e.g. on Solaris) */ +#endif + return "U"; /* Unknown */ +} + +static double +file_sparseness(const struct stat *p) +{ +#if defined HAVE_STRUCT_STAT_ST_BLOCKS + if (0 == p->st_size) + { + if (0 == p->st_blocks) + return 1.0; + else + return p->st_blocks < 0 ? -HUGE_VAL : HUGE_VAL; + } + else + { + double blklen = file_blocksize(p) * (double)p->st_blocks; + return blklen / p->st_size; + } +#else + return 1.0; +#endif +} + + + +static void +checked_fprintf(struct format_val *dest, const char *fmt, ...) +{ + int rv; + va_list ap; + + va_start(ap, fmt); + rv = vfprintf(dest->stream, fmt, ap); + if (rv < 0) + nonfatal_file_error(dest->filename); +} + + +static void +checked_print_quoted (struct format_val *dest, + const char *format, const char *s) +{ + int rv = print_quoted(dest->stream, dest->quote_opts, dest->dest_is_tty, + format, s); + if (rv < 0) + nonfatal_file_error(dest->filename); +} + + +static void +checked_fwrite(void *p, size_t siz, size_t nmemb, struct format_val *dest) +{ + int items_written = fwrite(p, siz, nmemb, dest->stream); + if (items_written < nmemb) + nonfatal_file_error(dest->filename); +} + +static void +checked_fflush(struct format_val *dest) +{ + if (0 != fflush(dest->stream)) + { + nonfatal_file_error(dest->filename); + } +} + +static void +do_fprintf(struct format_val *dest, + struct segment *segment, + const char *pathname, + const struct stat *stat_buf) +{ + char hbuf[LONGEST_HUMAN_READABLE + 1]; + const char *cp; + + switch (segment->segkind) + { + case KIND_PLAIN: /* Plain text string (no % conversion). */ + /* trusted */ + checked_fwrite(segment->text, 1, segment->text_len, dest); + break; + + case KIND_STOP: /* Terminate argument and flush output. */ + /* trusted */ + checked_fwrite(segment->text, 1, segment->text_len, dest); + checked_fflush(dest); + break; + + case KIND_FORMAT: + switch (segment->format_char[0]) + { + case 'a': /* atime in `ctime' format. */ + /* UNTRUSTED, probably unexploitable */ + checked_fprintf (dest, segment->text, ctime_format (get_stat_atime(stat_buf))); + break; + case 'b': /* size in 512-byte blocks */ + /* UNTRUSTED, probably unexploitable */ + checked_fprintf (dest, segment->text, + human_readable ((uintmax_t) ST_NBLOCKS (*stat_buf), + hbuf, human_ceiling, + ST_NBLOCKSIZE, 512)); + break; + case 'c': /* ctime in `ctime' format */ + /* UNTRUSTED, probably unexploitable */ + checked_fprintf (dest, segment->text, ctime_format (get_stat_ctime(stat_buf))); + break; + case 'd': /* depth in search tree */ + /* UNTRUSTED, probably unexploitable */ + checked_fprintf (dest, segment->text, state.curdepth); + break; + case 'D': /* Device on which file exists (stat.st_dev) */ + /* trusted */ + checked_fprintf (dest, segment->text, + human_readable ((uintmax_t) stat_buf->st_dev, hbuf, + human_ceiling, 1, 1)); + break; + case 'f': /* base name of path */ + /* sanitised */ + { + char *base = base_name (pathname); + checked_print_quoted (dest, segment->text, base); + free (base); + } + break; + case 'F': /* file system type */ + /* trusted */ + checked_print_quoted (dest, segment->text, filesystem_type (stat_buf, pathname)); + break; + case 'g': /* group name */ + /* trusted */ + /* (well, the actual group is selected by the user but + * its name was selected by the system administrator) + */ + { + struct group *g; + + g = getgrgid (stat_buf->st_gid); + if (g) + { + segment->text[segment->text_len] = 's'; + checked_fprintf (dest, segment->text, g->gr_name); + break; + } + else + { + /* Do nothing. */ + /*FALLTHROUGH*/ + } + } + /*FALLTHROUGH*/ /*...sometimes, so 'G' case.*/ + + case 'G': /* GID number */ + /* UNTRUSTED, probably unexploitable */ + checked_fprintf (dest, segment->text, + human_readable ((uintmax_t) stat_buf->st_gid, hbuf, + human_ceiling, 1, 1)); + break; + case 'h': /* leading directories part of path */ + /* sanitised */ + { + cp = strrchr (pathname, '/'); + if (cp == NULL) /* No leading directories. */ + { + /* If there is no slash in the pathname, we still + * print the string because it contains characters + * other than just '%s'. The %h expands to ".". + */ + checked_print_quoted (dest, segment->text, "."); + } + else + { + char *s = strdup(pathname); + s[cp - pathname] = 0; + checked_print_quoted (dest, segment->text, s); + free(s); + } + } + break; + + case 'H': /* ARGV element file was found under */ + /* trusted */ + { + char *s = xmalloc(state.starting_path_length+1); + memcpy(s, pathname, state.starting_path_length); + s[state.starting_path_length] = 0; + checked_fprintf (dest, segment->text, s); + free(s); + } + break; + + case 'i': /* inode number */ + /* UNTRUSTED, but not exploitable I think */ + checked_fprintf (dest, segment->text, + human_readable ((uintmax_t) stat_buf->st_ino, hbuf, + human_ceiling, + 1, 1)); + break; + case 'k': /* size in 1K blocks */ + /* UNTRUSTED, but not exploitable I think */ + checked_fprintf (dest, segment->text, + human_readable ((uintmax_t) ST_NBLOCKS (*stat_buf), + hbuf, human_ceiling, + ST_NBLOCKSIZE, 1024)); + break; + case 'l': /* object of symlink */ + /* sanitised */ +#ifdef S_ISLNK + { + char *linkname = 0; + + if (S_ISLNK (stat_buf->st_mode)) + { + linkname = get_link_name_at (pathname, state.cwd_dir_fd, state.rel_pathname); + if (linkname == 0) + state.exit_status = 1; + } + if (linkname) + { + checked_print_quoted (dest, segment->text, linkname); + free (linkname); + } + else + { + /* We still need to honour the field width etc., so this is + * not a no-op. + */ + checked_print_quoted (dest, segment->text, ""); + } + } +#endif /* S_ISLNK */ + break; + + case 'M': /* mode as 10 chars (eg., "-rwxr-x--x" */ + /* UNTRUSTED, probably unexploitable */ + { + char modestring[16] ; + filemodestring (stat_buf, modestring); + modestring[10] = '\0'; + checked_fprintf (dest, segment->text, modestring); + } + break; + + case 'm': /* mode as octal number (perms only) */ + /* UNTRUSTED, probably unexploitable */ + { + /* Output the mode portably using the traditional numbers, + even if the host unwisely uses some other numbering + scheme. But help the compiler in the common case where + the host uses the traditional numbering scheme. */ + mode_t m = stat_buf->st_mode; + boolean traditional_numbering_scheme = + (S_ISUID == 04000 && S_ISGID == 02000 && S_ISVTX == 01000 + && S_IRUSR == 00400 && S_IWUSR == 00200 && S_IXUSR == 00100 + && S_IRGRP == 00040 && S_IWGRP == 00020 && S_IXGRP == 00010 + && S_IROTH == 00004 && S_IWOTH == 00002 && S_IXOTH == 00001); + checked_fprintf (dest, segment->text, + (traditional_numbering_scheme + ? m & MODE_ALL + : ((m & S_ISUID ? 04000 : 0) + | (m & S_ISGID ? 02000 : 0) + | (m & S_ISVTX ? 01000 : 0) + | (m & S_IRUSR ? 00400 : 0) + | (m & S_IWUSR ? 00200 : 0) + | (m & S_IXUSR ? 00100 : 0) + | (m & S_IRGRP ? 00040 : 0) + | (m & S_IWGRP ? 00020 : 0) + | (m & S_IXGRP ? 00010 : 0) + | (m & S_IROTH ? 00004 : 0) + | (m & S_IWOTH ? 00002 : 0) + | (m & S_IXOTH ? 00001 : 0)))); + } + break; + + case 'n': /* number of links */ + /* UNTRUSTED, probably unexploitable */ + checked_fprintf (dest, segment->text, + human_readable ((uintmax_t) stat_buf->st_nlink, + hbuf, + human_ceiling, + 1, 1)); + break; + + case 'p': /* pathname */ + /* sanitised */ + checked_print_quoted (dest, segment->text, pathname); + break; + + case 'P': /* pathname with ARGV element stripped */ + /* sanitised */ + if (state.curdepth > 0) + { + cp = pathname + state.starting_path_length; + if (*cp == '/') + /* Move past the slash between the ARGV element + and the rest of the pathname. But if the ARGV element + ends in a slash, we didn't add another, so we've + already skipped past it. */ + cp++; + } + else + { + cp = ""; + } + checked_print_quoted (dest, segment->text, cp); + break; + + case 's': /* size in bytes */ + /* UNTRUSTED, probably unexploitable */ + checked_fprintf (dest, segment->text, + human_readable ((uintmax_t) stat_buf->st_size, + hbuf, human_ceiling, 1, 1)); + break; + + case 'S': /* sparseness */ + /* UNTRUSTED, probably unexploitable */ + checked_fprintf (dest, segment->text, file_sparseness(stat_buf));; + break; + + case 't': /* mtime in `ctime' format */ + /* UNTRUSTED, probably unexploitable */ + checked_fprintf (dest, segment->text, + ctime_format (get_stat_mtime(stat_buf))); + break; + + case 'u': /* user name */ + /* trusted */ + /* (well, the actual user is selected by the user on systems + * where chown is not restricted, but the user name was + * selected by the system administrator) + */ + { + struct passwd *p; + + p = getpwuid (stat_buf->st_uid); + if (p) + { + segment->text[segment->text_len] = 's'; + checked_fprintf (dest, segment->text, p->pw_name); + break; + } + /* else fallthru */ + } + /* FALLTHROUGH*/ /* .. to case U */ + + case 'U': /* UID number */ + /* UNTRUSTED, probably unexploitable */ + checked_fprintf (dest, segment->text, + human_readable ((uintmax_t) stat_buf->st_uid, hbuf, + human_ceiling, 1, 1)); + break; + + /* %Y: type of file system entry like `ls -l`: + * (d,-,l,s,p,b,c,n) n=nonexistent(symlink) + */ + case 'Y': /* in case of symlink */ + /* trusted */ + { +#ifdef S_ISLNK + if (S_ISLNK (stat_buf->st_mode)) + { + struct stat sbuf; + /* If we would normally follow links, do not do so. + * If we would normally not follow links, do so. + */ + if ((following_links() ? lstat : stat) + (state.rel_pathname, &sbuf) != 0) + { + if ( errno == ENOENT ) + { + checked_fprintf (dest, segment->text, "N"); + break; + } + else if ( errno == ELOOP ) + { + checked_fprintf (dest, segment->text, "L"); + break; + } + else + { + checked_fprintf (dest, segment->text, "?"); + error (0, errno, "%s", + safely_quote_err_filename(0, pathname)); + /* exit_status = 1; + return ; */ + break; + } + } + checked_fprintf (dest, segment->text, + mode_to_filetype(sbuf.st_mode & S_IFMT)); + } +#endif /* S_ISLNK */ + else + { + checked_fprintf (dest, segment->text, + mode_to_filetype(stat_buf->st_mode & S_IFMT)); + } + } + break; + + case 'y': + /* trusted */ + { + checked_fprintf (dest, segment->text, + mode_to_filetype(stat_buf->st_mode & S_IFMT)); + } + break; + } + /* end of KIND_FORMAT case */ + break; + } +} + +boolean +pred_fprintf (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + struct format_val *dest = &pred_ptr->args.printf_vec; + struct segment *segment; + + for (segment = dest->segment; segment; segment = segment->next) + { + if ( (KIND_FORMAT == segment->segkind) && segment->format_char[1]) /* Component of date. */ + { + struct timespec ts; + int valid = 0; + + switch (segment->format_char[0]) + { + case 'A': + ts = get_stat_atime(stat_buf); + valid = 1; + break; + case 'B': + ts = get_stat_birthtime(stat_buf); + if ('@' == segment->format_char[1]) + valid = 1; + else + valid = (ts.tv_nsec >= 0); + break; + case 'C': + ts = get_stat_ctime(stat_buf); + valid = 1; + break; + case 'T': + ts = get_stat_mtime(stat_buf); + valid = 1; + break; + default: + assert (0); + abort (); + } + /* We trust the output of format_date not to contain + * nasty characters, though the value of the date + * is itself untrusted data. + */ + if (valid) + { + /* trusted */ + checked_fprintf (dest, segment->text, + format_date (ts, segment->format_char[1])); + } + else + { + /* The specified timestamp is not available, output + * nothing for the timestamp, but use the rest (so that + * for example find foo -printf '[%Bs] %p\n' can print + * "[] foo"). + */ + /* trusted */ + checked_fprintf (dest, segment->text, ""); + } + } + else + { + /* Print a segment which is not a date. */ + do_fprintf(dest, segment, pathname, stat_buf); + } + } + return true; +} + +boolean +pred_fstype (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + + if (strcmp (filesystem_type (stat_buf, pathname), pred_ptr->args.str) == 0) + return true; + else + return false; +} + +boolean +pred_gid (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + + switch (pred_ptr->args.numinfo.kind) + { + case COMP_GT: + if (stat_buf->st_gid > pred_ptr->args.numinfo.l_val) + return (true); + break; + case COMP_LT: + if (stat_buf->st_gid < pred_ptr->args.numinfo.l_val) + return (true); + break; + case COMP_EQ: + if (stat_buf->st_gid == pred_ptr->args.numinfo.l_val) + return (true); + break; + } + return (false); +} + +boolean +pred_group (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + + if (pred_ptr->args.gid == stat_buf->st_gid) + return (true); + else + return (false); +} + +boolean +pred_ilname (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + return match_lname (pathname, stat_buf, pred_ptr, true); +} + +/* Common code between -name, -iname. PATHNAME is being visited, STR + is name to compare basename against, and FLAGS are passed to + fnmatch. */ +static boolean +pred_name_common (const char *pathname, const char *str, int flags) +{ + /* Prefer last_component over base_name, to avoid malloc when + possible. */ + char *base = last_component (pathname); + + /* base is empty only if pathname is a file system root. But recall + that 'find / -name /' is one of the few times where a '/' in the + -name must actually find something. */ + if (!*base) + { + boolean b; + base = base_name (pathname); + b = fnmatch (str, base, flags) == 0; + free (base); + return b; + } + /* FNM_PERIOD is not used here because POSIX requires that it not be. + * See http://standards.ieee.org/reading/ieee/interp/1003-2-92_int/pasc-1003.2-126.html + */ + return fnmatch (str, base, flags) == 0; +} + +boolean +pred_iname (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) stat_buf; + return pred_name_common (pathname, pred_ptr->args.str, FNM_CASEFOLD); +} + +boolean +pred_inum (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + + switch (pred_ptr->args.numinfo.kind) + { + case COMP_GT: + if (stat_buf->st_ino > pred_ptr->args.numinfo.l_val) + return (true); + break; + case COMP_LT: + if (stat_buf->st_ino < pred_ptr->args.numinfo.l_val) + return (true); + break; + case COMP_EQ: + if (stat_buf->st_ino == pred_ptr->args.numinfo.l_val) + return (true); + break; + } + return (false); +} + +boolean +pred_ipath (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) stat_buf; + + if (fnmatch (pred_ptr->args.str, pathname, FNM_CASEFOLD) == 0) + return (true); + return (false); +} + +boolean +pred_links (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + + switch (pred_ptr->args.numinfo.kind) + { + case COMP_GT: + if (stat_buf->st_nlink > pred_ptr->args.numinfo.l_val) + return (true); + break; + case COMP_LT: + if (stat_buf->st_nlink < pred_ptr->args.numinfo.l_val) + return (true); + break; + case COMP_EQ: + if (stat_buf->st_nlink == pred_ptr->args.numinfo.l_val) + return (true); + break; + } + return (false); +} + +boolean +pred_lname (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + return match_lname (pathname, stat_buf, pred_ptr, false); +} + +static boolean +match_lname (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr, boolean ignore_case) +{ + boolean ret = false; +#ifdef S_ISLNK + if (S_ISLNK (stat_buf->st_mode)) + { + char *linkname = get_link_name_at (pathname, state.cwd_dir_fd, state.rel_pathname); + if (linkname) + { + if (fnmatch (pred_ptr->args.str, linkname, + ignore_case ? FNM_CASEFOLD : 0) == 0) + ret = true; + free (linkname); + } + } +#endif /* S_ISLNK */ + return ret; +} + +boolean +pred_ls (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + return pred_fls(pathname, stat_buf, pred_ptr); +} + +boolean +pred_mmin (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) &pathname; + return pred_timewindow(get_stat_mtime(stat_buf), pred_ptr, 60); +} + +boolean +pred_mtime (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + return pred_timewindow(get_stat_mtime(stat_buf), pred_ptr, DAYSECS); +} + +boolean +pred_name (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) stat_buf; + return pred_name_common (pathname, pred_ptr->args.str, 0); +} + +boolean +pred_negate (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + return !apply_predicate(pathname, stat_buf, pred_ptr->pred_right); +} + +boolean +pred_newer (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + + assert (COMP_GT == pred_ptr->args.reftime.kind); + return compare_ts(get_stat_mtime(stat_buf), pred_ptr->args.reftime.ts) > 0; +} + +boolean +pred_newerXY (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + struct timespec ts; + boolean collected = false; + + assert (COMP_GT == pred_ptr->args.reftime.kind); + + switch (pred_ptr->args.reftime.xval) + { + case XVAL_TIME: + assert (pred_ptr->args.reftime.xval != XVAL_TIME); + return false; + + case XVAL_ATIME: + ts = get_stat_atime(stat_buf); + collected = true; + break; + + case XVAL_BIRTHTIME: + ts = get_stat_birthtime(stat_buf); + collected = true; + if (ts.tv_nsec < 0); + { + /* XXX: Cannot determine birth time. Warn once. */ + error(0, 0, _("Warning: cannot determine birth time of file %s"), + safely_quote_err_filename(0, pathname)); + return false; + } + break; + + case XVAL_CTIME: + ts = get_stat_ctime(stat_buf); + collected = true; + break; + + case XVAL_MTIME: + ts = get_stat_mtime(stat_buf); + collected = true; + break; + } + + assert (collected); + return compare_ts(ts, pred_ptr->args.reftime.ts) > 0; +} + +boolean +pred_nogroup (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + (void) pred_ptr; + +#ifdef CACHE_IDS + extern char *gid_unused; + + return gid_unused[(unsigned) stat_buf->st_gid]; +#else + return getgrgid (stat_buf->st_gid) == NULL; +#endif +} + +boolean +pred_nouser (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ +#ifdef CACHE_IDS + extern char *uid_unused; +#endif + + (void) pathname; + (void) pred_ptr; + +#ifdef CACHE_IDS + return uid_unused[(unsigned) stat_buf->st_uid]; +#else + return getpwuid (stat_buf->st_uid) == NULL; +#endif +} + + +static boolean +is_ok(const char *program, const char *arg) +{ + fflush (stdout); + /* The draft open standard requires that, in the POSIX locale, + the last non-blank character of this prompt be '?'. + The exact format is not specified. + This standard does not have requirements for locales other than POSIX + */ + /* XXX: printing UNTRUSTED data here. */ + fprintf (stderr, _("< %s ... %s > ? "), program, arg); + fflush (stderr); + return yesno(); +} + +boolean +pred_ok (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + if (is_ok(pred_ptr->args.exec_vec.replace_vec[0], pathname)) + return new_impl_pred_exec (get_start_dirfd(), + pathname, stat_buf, pred_ptr, NULL, 0); + else + return false; +} + +boolean +pred_okdir (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + const char *prefix = (state.rel_pathname[0] == '/') ? NULL : "./"; + if (is_ok(pred_ptr->args.exec_vec.replace_vec[0], pathname)) + return new_impl_pred_exec (get_current_dirfd(), + state.rel_pathname, stat_buf, pred_ptr, + prefix, (prefix ? 2 : 0)); + else + return false; +} + +boolean +pred_openparen (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + (void) stat_buf; + (void) pred_ptr; + return true; +} + +boolean +pred_or (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + if (pred_ptr->pred_left == NULL + || !apply_predicate(pathname, stat_buf, pred_ptr->pred_left)) + { + return apply_predicate(pathname, stat_buf, pred_ptr->pred_right); + } + else + return true; +} + +boolean +pred_path (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) stat_buf; + if (fnmatch (pred_ptr->args.str, pathname, 0) == 0) + return (true); + return (false); +} + +boolean +pred_perm (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + mode_t mode = stat_buf->st_mode; + mode_t perm_val = pred_ptr->args.perm.val[S_ISDIR (mode) != 0]; + (void) pathname; + switch (pred_ptr->args.perm.kind) + { + case PERM_AT_LEAST: + return (mode & perm_val) == perm_val; + break; + + case PERM_ANY: + /* True if any of the bits set in the mask are also set in the file's mode. + * + * + * Otherwise, if onum is prefixed by a hyphen, the primary shall + * evaluate as true if at least all of the bits specified in + * onum that are also set in the octal mask 07777 are set. + * + * Eric Blake's interpretation is that the mode argument is zero, + + */ + if (0 == perm_val) + return true; /* Savannah bug 14748; we used to return false */ + else + return (mode & perm_val) != 0; + break; + + case PERM_EXACT: + return (mode & MODE_ALL) == perm_val; + break; + + default: + abort (); + break; + } +} + + +struct access_check_args +{ + const char *filename; + int access_type; + int cb_errno; +}; + + +static int +access_callback(void *context) +{ + int rv; + struct access_check_args *args = context; + if ((rv = access(args->filename, args->access_type)) < 0) + args->cb_errno = errno; + return rv; +} + +static int +can_access(int access_type) +{ + struct access_check_args args; + args.filename = state.rel_pathname; + args.access_type = access_type; + args.cb_errno = 0; + return 0 == run_in_dir(state.cwd_dir_fd, access_callback, &args); +} + + +boolean +pred_executable (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + (void) stat_buf; + (void) pred_ptr; + + return can_access(X_OK); +} + +boolean +pred_readable (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + (void) stat_buf; + (void) pred_ptr; + + return can_access(R_OK); +} + +boolean +pred_writable (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + (void) stat_buf; + (void) pred_ptr; + + return can_access(W_OK); +} + +boolean +pred_print (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) stat_buf; + (void) pred_ptr; + + print_quoted(pred_ptr->args.printf_vec.stream, + pred_ptr->args.printf_vec.quote_opts, + pred_ptr->args.printf_vec.dest_is_tty, + "%s\n", pathname); + return true; +} + +boolean +pred_print0 (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + return pred_fprint0(pathname, stat_buf, pred_ptr); +} + +boolean +pred_prune (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + (void) pred_ptr; + + if (options.do_dir_first == true && + stat_buf != NULL && + S_ISDIR(stat_buf->st_mode)) + state.stop_at_current_level = true; + + return (options.do_dir_first); /* This is what SunOS find seems to do. */ +} + +boolean +pred_quit (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + (void) stat_buf; + (void) pred_ptr; + + /* Run any cleanups. This includes executing any command lines + * we have partly built but not executed. + */ + cleanup(); + + /* Since -exec and friends don't leave child processes running in the + * background, there is no need to wait for them here. + */ + exit(state.exit_status); /* 0 for success, etc. */ +} + +boolean +pred_regex (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + int len = strlen (pathname); +(void) stat_buf; + if (re_match (pred_ptr->args.regex, pathname, len, 0, + (struct re_registers *) NULL) == len) + return (true); + return (false); +} + +boolean +pred_size (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + uintmax_t f_val; + + (void) pathname; + f_val = ((stat_buf->st_size / pred_ptr->args.size.blocksize) + + (stat_buf->st_size % pred_ptr->args.size.blocksize != 0)); + switch (pred_ptr->args.size.kind) + { + case COMP_GT: + if (f_val > pred_ptr->args.size.size) + return (true); + break; + case COMP_LT: + if (f_val < pred_ptr->args.size.size) + return (true); + break; + case COMP_EQ: + if (f_val == pred_ptr->args.size.size) + return (true); + break; + } + return (false); +} + +boolean +pred_samefile (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + /* Potential optimisation: because of the loop protection, we always + * know the device of the current directory, hence the device number + * of the file we're currently considering. If -L is not in effect, + * and the device number of the file we're looking for is not the + * same as the device number of the current directory, this + * predicate cannot return true. Hence there would be no need to + * stat the file we're looking at. + */ + (void) pathname; + + /* We will often still have an fd open on the file under consideration, + * but that's just to ensure inode number stability by maintaining + * a reference to it; we don't need the file for anything else. + */ + return stat_buf->st_ino == pred_ptr->args.samefileid.ino + && stat_buf->st_dev == pred_ptr->args.samefileid.dev; +} + +boolean +pred_true (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + (void) stat_buf; + (void) pred_ptr; + return true; +} + +boolean +pred_type (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + mode_t mode; + mode_t type = pred_ptr->args.type; + + assert (state.have_type); + + if (0 == state.type) + { + /* This can sometimes happen with broken NFS servers. + * See Savannah bug #16378. + */ + return false; + } + + (void) pathname; + + if (state.have_stat) + mode = stat_buf->st_mode; + else + mode = state.type; + +#ifndef S_IFMT + /* POSIX system; check `mode' the slow way. */ + if ((S_ISBLK (mode) && type == S_IFBLK) + || (S_ISCHR (mode) && type == S_IFCHR) + || (S_ISDIR (mode) && type == S_IFDIR) + || (S_ISREG (mode) && type == S_IFREG) +#ifdef S_IFLNK + || (S_ISLNK (mode) && type == S_IFLNK) +#endif +#ifdef S_IFIFO + || (S_ISFIFO (mode) && type == S_IFIFO) +#endif +#ifdef S_IFSOCK + || (S_ISSOCK (mode) && type == S_IFSOCK) +#endif +#ifdef S_IFDOOR + || (S_ISDOOR (mode) && type == S_IFDOOR) +#endif + ) +#else /* S_IFMT */ + /* Unix system; check `mode' the fast way. */ + if ((mode & S_IFMT) == type) +#endif /* S_IFMT */ + return (true); + else + return (false); +} + +boolean +pred_uid (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + switch (pred_ptr->args.numinfo.kind) + { + case COMP_GT: + if (stat_buf->st_uid > pred_ptr->args.numinfo.l_val) + return (true); + break; + case COMP_LT: + if (stat_buf->st_uid < pred_ptr->args.numinfo.l_val) + return (true); + break; + case COMP_EQ: + if (stat_buf->st_uid == pred_ptr->args.numinfo.l_val) + return (true); + break; + } + return (false); +} + +boolean +pred_used (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + struct timespec delta, at, ct; + + (void) pathname; + + /* TODO: this needs to be retested carefully (manually, if necessary) */ + at = get_stat_atime(stat_buf); + ct = get_stat_ctime(stat_buf); + delta.tv_sec = at.tv_sec - ct.tv_sec; + delta.tv_nsec = at.tv_nsec - ct.tv_nsec; + if (delta.tv_nsec < 0) + { + delta.tv_nsec += 1000000000; + delta.tv_sec -= 1; + } + return pred_timewindow(delta, pred_ptr, DAYSECS); +} + +boolean +pred_user (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + (void) pathname; + if (pred_ptr->args.uid == stat_buf->st_uid) + return (true); + else + return (false); +} + +boolean +pred_xtype (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + struct stat sbuf; /* local copy, not stat_buf because we're using a different stat method */ + int (*ystat) (const char*, struct stat *p); + + /* If we would normally stat the link itself, stat the target instead. + * If we would normally follow the link, stat the link itself instead. + */ + if (following_links()) + ystat = optionp_stat; + else + ystat = optionl_stat; + + set_stat_placeholders(&sbuf); + if ((*ystat) (state.rel_pathname, &sbuf) != 0) + { + if (following_links() && errno == ENOENT) + { + /* If we failed to follow the symlink, + * fall back on looking at the symlink itself. + */ + /* Mimic behavior of ls -lL. */ + return (pred_type (pathname, stat_buf, pred_ptr)); + } + else + { + error (0, errno, "%s", safely_quote_err_filename(0, pathname)); + state.exit_status = 1; + } + return false; + } + /* Now that we have our stat() information, query it in the same + * way that -type does. + */ + return (pred_type (pathname, &sbuf, pred_ptr)); +} + +/* 1) fork to get a child; parent remembers the child pid + 2) child execs the command requested + 3) parent waits for child; checks for proper pid of child + + Possible returns: + + ret errno status(h) status(l) + + pid x signal# 0177 stopped + pid x exit arg 0 term by _exit + pid x 0 signal # term by signal + -1 EINTR parent got signal + -1 other some other kind of error + + Return true only if the pid matches, status(l) is + zero, and the exit arg (status high) is 0. + Otherwise return false, possibly printing an error message. */ + + +static boolean +prep_child_for_exec (boolean close_stdin, int dirfd) +{ + boolean ok = true; + if (close_stdin) + { + const char inputfile[] = "/dev/null"; + + if (close(0) < 0) + { + error(0, errno, _("Cannot close standard input")); + ok = false; + } + else + { + if (open(inputfile, O_RDONLY +#if defined O_LARGEFILE + |O_LARGEFILE +#endif + ) < 0) + { + /* This is not entirely fatal, since + * executing the child with a closed + * stdin is almost as good as executing it + * with its stdin attached to /dev/null. + */ + error (0, errno, "%s", safely_quote_err_filename(0, inputfile)); + /* do not set ok=false, it is OK to continue anyway. */ + } + } + } + + /* Even if DebugSearch is set, don't announce our change of + * directory, since we're not going to emit a subsequent + * announcement of a call to stat() anyway, as we're about to exec + * something. + */ + if (dirfd != AT_FDCWD) + { + assert (dirfd >= 0); + if (0 != fchdir(dirfd)) + { + /* If we cannot execute our command in the correct directory, + * we should not execute it at all. + */ + error(0, errno, _("Failed to change directory")); + ok = false; + } + } + return ok; +} + + + +int +launch (const struct buildcmd_control *ctl, + struct buildcmd_state *buildstate) +{ + int wait_status; + pid_t child_pid; + static int first_time = 1; + const struct exec_val *execp = buildstate->usercontext; + + if (!execp->use_current_dir) + { + assert (starting_desc >= 0); + assert (execp->dirfd == starting_desc); + } + + + /* Null terminate the arg list. */ + bc_push_arg (ctl, buildstate, (char *) NULL, 0, NULL, 0, false); + + /* Make sure output of command doesn't get mixed with find output. */ + fflush (stdout); + fflush (stderr); + + /* Make sure to listen for the kids. */ + if (first_time) + { + first_time = 0; + signal (SIGCHLD, SIG_DFL); + } + + child_pid = fork (); + if (child_pid == -1) + error (1, errno, _("cannot fork")); + if (child_pid == 0) + { + /* We are the child. */ + assert (starting_desc >= 0); + if (!prep_child_for_exec(execp->close_stdin, execp->dirfd)) + { + _exit(1); + } + + execvp (buildstate->cmd_argv[0], buildstate->cmd_argv); + error (0, errno, "%s", + safely_quote_err_filename(0, buildstate->cmd_argv[0])); + _exit (1); + } + + + /* In parent; set up for next time. */ + bc_clear_args(ctl, buildstate); + + + while (waitpid (child_pid, &wait_status, 0) == (pid_t) -1) + { + if (errno != EINTR) + { + error (0, errno, _("error waiting for %s"), + safely_quote_err_filename(0, buildstate->cmd_argv[0])); + state.exit_status = 1; + return 0; /* FAIL */ + } + } + + if (WIFSIGNALED (wait_status)) + { + error (0, 0, _("%s terminated by signal %d"), + quotearg_n_style(0, options.err_quoting_style, + buildstate->cmd_argv[0]), + WTERMSIG (wait_status)); + + if (execp->multiple) + { + /* -exec \; just returns false if the invoked command fails. + * -exec {} + returns true if the invoked command fails, but + * sets the program exit status. + */ + state.exit_status = 1; + } + + return 1; /* OK */ + } + + if (0 == WEXITSTATUS (wait_status)) + { + return 1; /* OK */ + } + else + { + if (execp->multiple) + { + /* -exec \; just returns false if the invoked command fails. + * -exec {} + returns true if the invoked command fails, but + * sets the program exit status. + */ + state.exit_status = 1; + } + return 0; /* FAIL */ + } + +} + + +/* Return a static string formatting the time WHEN according to the + * strftime format character KIND. + * + * This function contains a number of assertions. These look like + * runtime checks of the results of computations, which would be a + * problem since external events should not be tested for with + * "assert" (instead you should use "if"). However, they are not + * really runtime checks. The assertions actually exist to verify + * that the various buffers are correctly sized. + */ +static char * +format_date (struct timespec ts, int kind) +{ + /* In theory, we use an extra 10 characters for 9 digits of + * nanoseconds and 1 for the decimal point. However, the real + * world is more complex than that. + * + * For example, some systems return junk in the tv_nsec part of + * st_birthtime. An example of this is the NetBSD-4.0-RELENG kernel + * (at Sat Mar 24 18:46:46 2007) running a NetBSD-3.1-RELEASE + * runtime and examining files on an msdos filesytem. So for that + * reason we set NS_BUF_LEN to 32, which is simply "long enough" as + * opposed to "exactly the right size". Note that the behaviour of + * NetBSD appears to be a result of the use of uninitialised data, + * as it's not 100% reproducible (more like 25%). + */ + enum { + NS_BUF_LEN = 32, + DATE_LEN_PERCENT_APLUS=21 /* length of result of %A+ (it's longer than %c)*/ + }; + static char buf[128u+10u + MAX(DATE_LEN_PERCENT_APLUS, + MAX (LONGEST_HUMAN_READABLE + 2, NS_BUF_LEN+64+200))]; + char ns_buf[NS_BUF_LEN]; /* -.9999999990 (- sign can happen!)*/ + int charsprinted, need_ns_suffix; + struct tm *tm; + char fmt[6]; + + /* human_readable() assumes we pass a buffer which is at least as + * long as LONGEST_HUMAN_READABLE. We use an assertion here to + * ensure that no nasty unsigned overflow happend in our calculation + * of the size of buf. Do the assertion here rather than in the + * code for %@ so that we find the problem quickly if it exists. If + * you want to submit a patch to move this into the if statement, go + * ahead, I'll apply it. But include performance timings + * demonstrating that the performance difference is actually + * measurable. + */ + verify (sizeof(buf) >= LONGEST_HUMAN_READABLE); + + charsprinted = 0; + need_ns_suffix = 0; + + /* Format the main part of the time. */ + if (kind == '+') + { + strcpy (fmt, "%F+%T"); + need_ns_suffix = 1; + } + else + { + fmt[0] = '%'; + fmt[1] = kind; + fmt[2] = '\0'; + + /* %a, %c, and %t are handled in ctime_format() */ + switch (kind) + { + case 'S': + case 'T': + case 'X': + case '@': + need_ns_suffix = 1; + break; + default: + need_ns_suffix = 0; + break; + } + } + + if (need_ns_suffix) + { + /* Format the nanoseconds part. Leave a trailing zero to + * discourage people from writing scripts which extract the + * fractional part of the timestamp by using column offsets. + * The reason for discouraging this is that in the future, the + * granularity may not be nanoseconds. + */ + ns_buf[0] = 0; + charsprinted = snprintf(ns_buf, NS_BUF_LEN, ".%09ld0", (long int)ts.tv_nsec); + assert (charsprinted < NS_BUF_LEN); + } + + if (kind != '@' + && (tm = localtime (&ts.tv_sec)) + && strftime (buf, sizeof buf, fmt, tm)) + { + /* For %AS, %CS, %TS, add the fractional part of the seconds + * information. + */ + if (need_ns_suffix) + { + assert ((sizeof buf - strlen(buf)) > strlen(ns_buf)); + strcat(buf, ns_buf); + } + return buf; + } + else + { + uintmax_t w = ts.tv_sec; + size_t used, len, remaining; + + /* XXX: note that we are negating an unsigned type which is the + * widest possible unsigned type. + */ + char *p = human_readable (ts.tv_sec < 0 ? -w : w, buf + 1, + human_ceiling, 1, 1); + assert (p > buf); + assert (p < (buf + (sizeof buf))); + if (ts.tv_sec < 0) + *--p = '-'; /* XXX: Ugh, relying on internal details of human_readable(). */ + + /* Add the nanoseconds part. Because we cannot enforce a + * particlar implementation of human_readable, we cannot assume + * any particular value for (p-buf). So we need to be careful + * that there is enough space remaining in the buffer. + */ + if (need_ns_suffix) + { + len = strlen(p); + used = (p-buf) + len; /* Offset into buf of current end */ + assert (sizeof buf > used); /* Ensure we can perform subtraction safely. */ + remaining = sizeof buf - used - 1u; /* allow space for NUL */ + + if (strlen(ns_buf) >= remaining) + { + error(0, 0, + "charsprinted=%ld but remaining=%lu: ns_buf=%s", + (long)charsprinted, (unsigned long)remaining, ns_buf); + } + assert (strlen(ns_buf) < remaining); + strcat(p, ns_buf); + } + return p; + } +} + +static const char *weekdays[] = + { + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" + }; +static char * months[] = + { + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" + }; + + +static char * +ctime_format (struct timespec ts) +{ + const struct tm * ptm; +#define TIME_BUF_LEN 1024u + static char resultbuf[TIME_BUF_LEN]; + int nout; + + ptm = localtime(&ts.tv_sec); + if (ptm) + { + assert (ptm->tm_wday >= 0); + assert (ptm->tm_wday < 7); + assert (ptm->tm_mon >= 0); + assert (ptm->tm_mon < 12); + assert (ptm->tm_hour >= 0); + assert (ptm->tm_hour < 24); + assert (ptm->tm_min < 60); + assert (ptm->tm_sec <= 61); /* allows 2 leap seconds. */ + + /* wkday mon mday hh:mm:ss.nnnnnnnnn yyyy */ + nout = snprintf(resultbuf, TIME_BUF_LEN, + "%3s %3s %2d %02d:%02d:%02d.%010ld %04d", + weekdays[ptm->tm_wday], + months[ptm->tm_mon], + ptm->tm_mday, + ptm->tm_hour, + ptm->tm_min, + ptm->tm_sec, + (long int)ts.tv_nsec, + 1900 + ptm->tm_year); + + assert (nout < TIME_BUF_LEN); + return resultbuf; + } + else + { + /* The time cannot be represented as a struct tm. + Output it as an integer. */ + return format_date (ts, '@'); + } +} + +/* Copy STR into BUF and trim blanks from the end of BUF. + Return BUF. */ + +static char * +blank_rtrim (str, buf) + char *str; + char *buf; +{ + int i; + + if (str == NULL) + return (NULL); + strcpy (buf, str); + i = strlen (buf) - 1; + while ((i >= 0) && ((buf[i] == ' ') || buf[i] == '\t')) + i--; + buf[++i] = '\0'; + return (buf); +} + +/* Print out the predicate list starting at NODE. */ +void +print_list (FILE *fp, struct predicate *node) +{ + struct predicate *cur; + char name[256]; + + cur = node; + while (cur != NULL) + { + fprintf (fp, "[%s] ", blank_rtrim (cur->p_name, name)); + cur = cur->pred_next; + } + fprintf (fp, "\n"); +} + +/* Print out the predicate list starting at NODE. */ +static void +print_parenthesised(FILE *fp, struct predicate *node) +{ + int parens = 0; + + if (node) + { + if ((pred_is(node, pred_or) || pred_is(node, pred_and)) + && node->pred_left == NULL) + { + /* We print " or X" as just "X" + * We print " and X" as just "X" + */ + print_parenthesised(fp, node->pred_right); + } + else + { + if (node->pred_left || node->pred_right) + parens = 1; + + if (parens) + fprintf(fp, "%s", " ( "); + print_optlist(fp, node); + if (parens) + fprintf(fp, "%s", " ) "); + } + } +} + +void +print_optlist (FILE *fp, const struct predicate *p) +{ + if (p) + { + print_parenthesised(fp, p->pred_left); + fprintf (fp, + "%s%s", + p->need_stat ? "[call stat] " : "", + p->need_type ? "[need type] " : ""); + print_predicate(fp, p); + fprintf(fp, " [%g] ", p->est_success_rate); + if (options.debug_options & DebugSuccessRates) + { + fprintf(fp, "[%ld/%ld", p->perf.successes, p->perf.visits); + if (p->perf.visits) + { + double real_rate = (double)p->perf.successes / (double)p->perf.visits; + fprintf(fp, "=%g] ", real_rate); + } + else + { + fprintf(fp, "=_] "); + } + } + print_parenthesised(fp, p->pred_right); + } +} + +void show_success_rates(const struct predicate *p) +{ + if (options.debug_options & DebugSuccessRates) + { + fprintf(stderr, "Predicate success rates after completion:\n"); + print_optlist(stderr, p); + fprintf(stderr, "\n"); + } +} + + + + +#ifdef _NDEBUG +/* If _NDEBUG is defined, the assertions will do nothing. Hence + * there is no point in having a function body for pred_sanity_check() + * if that preprocessor macro is defined. + */ +void +pred_sanity_check(const struct predicate *predicates) +{ + /* Do nothing, since assert is a no-op with _NDEBUG set */ + return; +} +#else +void +pred_sanity_check(const struct predicate *predicates) +{ + const struct predicate *p; + + for (p=predicates; p != NULL; p=p->pred_next) + { + /* All predicates must do something. */ + assert (p->pred_func != NULL); + + /* All predicates must have a parser table entry. */ + assert (p->parser_entry != NULL); + + /* If the parser table tells us that just one predicate function is + * possible, verify that that is still the one that is in effect. + * If the parser has NULL for the predicate function, that means that + * the parse_xxx function fills it in, so we can't check it. + */ + if (p->parser_entry->pred_func) + { + assert (p->parser_entry->pred_func == p->pred_func); + } + + switch (p->parser_entry->type) + { + /* Options all take effect during parsing, so there should + * be no predicate entries corresponding to them. Hence we + * should not see any ARG_OPTION or ARG_POSITIONAL_OPTION + * items. + * + * This is a silly way of coding this test, but it prevents + * a compiler warning (i.e. otherwise it would think that + * there would be case statements missing). + */ + case ARG_OPTION: + case ARG_POSITIONAL_OPTION: + assert (p->parser_entry->type != ARG_OPTION); + assert (p->parser_entry->type != ARG_POSITIONAL_OPTION); + break; + + case ARG_ACTION: + assert(p->side_effects); /* actions have side effects. */ + if (!pred_is(p, pred_prune) && !pred_is(p, pred_quit)) + { + /* actions other than -prune and -quit should + * inhibit the default -print + */ + assert (p->no_default_print); + } + break; + + /* We happen to know that the only user of ARG_SPECIAL_PARSE + * is a test, so handle it like ARG_TEST. + */ + case ARG_SPECIAL_PARSE: + case ARG_TEST: + case ARG_PUNCTUATION: + case ARG_NOOP: + /* Punctuation and tests should have no side + * effects and not inhibit default print. + */ + assert (!p->no_default_print); + assert (!p->side_effects); + break; + } + } +} +#endif diff --git a/find/testsuite/.cvsignore b/find/testsuite/.cvsignore new file mode 100644 index 0000000..a88d57a --- /dev/null +++ b/find/testsuite/.cvsignore @@ -0,0 +1,6 @@ +Makefile +Makefile.in +dbg.log +find.log +find.sum +site.exp diff --git a/find/testsuite/.gitignore b/find/testsuite/.gitignore new file mode 100644 index 0000000..a88d57a --- /dev/null +++ b/find/testsuite/.gitignore @@ -0,0 +1,6 @@ +Makefile +Makefile.in +dbg.log +find.log +find.sum +site.exp diff --git a/find/testsuite/Makefile.am b/find/testsuite/Makefile.am new file mode 100644 index 0000000..089820e --- /dev/null +++ b/find/testsuite/Makefile.am @@ -0,0 +1,229 @@ +AUTOMAKE_OPTIONS=dejagnu +FIND = ../find +FINDFLAGS = + +DEJATOOL = find + +EXTRA_DIST_XO = \ +find.gnu/access.xo \ +find.gnu/comma.xo \ +find.gnu/delete.xo \ +find.gnu/deletedir.xo \ +find.gnu/deletefile.xo \ +find.gnu/depth.xo \ +find.gnu/depth-d.xo \ +find.gnu/empty.xo \ +find.gnu/execdir-hier.xo \ +find.gnu/execdir-one.xo \ +find.gnu/execdir-root-only.xo \ +find.gnu/exec-many-rtn-failure.xo \ +find.gnu/exec-many-rtn-success.xo \ +find.gnu/exec-one-rtn-fail.xo \ +find.gnu/exec-one-rtn-success.xo \ +find.gnu/false.xo \ +find.gnu/follow-arg-parent-symlink.xo \ +find.gnu/follow-basic.xo \ +find.gnu/fprint0_stdout.xo \ +find.gnu/gnuand.xo \ +find.gnu/gnunot.xo \ +find.gnu/gnu-or.xo \ +find.gnu/ilname.xo \ +find.gnu/iname.xo \ +find.gnu/inum.xo \ +find.gnu/ipath.xo \ +find.gnu/iregex1.xo \ +find.gnu/iwholename.xo \ +find.gnu/lname.xo \ +find.gnu/mindepth-arg.xo \ +find.gnu/name-opt.xo \ +find.gnu/name-period.xo \ +find.gnu/name-slash.xo \ +find.gnu/path.xo \ +find.gnu/print_stdout.xo \ +find.gnu/perm.xo \ +find.gnu/perm000.xo \ +find.gnu/perm-slash.xo \ +find.gnu/posix-dflt.xo \ +find.gnu/posix-h.xo \ +find.gnu/posix-l.xo \ +find.gnu/printfHdfl.xo \ +find.gnu/printf-slash.xo \ +find.gnu/printf-symlink.xo \ +find.gnu/printf-h.xo \ +find.gnu/printf.xo \ +find.gnu/print0.xo \ +find.gnu/prune-default-print.xo \ +find.gnu/regex1.xo \ +find.gnu/regex2.xo \ +find.gnu/samefile-copy.xo \ +find.gnu/samefile-link.xo \ +find.gnu/samefile-p-brokenlink.xo \ +find.gnu/samefile-same.xo \ +find.gnu/samefile-symlink.xo \ +find.gnu/sv-bug-17782.xo \ +find.gnu/sv-bug-18222.xo \ +find.gnu/true.xo \ +find.gnu/wholename.xo \ +find.gnu/xtype-symlink.xo \ +find.gnu/quit.xo \ +find.gnu/xtype.xo \ +find.posix/and.xo \ +find.posix/depth1.xo \ +find.posix/exec-one.xo \ +find.posix/files-not-expressions1.xo \ +find.posix/files-not-expressions2.xo \ +find.posix/files-not-expressions3.xo \ +find.posix/grouping.xo \ +find.posix/links.xo \ +find.posix/sv-bug-11175.xo \ +find.posix/sv-bug-12181.xo \ +find.posix/depth1.xo \ +find.posix/sizes.xo \ +find.posix/name.xo \ +find.posix/perm-X.xo \ +find.posix/perm-vanilla.xo \ +find.posix/posixnot.xo \ +find.posix/prune.xo \ +find.posix/sizes.xo \ +find.posix/sizetype.xo \ +find.posix/sv-bug-11175.xo \ +find.posix/sv-bug-12181.xo \ +find.posix/sv-bug-15235.xo \ +find.posix/sv-bug-19613.xo \ +find.posix/typesize.xo \ +find.posix/posixnot.xo \ +find.posix/grouping.xo \ +find.posix/and.xo \ +find.posix/exec-one.xo \ +find.gnu/follow-arg-parent-symlink.xo + +EXTRA_DIST_EXP = \ +config/unix.exp \ +find.gnu/access.exp \ +find.gnu/comma.exp \ +find.gnu/delete.exp \ +find.gnu/deletedir.exp \ +find.gnu/deletefile.exp \ +find.gnu/depth.exp \ +find.gnu/depth-d.exp \ +find.gnu/empty.exp \ +find.gnu/execdir-hier.exp \ +find.gnu/execdir-in-unreadable.exp \ +find.gnu/execdir-one.exp \ +find.gnu/execdir-pwd.exp \ +find.gnu/execdir-root-only.exp \ +find.gnu/exec-many-rtn-failure.exp \ +find.gnu/exec-many-rtn-success.exp \ +find.gnu/exec-one-rtn-fail.exp \ +find.gnu/exec-one-rtn-success.exp \ +find.gnu/false.exp \ +find.gnu/follow-arg-parent-symlink.exp \ +find.gnu/follow-basic.exp \ +find.gnu/fprint0_stdout.exp \ +find.gnu/fprint-unwritable.exp \ +find.gnu/gnuand.exp \ +find.gnu/gnunot.exp \ +find.gnu/gnu-or.exp \ +find.gnu/ilname.exp \ +find.gnu/iname.exp \ +find.gnu/inum.exp \ +find.gnu/ipath.exp \ +find.gnu/iregex1.exp \ +find.gnu/iwholename.exp \ +find.gnu/lname.exp \ +find.gnu/mindepth-arg.exp \ +find.gnu/mindepth-badarg.exp \ +find.gnu/name-opt.exp \ +find.gnu/name-period.exp \ +find.gnu/name-slash.exp \ +find.gnu/path.exp \ +find.gnu/print_stdout.exp \ +find.gnu/print0.exp \ +find.gnu/perm.exp \ +find.gnu/perm000.exp \ +find.gnu/perm-slash.exp \ +find.gnu/posix-dflt.exp \ +find.gnu/posix-h.exp \ +find.gnu/posix-l.exp \ +find.gnu/posix-perminvalid.exp \ +find.gnu/printfHdfl.exp \ +find.gnu/printf.exp \ +find.gnu/printf.exp \ +find.gnu/printf-slash.exp \ +find.gnu/printf-symlink.exp \ +find.gnu/printf-h.exp \ +find.gnu/prune-default-print.exp \ +find.gnu/regex1.exp \ +find.gnu/regex2.exp \ +find.gnu/samefile-copy.exp \ +find.gnu/samefile-link.exp \ +find.gnu/samefile-missing.exp \ +find.gnu/samefile-p-brokenlink.exp \ +find.gnu/samefile-same.exp \ +find.gnu/samefile-symlink.exp \ +find.gnu/true.exp \ +find.gnu/wholename.exp \ +find.gnu/xtype-symlink.exp \ +find.gnu/sv-bug-12230.exp \ +find.gnu/sv-bug-17477.exp \ +find.gnu/sv-bug-17490.exp \ +find.gnu/sv-bug-17782.exp \ +find.gnu/sv-bug-18222.exp \ +find.gnu/quit.exp \ +find.gnu/used-invarg.exp \ +find.gnu/used-missing.exp \ +find.gnu/user-invalid.exp \ +find.gnu/xtype.exp \ +find.posix/and.exp \ +find.posix/bracket-depth.exp \ +find.posix/depth1.exp \ +find.posix/empty-parens.exp \ +find.posix/exec-one.exp \ +find.posix/files-not-expressions1.exp \ +find.posix/files-not-expressions2.exp \ +find.posix/files-not-expressions3.exp \ +find.posix/grouping.exp \ +find.posix/group-empty.exp \ +find.posix/group-missing.exp \ +find.posix/links.exp \ +find.posix/sv-bug-11175.exp \ +find.posix/sv-bug-12181.exp \ +find.posix/depth1.exp \ +find.posix/sizes.exp \ +find.posix/name.exp \ +find.posix/name-missing.exp \ +find.posix/perm-X.exp \ +find.posix/perm-vanilla.exp \ +find.posix/posixnot.exp \ +find.posix/prune.exp \ +find.posix/size-invalid.exp \ +find.posix/size-missing.exp \ +find.posix/sizes.exp \ +find.posix/sizetype.exp \ +find.posix/typearg.exp \ +find.posix/sv-bug-11175.exp \ +find.posix/sv-bug-12181.exp \ +find.posix/sv-bug-15235.exp \ +find.posix/sv-bug-19605.exp \ +find.posix/sv-bug-19613.exp \ +find.posix/sv-bug-19617.exp \ +find.posix/typesize.exp \ +find.posix/grouping.exp \ +find.posix/and.exp \ +find.posix/exec-one.exp \ +find.posix/user-empty.exp \ +find.posix/user-missing.exp + +EXTRA_DIST = $(EXTRA_DIST_EXP) $(EXTRA_DIST_XO) + +CLEANFILES = *.log *.sum site.exp site.bak + +#DIST_SUBDIRS = config + + +checklists: + cd $(srcdir) && \ + ( find config find.gnu find.posix \( -name "*.exp" -o -name "*.xo" \) -print ; \ + ls $(EXTRA_DIST_XO) ; \ + ls $(EXTRA_DIST_EXP) ; ) | \ + sort | uniq -c | awk '$$1 != 2 { print; }' diff --git a/find/testsuite/config/unix.exp b/find/testsuite/config/unix.exp new file mode 100644 index 0000000..087aeb2 --- /dev/null +++ b/find/testsuite/config/unix.exp @@ -0,0 +1,291 @@ +# -*- TCL -*- +# Test-specific TCL procedures required by DejaGNU. +# Copyright (C) 2000,2003,2004,2005,2006 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Modified by Kevin Dalley from the xargs files. +# Modified by David MacKenzie from the gcc files +# written by Rob Savoye . + + +global OLDFIND +global FTSFIND + +verbose "base_dir is $base_dir" 2 + +# look for OLDFIND and FTSFIND +if { ![info exists OLDFIND] || ![info exists FTSFIND] } { + verbose "Searching for oldfind" + set dir "$base_dir/.." + + set objfile "find.o" + if ![file exists "$dir/$objfile"] then { + error "dir is $dir, but I cannot see $objfile in that directory" + } + if ([findfile $dir/oldfind 1 0]) { + verbose "found oldfind, so ftsfind must be called find" + set OLDFIND [findfile $dir/oldfind $dir/oldfind [transform oldfind]] + set FTSFIND [findfile $dir/find $dir/find [transform find ]] + } else { + verbose "did not find oldfind, so ftsfind must be called ftsfind" + set OLDFIND [findfile $dir/find $dir/find [transform find ]] + set FTSFIND [findfile $dir/ftsfind $dir/ftsfind [transform ftsfind]] + } +} + +verbose "ftsfind is at $FTSFIND" 2 +verbose "oldfind is at $OLDFIND" 2 + +if { [ string equal $FTSFIND $OLDFIND ] } { + error "OLDFIND and FTSFIND are set to $FTSFIND, which can't be right" +} + +if [file exists $FTSFIND] then { + if [file exists $OLDFIND] then { + verbose "FTSFIND=$FTSFIND and OLDFIND=$OLDFIND both exist." 2 + } else { + error "OLDFIND=$OLDFIND, but that program does not exist" + } +} else { + error "FTSFIND=$FTSFIND, but that program does not exist (base_dir is $base_dir)" +} + + +global FINDFLAGS +if ![info exists FINDFLAGS] then { + set FINDFLAGS "" +} + +# Called by runtest. +# Extract and print the version number of find. +proc find_version {} { + global FTSFIND + global FINDFLAGS + + if {[which $FTSFIND] != 0} then { + set tmp [ eval exec $FTSFIND $FINDFLAGS --version find.out.uns" + send_log "$cmd\n" + if $verbose>1 then { + send_user "Spawning \"$cmd\"\n" + } + + if $fail_good then { + send_log "Hoping for this command to return nonzero\n" + } else { + send_log "Hoping for this command to return 0\n" + } + set failed [ catch "exec $cmd" result ] + send_log "return value is $failed, result is '$result'\n" + if $failed { + # The command failed. + if $fail_good then { + send_log "As expected, $cmd returned nonzero\n" + } else { + fail "$testname, $result" + } + } else { + # The command returned 0. + if $fail_good then { + fail "$testname, $result" + } else { + send_log "As expected, $cmd returned 0\n" + } + } + + exec sort < find.out.uns > find.out + file delete find.out.uns + + if [file exists $outfile] then { + # We use the 'sort' above to sort the output of find to ensure + # that the directory entries appear in a predictable order. + # Because in the general case the person compiling and running + # "make check" will have a different collating order to the + # maintainer, we can't guarantee that our "correct" answer + # is already sorted in the correct order. To avoid trying + # to figure out how to select a POSIX environment on a + # random system, we just sort the data again here, using + # the local user's environment. + exec sort < $outfile > cmp.out + set cmp_cmd "$compareprog find.out cmp.out" + + send_log "$cmp_cmd\n" + catch "exec $cmp_cmd" cmpout + if {$cmpout != ""} then { + fail "$testname, standard output differs from the expected result:\n$cmpout" + return + } + } else { + if {[file size find.out] != 0} then { + fail "$testname, output should be empty" + return + } + } + pass "$testname" +} + + +proc find_start { passfail options {infile ""} {output ""} {setup ""}} { + global OLDFIND + global FTSFIND + global FINDFLAGS + global SKIP_OLD + global SKIP_NEW + + if {$infile != ""} then { + set msg "Did not expect infile parameter to be set" + untested $msg + error $msg + } + + if {[which $FTSFIND] == 0} then { + error "$FTSFIND, program does not exist" + exit 1 + } + if {[which $OLDFIND] == 0} then { + error "$OLDFIND, program does not exist" + exit 1 + } + + # Now run the test with each binary, once with each optimisation level. + foreach optlevel {0 1 2 3} { + set flags "$FINDFLAGS -O$optlevel" + if { ![info exists SKIP_OLD] || ! $SKIP_OLD } { + eval $setup + do_find_start old-O$optlevel $OLDFIND $flags $passfail $options $infile $output + } + if { ![info exists SKIP_NEW] || !$SKIP_NEW } { + eval $setup + do_find_start new-O$optlevel $FTSFIND $flags $passfail $options $infile $output + } + } +} + +# Called by runtest. +# Clean up (remove temporary files) before runtest exits. +proc find_exit {} { + catch "exec rm -f find.out cmp.out" +} + +proc path_setting_is_unsafe {} { + global env; + set itemlist [ split $env(PATH) : ] + foreach item $itemlist { + if { [ string equal $item "" ] } { + return 1; + } + if { [ string equal $item "." ] } { + return 1; + } + if { ! [ string match "/*" $item ] } { + # not an absolute path element. + return 1 + } + } + return 0; +} + +proc touch args { + foreach filename $args { + set f [open "$filename" "a"] + close $f + } +} + + + +proc safe_path [ ] { + if { [ path_setting_is_unsafe ] } { + warning { Cannot perform test as your $PATH environment variable includes a reference to the current directory or a directory name which is not absolute } + untested { skipping this test because your $PATH variable is wrongly set } + return 0 + } else { + return 1 + } +} + + +proc fs_superuser [ ] { + set tmpfile "tmp000" + exec rm -f $tmpfile + touch $tmpfile + exec chmod 000 $tmpfile + set retval 0 + + if [ file readable $tmpfile ] { + # On Cygwin, a user with admin rights can read all files, and + # access(foo,R_OK) correctly returns 1 for all files. + warning "You have superuser privileges, skipping this test." + untested {skipping this test because you have superuser privileges} + set retval 1 + } + exec rm -f $tmpfile + return $retval +} diff --git a/find/testsuite/excuses.txt b/find/testsuite/excuses.txt new file mode 100644 index 0000000..2b744e9 --- /dev/null +++ b/find/testsuite/excuses.txt @@ -0,0 +1,47 @@ +g +## things that are hard to test because they are time-dependent. +"amin", amin), /* GNU */ +"anewer", anewer), /* GNU */ +"atime", atime), +"cmin", cmin), /* GNU */ +"cnewer", cnewer), /* GNU */ +"ctime", ctime), +"daystart", daystart), /* GNU */ +"ls", ls), /* GNU, Unix */ +"mmin", mmin), /* GNU */ +"mtime", mtime), +"newer", newer), +"used", used), /* GNU */ + + +## Things that are hard to test because they generate output files. +"fls", fls), /* GNU */ +"fprint", fprint), /* GNU */ +"fprint0", fprint0), /* GNU */ +"fprintf", fprintf), /* GNU */ +"fstype", fstype), /* GNU, Unix */ + +## Things that are hard to test because they rely on features of +## the environment +"gid", gid), /* GNU */ +"uid", uid), /* GNU */ +"user", user), +"group", group), +"mount", xdev), /* Unix */ +"nogroup", nogroup), +"nouser", nouser), +"ok", ok), +"xdev", xdev), +"ignore_readdir_race", ignore_race), /* GNU */ +"noignore_readdir_race", noignore_race), /* GNU */ +"noleaf", noleaf), /* GNU */ + +## Things that might be testable but which I have not yet thought +## about enough. +"nowarn", nowarn), /* GNU */ +"warn", warn), /* GNU */ +{ARG_TEST, "help", parse_help, NULL}, /* GNU */ +{ARG_TEST, "-help", parse_help, NULL}, /* GNU */ +{ARG_TEST, "version", parse_version, NULL}, /* GNU */ +{ARG_TEST, "-version", parse_version, NULL}, /* GNU */ + diff --git a/find/testsuite/find.gnu/access.exp b/find/testsuite/find.gnu/access.exp new file mode 100644 index 0000000..18b7aab --- /dev/null +++ b/find/testsuite/find.gnu/access.exp @@ -0,0 +1,15 @@ +# tests for -readable, -writable, -executable +exec rm -rf tmp +exec mkdir tmp +if { ! [ fs_superuser ] } { + touch tmp/x tmp/w tmp/r tmp/rw tmp/rwx tmp/0 + exec chmod 400 tmp/r + exec chmod 200 tmp/w + exec chmod 100 tmp/x + exec chmod 000 tmp/0 + exec chmod 600 tmp/rw + exec chmod 700 tmp/rwx + find_start p {tmp -readable -printf "r %p\n" , -writable -printf "w %p\n" , -executable -printf "x %p\n"} + exec rm -rf tmp +} + diff --git a/find/testsuite/find.gnu/access.xo b/find/testsuite/find.gnu/access.xo new file mode 100644 index 0000000..464957d --- /dev/null +++ b/find/testsuite/find.gnu/access.xo @@ -0,0 +1,11 @@ +r tmp +r tmp/r +r tmp/rw +r tmp/rwx +w tmp +w tmp/rw +w tmp/rwx +w tmp/w +x tmp +x tmp/rwx +x tmp/x diff --git a/find/testsuite/find.gnu/comma.exp b/find/testsuite/find.gnu/comma.exp new file mode 100644 index 0000000..07a768b --- /dev/null +++ b/find/testsuite/find.gnu/comma.exp @@ -0,0 +1 @@ +find_start p {. -maxdepth 2 -false , -name .} diff --git a/find/testsuite/find.gnu/comma.xo b/find/testsuite/find.gnu/comma.xo new file mode 100644 index 0000000..9c558e3 --- /dev/null +++ b/find/testsuite/find.gnu/comma.xo @@ -0,0 +1 @@ +. diff --git a/find/testsuite/find.gnu/delete.exp b/find/testsuite/find.gnu/delete.exp new file mode 100644 index 0000000..f748321 --- /dev/null +++ b/find/testsuite/find.gnu/delete.exp @@ -0,0 +1,7 @@ +global FTSFIND +global FINDFLAGS +exec rm -rf tmp +exec mkdir tmp tmp/top tmp/top/one tmp/top/one/foo tmp/top/two +eval exec $FTSFIND tmp $FINDFLAGS -path tmp/top/two -delete +find_start p {tmp -print } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/delete.xo b/find/testsuite/find.gnu/delete.xo new file mode 100644 index 0000000..c84cffb --- /dev/null +++ b/find/testsuite/find.gnu/delete.xo @@ -0,0 +1,4 @@ +tmp +tmp/top +tmp/top/one +tmp/top/one/foo diff --git a/find/testsuite/find.gnu/deletedir.exp b/find/testsuite/find.gnu/deletedir.exp new file mode 100644 index 0000000..0d849d9 --- /dev/null +++ b/find/testsuite/find.gnu/deletedir.exp @@ -0,0 +1,9 @@ +global FTSFIND +global FINDFLAGS +exec rm -rf tmp +exec mkdir tmp tmp/top +proc createdir {} { + exec mkdir tmp/top/dir +} +find_start p {tmp -path tmp/top/dir -delete -print} "" "" createdir +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/deletedir.xo b/find/testsuite/find.gnu/deletedir.xo new file mode 100644 index 0000000..9f0155f --- /dev/null +++ b/find/testsuite/find.gnu/deletedir.xo @@ -0,0 +1 @@ +tmp/top/dir diff --git a/find/testsuite/find.gnu/deletefile.exp b/find/testsuite/find.gnu/deletefile.exp new file mode 100644 index 0000000..5473a26 --- /dev/null +++ b/find/testsuite/find.gnu/deletefile.exp @@ -0,0 +1,9 @@ +global FTSFIND +global FINDFLAGS +exec rm -rf tmp +exec mkdir tmp tmp/top +proc touchfile {} { + exec touch tmp/top/file +} +find_start p {tmp -path tmp/top/file -delete -print} "" "" touchfile +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/deletefile.xo b/find/testsuite/find.gnu/deletefile.xo new file mode 100644 index 0000000..425c112 --- /dev/null +++ b/find/testsuite/find.gnu/deletefile.xo @@ -0,0 +1 @@ +tmp/top/file diff --git a/find/testsuite/find.gnu/depth-d.exp b/find/testsuite/find.gnu/depth-d.exp new file mode 100644 index 0000000..8e264a8 --- /dev/null +++ b/find/testsuite/find.gnu/depth-d.exp @@ -0,0 +1,8 @@ +exec rm -rf tmp +exec mkdir tmp +exec mkdir tmp/top +exec mkdir tmp/top/one +exec touch tmp/top/one/foo +exec mkdir tmp/top/two +find_start p {tmp/top -d -mindepth 1 -type d -empty -print} +# exec rm -rf tmp diff --git a/find/testsuite/find.gnu/depth-d.xo b/find/testsuite/find.gnu/depth-d.xo new file mode 100644 index 0000000..e5f6986 --- /dev/null +++ b/find/testsuite/find.gnu/depth-d.xo @@ -0,0 +1 @@ +tmp/top/two diff --git a/find/testsuite/find.gnu/depth.exp b/find/testsuite/find.gnu/depth.exp new file mode 100644 index 0000000..d4913b2 --- /dev/null +++ b/find/testsuite/find.gnu/depth.exp @@ -0,0 +1,8 @@ +exec rm -rf tmp +exec mkdir tmp +exec mkdir tmp/top +exec mkdir tmp/top/one +exec touch tmp/top/one/foo +exec mkdir tmp/top/two +find_start p {tmp/top -depth -mindepth 1 -type d -empty -print} +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/depth.xo b/find/testsuite/find.gnu/depth.xo new file mode 100644 index 0000000..e5f6986 --- /dev/null +++ b/find/testsuite/find.gnu/depth.xo @@ -0,0 +1 @@ +tmp/top/two diff --git a/find/testsuite/find.gnu/empty.exp b/find/testsuite/find.gnu/empty.exp new file mode 100644 index 0000000..78f94d7 --- /dev/null +++ b/find/testsuite/find.gnu/empty.exp @@ -0,0 +1,7 @@ +# tests for -empty +exec rm -rf tmp +exec mkdir tmp +exec true > tmp/empty +exec echo > tmp/notempty +find_start p { tmp -type f -empty } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/empty.xo b/find/testsuite/find.gnu/empty.xo new file mode 100644 index 0000000..f352040 --- /dev/null +++ b/find/testsuite/find.gnu/empty.xo @@ -0,0 +1 @@ +tmp/empty \ No newline at end of file diff --git a/find/testsuite/find.gnu/exec-many-rtn-failure.exp b/find/testsuite/find.gnu/exec-many-rtn-failure.exp new file mode 100644 index 0000000..463f8e2 --- /dev/null +++ b/find/testsuite/find.gnu/exec-many-rtn-failure.exp @@ -0,0 +1,4 @@ +# POSIX: If the invoked command fails, -exec still returns true if it +# was punctuated with +, because that always returns true. However, +# the program as a whole should return a NON-zero exit status. +find_start f { /tmp -exec false \{\} + -printf "yep\n" -quit } diff --git a/find/testsuite/find.gnu/exec-many-rtn-failure.xo b/find/testsuite/find.gnu/exec-many-rtn-failure.xo new file mode 100644 index 0000000..3b6f27e --- /dev/null +++ b/find/testsuite/find.gnu/exec-many-rtn-failure.xo @@ -0,0 +1 @@ +yep diff --git a/find/testsuite/find.gnu/exec-many-rtn-success.exp b/find/testsuite/find.gnu/exec-many-rtn-success.exp new file mode 100644 index 0000000..142929f --- /dev/null +++ b/find/testsuite/find.gnu/exec-many-rtn-success.exp @@ -0,0 +1,4 @@ +# POSIX: If the invoked command succeeds, -exec should return true if +# it was punctuated with +, because that always returns true. However, +# the program as a whole should also return a zero exit status. +find_start p { /tmp -exec true \{\} + -printf "yep\n" -quit } diff --git a/find/testsuite/find.gnu/exec-many-rtn-success.xo b/find/testsuite/find.gnu/exec-many-rtn-success.xo new file mode 100644 index 0000000..3b6f27e --- /dev/null +++ b/find/testsuite/find.gnu/exec-many-rtn-success.xo @@ -0,0 +1 @@ +yep diff --git a/find/testsuite/find.gnu/exec-one-rtn-fail.exp b/find/testsuite/find.gnu/exec-one-rtn-fail.exp new file mode 100644 index 0000000..c3f66fa --- /dev/null +++ b/find/testsuite/find.gnu/exec-one-rtn-fail.exp @@ -0,0 +1,5 @@ +# If -exec \; fails, it should return false. The return +# value of find shoudl stil; be 0, unless another error has +# happened. +find_start p { /tmp -exec false \; -o \( -printf "yep\n" -quit \) } + diff --git a/find/testsuite/find.gnu/exec-one-rtn-fail.xo b/find/testsuite/find.gnu/exec-one-rtn-fail.xo new file mode 100644 index 0000000..3b6f27e --- /dev/null +++ b/find/testsuite/find.gnu/exec-one-rtn-fail.xo @@ -0,0 +1 @@ +yep diff --git a/find/testsuite/find.gnu/exec-one-rtn-success.exp b/find/testsuite/find.gnu/exec-one-rtn-success.exp new file mode 100644 index 0000000..d3c8b99 --- /dev/null +++ b/find/testsuite/find.gnu/exec-one-rtn-success.exp @@ -0,0 +1,3 @@ +# POSIX: If the invoked command succeeds, -exec should return true if +# it was punctuated with ; +find_start p { /tmp -exec true \; -printf "yep\n" -quit } diff --git a/find/testsuite/find.gnu/exec-one-rtn-success.xo b/find/testsuite/find.gnu/exec-one-rtn-success.xo new file mode 100644 index 0000000..3b6f27e --- /dev/null +++ b/find/testsuite/find.gnu/exec-one-rtn-success.xo @@ -0,0 +1 @@ +yep diff --git a/find/testsuite/find.gnu/execdir-hier.exp b/find/testsuite/find.gnu/execdir-hier.exp new file mode 100644 index 0000000..8b43c55 --- /dev/null +++ b/find/testsuite/find.gnu/execdir-hier.exp @@ -0,0 +1,8 @@ +# tests for -execdir ... \+ +# Specifically, ensure that output for separate directoires is not mixed. +if { [ safe_path ] } { + exec rm -rf tmp + exec mkdir tmp tmp/two + find_start p { tmp -execdir echo \{\} \+ } + exec rm -rf tmp +} diff --git a/find/testsuite/find.gnu/execdir-hier.xo b/find/testsuite/find.gnu/execdir-hier.xo new file mode 100644 index 0000000..d9fc49d --- /dev/null +++ b/find/testsuite/find.gnu/execdir-hier.xo @@ -0,0 +1,2 @@ +./tmp +./two diff --git a/find/testsuite/find.gnu/execdir-in-unreadable.exp b/find/testsuite/find.gnu/execdir-in-unreadable.exp new file mode 100644 index 0000000..fe78d5a --- /dev/null +++ b/find/testsuite/find.gnu/execdir-in-unreadable.exp @@ -0,0 +1,11 @@ +# tests for -execdir ... \+ in a directory which is not readable +if { [ safe_path ] } { + exec rm -rf tmp + exec mkdir tmp + exec chmod 755 tmp + exec mkdir tmp/sub + exec chmod 300 tmp/sub + find_start p { tmp -maxdepth 1 -execdir true \{\} \+ } + exec chmod 700 tmp/sub + exec rm -rf tmp +} diff --git a/find/testsuite/find.gnu/execdir-one.exp b/find/testsuite/find.gnu/execdir-one.exp new file mode 100644 index 0000000..53f2e00 --- /dev/null +++ b/find/testsuite/find.gnu/execdir-one.exp @@ -0,0 +1,7 @@ +# tests for -name +if { [ safe_path ] } { + exec rm -rf tmp + exec mkdir tmp tmp/fred tmp/jim + find_start p {tmp -name fred -execdir echo \{\} \; } + exec rm -rf tmp +} diff --git a/find/testsuite/find.gnu/execdir-one.xo b/find/testsuite/find.gnu/execdir-one.xo new file mode 100644 index 0000000..8584084 --- /dev/null +++ b/find/testsuite/find.gnu/execdir-one.xo @@ -0,0 +1 @@ +./fred diff --git a/find/testsuite/find.gnu/execdir-pwd.exp b/find/testsuite/find.gnu/execdir-pwd.exp new file mode 100644 index 0000000..7726f6e --- /dev/null +++ b/find/testsuite/find.gnu/execdir-pwd.exp @@ -0,0 +1,20 @@ +# tests for -execdir pwd \+ +if { [ safe_path ] } { + global SKIP_OLD + + exec rm -rf tmp + exec mkdir tmp + + # Create an empty shell script. + exec touch tmp/foo + exec chmod +x tmp/foo + + # The -execdir should find the "foo" in the current directory. + # If not, the find command is probably executing the command + # built up by -execdir in the wrong directory. + + set SKIP_OLD 1 + find_start p {tmp -name foo -execdir sh ./foo \{\} + } "" + set SKIP_OLD 0 + exec rm -rf tmp +} diff --git a/find/testsuite/find.gnu/execdir-root-only.exp b/find/testsuite/find.gnu/execdir-root-only.exp new file mode 100644 index 0000000..a957e7e --- /dev/null +++ b/find/testsuite/find.gnu/execdir-root-only.exp @@ -0,0 +1,21 @@ +# Bug report by Bas van Gompel: +# +# This appears to work well. However when the rootdir is passed, +# something looks fishy: +# +# find / -mindepth 0 -maxdepth 0 -execdir echo {} \; +# .// +# +# I also spotted, when `+' is used: +# +# find / -mindepth 0 -maxdepth 0 -execdir echo == {} + +# == +# == .// +# +# (Notice the first line of output, which should not be there.) + + +# This test checks the second of these two cases. +if { [ safe_path ] } { + find_start p { / -mindepth 0 -maxdepth 0 -execdir echo == "{}" + } +} diff --git a/find/testsuite/find.gnu/execdir-root-only.xo b/find/testsuite/find.gnu/execdir-root-only.xo new file mode 100644 index 0000000..c975392 --- /dev/null +++ b/find/testsuite/find.gnu/execdir-root-only.xo @@ -0,0 +1 @@ +== / diff --git a/find/testsuite/find.gnu/false.exp b/find/testsuite/find.gnu/false.exp new file mode 100644 index 0000000..31f98a5 --- /dev/null +++ b/find/testsuite/find.gnu/false.exp @@ -0,0 +1,5 @@ +# test for -false. +exec rm -rf tmp +exec mkdir tmp tmp/fred tmp/fred/jim +find_start p { tmp -depth -print -false -print } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/false.xo b/find/testsuite/find.gnu/false.xo new file mode 100644 index 0000000..9baad64 --- /dev/null +++ b/find/testsuite/find.gnu/false.xo @@ -0,0 +1,3 @@ +tmp/fred/jim +tmp/fred +tmp diff --git a/find/testsuite/find.gnu/follow-arg-parent-symlink.exp b/find/testsuite/find.gnu/follow-arg-parent-symlink.exp new file mode 100644 index 0000000..52f374a --- /dev/null +++ b/find/testsuite/find.gnu/follow-arg-parent-symlink.exp @@ -0,0 +1,6 @@ +exec rm -rf tmp +exec mkdir tmp tmp/dir1 tmp/dir1/dir2 +exec touch tmp/dir1/dir2/foo +exec ln -s dir1 tmp/link1 +find_start p {tmp/link1/dir2 -type f -print } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/follow-arg-parent-symlink.xo b/find/testsuite/find.gnu/follow-arg-parent-symlink.xo new file mode 100644 index 0000000..0cf5187 --- /dev/null +++ b/find/testsuite/find.gnu/follow-arg-parent-symlink.xo @@ -0,0 +1 @@ +tmp/link1/dir2/foo diff --git a/find/testsuite/find.gnu/follow-basic.exp b/find/testsuite/find.gnu/follow-basic.exp new file mode 100644 index 0000000..bc62a2d --- /dev/null +++ b/find/testsuite/find.gnu/follow-basic.exp @@ -0,0 +1,10 @@ +# Verifies that the -follow option is correctly implemented, +# but does this by using the GNU extension -printf. +exec rm -rf tmp + +exec mkdir tmp +exec ln -s /etc/passwd tmp/LINK +exec ln -s /NOSUCHFILE tmp/BROKEN + +# Links should all be dereferenced unless they are broken. +find_start p { tmp/LINK tmp/BROKEN tmp -follow -printf "%y %d %p\n" } diff --git a/find/testsuite/find.gnu/follow-basic.xo b/find/testsuite/find.gnu/follow-basic.xo new file mode 100644 index 0000000..f2c7940 --- /dev/null +++ b/find/testsuite/find.gnu/follow-basic.xo @@ -0,0 +1,5 @@ +d 0 tmp +f 0 tmp/LINK +f 1 tmp/LINK +l 0 tmp/BROKEN +l 1 tmp/BROKEN diff --git a/find/testsuite/find.gnu/fprint-unwritable.exp b/find/testsuite/find.gnu/fprint-unwritable.exp new file mode 100644 index 0000000..905894d --- /dev/null +++ b/find/testsuite/find.gnu/fprint-unwritable.exp @@ -0,0 +1,9 @@ +# test for -fprint to unwritable dest (we expect this to fail) +if { ! [ fs_superuser ] } { + exec rm -rf tmp + file mkdir tmp + exec touch tmp/unwritable + exec chmod 444 tmp/unwritable + find_start f { tmp -fprint tmp/unwritable } + exec rm -rf tmp +} diff --git a/find/testsuite/find.gnu/fprint0_stdout.exp b/find/testsuite/find.gnu/fprint0_stdout.exp new file mode 100644 index 0000000..c5a5aa8 --- /dev/null +++ b/find/testsuite/find.gnu/fprint0_stdout.exp @@ -0,0 +1,5 @@ +# test for -fprint +exec rm -rf tmp +exec touch tmp +find_start p { tmp -fprint0 /dev/stdout } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/fprint0_stdout.xo b/find/testsuite/find.gnu/fprint0_stdout.xo new file mode 100644 index 0000000000000000000000000000000000000000..60688ddb683a27d5048ee3f025f587b27fadf6d1 GIT binary patch literal 5 McwQ^XEnwgR00mb8TmS$7 literal 0 HcwPel00001 diff --git a/find/testsuite/find.gnu/gnu-or.exp b/find/testsuite/find.gnu/gnu-or.exp new file mode 100644 index 0000000..92a2939 --- /dev/null +++ b/find/testsuite/find.gnu/gnu-or.exp @@ -0,0 +1,5 @@ +# test for -false. +exec rm -rf tmp +exec mkdir tmp tmp/fred tmp/fred/jim +find_start p { tmp -depth -print -false -or -print } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/gnu-or.xo b/find/testsuite/find.gnu/gnu-or.xo new file mode 100644 index 0000000..8484390 --- /dev/null +++ b/find/testsuite/find.gnu/gnu-or.xo @@ -0,0 +1,6 @@ +tmp/fred/jim +tmp/fred/jim +tmp/fred +tmp/fred +tmp +tmp diff --git a/find/testsuite/find.gnu/gnuand.exp b/find/testsuite/find.gnu/gnuand.exp new file mode 100644 index 0000000..2e685ca --- /dev/null +++ b/find/testsuite/find.gnu/gnuand.exp @@ -0,0 +1,5 @@ +# tests for -name +exec rm -rf tmp +exec mkdir tmp tmp/fred tmp/jim +find_start p {tmp -name fred -and -print} +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/gnuand.xo b/find/testsuite/find.gnu/gnuand.xo new file mode 100644 index 0000000..8cc8940 --- /dev/null +++ b/find/testsuite/find.gnu/gnuand.xo @@ -0,0 +1 @@ +tmp/fred diff --git a/find/testsuite/find.gnu/gnunot.exp b/find/testsuite/find.gnu/gnunot.exp new file mode 100644 index 0000000..4951c1e --- /dev/null +++ b/find/testsuite/find.gnu/gnunot.exp @@ -0,0 +1,5 @@ +# tests for ! +exec rm -rf tmp +exec mkdir tmp tmp/fred tmp/jim +find_start p {tmp -not -name fred -print} +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/gnunot.xo b/find/testsuite/find.gnu/gnunot.xo new file mode 100644 index 0000000..776fed4 --- /dev/null +++ b/find/testsuite/find.gnu/gnunot.xo @@ -0,0 +1,2 @@ +tmp +tmp/jim \ No newline at end of file diff --git a/find/testsuite/find.gnu/ilname.exp b/find/testsuite/find.gnu/ilname.exp new file mode 100644 index 0000000..9b77b6a --- /dev/null +++ b/find/testsuite/find.gnu/ilname.exp @@ -0,0 +1,7 @@ +# tests for -ilname +exec rm -rf tmp +exec mkdir tmp +exec touch tmp/one +exec ln -s one tmp/two +find_start p {tmp -ilname One -print} +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/ilname.xo b/find/testsuite/find.gnu/ilname.xo new file mode 100644 index 0000000..c7b45df --- /dev/null +++ b/find/testsuite/find.gnu/ilname.xo @@ -0,0 +1 @@ +tmp/two diff --git a/find/testsuite/find.gnu/iname.exp b/find/testsuite/find.gnu/iname.exp new file mode 100644 index 0000000..c8c26a4 --- /dev/null +++ b/find/testsuite/find.gnu/iname.exp @@ -0,0 +1,5 @@ +# tests for -name +exec rm -rf tmp +exec mkdir tmp tmp/fred tmp/jim +find_start p {tmp -iname frED -print} +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/iname.xo b/find/testsuite/find.gnu/iname.xo new file mode 100644 index 0000000..8cc8940 --- /dev/null +++ b/find/testsuite/find.gnu/iname.xo @@ -0,0 +1 @@ +tmp/fred diff --git a/find/testsuite/find.gnu/inum.exp b/find/testsuite/find.gnu/inum.exp new file mode 100644 index 0000000..75614f5 --- /dev/null +++ b/find/testsuite/find.gnu/inum.exp @@ -0,0 +1,7 @@ +# test for -inum +exec rm -rf tmp tmp2 +exec touch tmp tmp2 +set list [ split [ exec ls -1i tmp ] ] +set inode [ lindex $list 0 ] +find_start p " tmp tmp2 -inum $inode -print " +exec rm -rf tmp tmp2 diff --git a/find/testsuite/find.gnu/inum.xo b/find/testsuite/find.gnu/inum.xo new file mode 100644 index 0000000..a9a5aec --- /dev/null +++ b/find/testsuite/find.gnu/inum.xo @@ -0,0 +1 @@ +tmp diff --git a/find/testsuite/find.gnu/ipath.exp b/find/testsuite/find.gnu/ipath.exp new file mode 100644 index 0000000..0013e48 --- /dev/null +++ b/find/testsuite/find.gnu/ipath.exp @@ -0,0 +1,5 @@ +# test for -path +exec rm -rf tmp +exec mkdir tmp tmp/top tmp/top/ONE tmp/top/ONE/two +find_start p {tmp/top -ipath Tmp/TOP/one -print 2>/dev/null } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/ipath.xo b/find/testsuite/find.gnu/ipath.xo new file mode 100644 index 0000000..6ac3ca0 --- /dev/null +++ b/find/testsuite/find.gnu/ipath.xo @@ -0,0 +1 @@ +tmp/top/ONE diff --git a/find/testsuite/find.gnu/iregex1.exp b/find/testsuite/find.gnu/iregex1.exp new file mode 100644 index 0000000..c24cdf0 --- /dev/null +++ b/find/testsuite/find.gnu/iregex1.exp @@ -0,0 +1,5 @@ +# test for -iregex +exec rm -rf tmp +exec mkdir tmp tmp/d tmp/d/D tmp/d/D/d tmp/d/D/d/e +find_start p {tmp -iregex {tmp\(/d\)*} -print } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/iregex1.xo b/find/testsuite/find.gnu/iregex1.xo new file mode 100644 index 0000000..8901de0 --- /dev/null +++ b/find/testsuite/find.gnu/iregex1.xo @@ -0,0 +1,4 @@ +tmp +tmp/d +tmp/d/D +tmp/d/D/d diff --git a/find/testsuite/find.gnu/iwholename.exp b/find/testsuite/find.gnu/iwholename.exp new file mode 100644 index 0000000..d58656a --- /dev/null +++ b/find/testsuite/find.gnu/iwholename.exp @@ -0,0 +1,5 @@ +# test for -iwholename +exec rm -rf tmp +exec mkdir tmp tmp/top tmp/top/one tmp/top/one/two +find_start p {tmp/top -iwholename tmP/TOP/One -print } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/iwholename.xo b/find/testsuite/find.gnu/iwholename.xo new file mode 100644 index 0000000..66d2877 --- /dev/null +++ b/find/testsuite/find.gnu/iwholename.xo @@ -0,0 +1 @@ +tmp/top/one diff --git a/find/testsuite/find.gnu/lname.exp b/find/testsuite/find.gnu/lname.exp new file mode 100644 index 0000000..ada635f --- /dev/null +++ b/find/testsuite/find.gnu/lname.exp @@ -0,0 +1,7 @@ +# tests for -lname +exec rm -rf tmp +exec mkdir tmp +exec touch tmp/one +exec ln -s one tmp/two +find_start p {tmp -lname one -print} +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/lname.xo b/find/testsuite/find.gnu/lname.xo new file mode 100644 index 0000000..c7b45df --- /dev/null +++ b/find/testsuite/find.gnu/lname.xo @@ -0,0 +1 @@ +tmp/two diff --git a/find/testsuite/find.gnu/mindepth-arg.exp b/find/testsuite/find.gnu/mindepth-arg.exp new file mode 100644 index 0000000..ba4d0dc --- /dev/null +++ b/find/testsuite/find.gnu/mindepth-arg.exp @@ -0,0 +1,9 @@ +# Argument validation for -mindepth and -maxdepth +proc prepare {} { + exec rm -rf tmp + exec mkdir tmp tmp/top tmp/top/one +} +foreach predicate { -mindepth -maxdepth } { + find_start p "tmp/top $predicate 0 -print -quit" {} {} prepare +} +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/mindepth-arg.xo b/find/testsuite/find.gnu/mindepth-arg.xo new file mode 100644 index 0000000..ddcb130 --- /dev/null +++ b/find/testsuite/find.gnu/mindepth-arg.xo @@ -0,0 +1 @@ +tmp/top \ No newline at end of file diff --git a/find/testsuite/find.gnu/mindepth-badarg.exp b/find/testsuite/find.gnu/mindepth-badarg.exp new file mode 100644 index 0000000..d098af0 --- /dev/null +++ b/find/testsuite/find.gnu/mindepth-badarg.exp @@ -0,0 +1,12 @@ +# Argument validation for -mindepth and -maxdepth + +exec rm -rf tmp +exec mkdir tmp tmp/top tmp/top/one + +foreach predicate { -mindepth -maxdepth } { + # Try a variety of bad arguments. + foreach arg { x 0x01 Fnord "" +1 1.2 -3 3e1 } { + find_start f "tmp/top $predicate $arg -quit" + } +} +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/name-opt.exp b/find/testsuite/find.gnu/name-opt.exp new file mode 100644 index 0000000..0ec1d8d --- /dev/null +++ b/find/testsuite/find.gnu/name-opt.exp @@ -0,0 +1,8 @@ +# Verifies that -name is not optimized in front of -prune +exec rm -rf tmp +exec mkdir tmp +exec mkdir tmp/top +exec mkdir tmp/top/one +exec touch tmp/top/one/foo +find_start p {tmp/top -prune -name foo} +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/name-opt.xo b/find/testsuite/find.gnu/name-opt.xo new file mode 100644 index 0000000..e69de29 diff --git a/find/testsuite/find.gnu/name-period.exp b/find/testsuite/find.gnu/name-period.exp new file mode 100644 index 0000000..42858fe --- /dev/null +++ b/find/testsuite/find.gnu/name-period.exp @@ -0,0 +1,10 @@ +# Verifies that -name '*bar' will match quux/.foobar. +# See http://standards.ieee.org/reading/ieee/interp/1003-2-92_int/pasc-1003.2-126.html +# Also see http://savannah.gnu.org/bugs/?func=detailitem&item_id=10757 +exec rm -rf tmp +exec mkdir tmp +exec mkdir tmp/top +exec mkdir tmp/top/.one +exec mkdir tmp/top/bane +find_start p {tmp/top -name \*ne -print} +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/name-period.xo b/find/testsuite/find.gnu/name-period.xo new file mode 100644 index 0000000..53cbcdc --- /dev/null +++ b/find/testsuite/find.gnu/name-period.xo @@ -0,0 +1,2 @@ +tmp/top/bane +tmp/top/.one diff --git a/find/testsuite/find.gnu/name-slash.exp b/find/testsuite/find.gnu/name-slash.exp new file mode 100644 index 0000000..bd9a187 --- /dev/null +++ b/find/testsuite/find.gnu/name-slash.exp @@ -0,0 +1,2 @@ +# tests for '-name /' +find_start p {/ /// -maxdepth 0 -name /} diff --git a/find/testsuite/find.gnu/name-slash.xo b/find/testsuite/find.gnu/name-slash.xo new file mode 100644 index 0000000..6c24144 --- /dev/null +++ b/find/testsuite/find.gnu/name-slash.xo @@ -0,0 +1,2 @@ +/ +/// diff --git a/find/testsuite/find.gnu/path.exp b/find/testsuite/find.gnu/path.exp new file mode 100644 index 0000000..40fa01e --- /dev/null +++ b/find/testsuite/find.gnu/path.exp @@ -0,0 +1,5 @@ +# test for -path +exec rm -rf tmp +exec mkdir tmp tmp/top tmp/top/one tmp/top/one/two +find_start p {tmp/top -path tmp/top/one -print } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/path.xo b/find/testsuite/find.gnu/path.xo new file mode 100644 index 0000000..66d2877 --- /dev/null +++ b/find/testsuite/find.gnu/path.xo @@ -0,0 +1 @@ +tmp/top/one diff --git a/find/testsuite/find.gnu/perm-slash.exp b/find/testsuite/find.gnu/perm-slash.exp new file mode 100644 index 0000000..a5be0ab --- /dev/null +++ b/find/testsuite/find.gnu/perm-slash.exp @@ -0,0 +1,19 @@ +# tests for -perm /nnn +# The slash is a GNU extension + +exec rm -rf tmp +exec mkdir tmp + +## set up a selection of test files +foreach perm { 400 200 555 700 000 050 } { + exec touch "tmp/$perm" + exec chmod $perm "tmp/$perm" +} + +# +# The -o operator normally has a short-circuit effect, +# so we have to use "-exec false \;" to make sure that +# all the parenthesised expression actually fail. +# +find_start p {tmp -mindepth 1 -perm /555 -printf "p/555 %p\n" } +# exec rm -rf tmp tmp2 diff --git a/find/testsuite/find.gnu/perm-slash.xo b/find/testsuite/find.gnu/perm-slash.xo new file mode 100644 index 0000000..f84e5b7 --- /dev/null +++ b/find/testsuite/find.gnu/perm-slash.xo @@ -0,0 +1,4 @@ +p/555 tmp/050 +p/555 tmp/555 +p/555 tmp/400 +p/555 tmp/700 \ No newline at end of file diff --git a/find/testsuite/find.gnu/perm.exp b/find/testsuite/find.gnu/perm.exp new file mode 100644 index 0000000..d4913f8 --- /dev/null +++ b/find/testsuite/find.gnu/perm.exp @@ -0,0 +1,7 @@ +# tests for -perm -0100 (-perm with -) +exec rm -rf tmp +exec mkdir tmp +exec touch tmp/fred +exec chmod 444 tmp/fred +find_start p {tmp -perm -0100} +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/perm.xo b/find/testsuite/find.gnu/perm.xo new file mode 100644 index 0000000..a9a5aec --- /dev/null +++ b/find/testsuite/find.gnu/perm.xo @@ -0,0 +1 @@ +tmp diff --git a/find/testsuite/find.gnu/perm000.exp b/find/testsuite/find.gnu/perm000.exp new file mode 100644 index 0000000..9217129 --- /dev/null +++ b/find/testsuite/find.gnu/perm000.exp @@ -0,0 +1,7 @@ +# tests for -perm /000 (Savannah bug #14748). +exec rm -rf tmp +exec mkdir tmp +exec touch tmp/fred tmp/wilma +exec chmod 000 tmp/fred +find_start p {tmp -perm /000 -print 2>/dev/null } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/perm000.xo b/find/testsuite/find.gnu/perm000.xo new file mode 100644 index 0000000..7a1f6e9 --- /dev/null +++ b/find/testsuite/find.gnu/perm000.xo @@ -0,0 +1,3 @@ +tmp +tmp/fred +tmp/wilma diff --git a/find/testsuite/find.gnu/posix-dflt.exp b/find/testsuite/find.gnu/posix-dflt.exp new file mode 100644 index 0000000..3e7d573 --- /dev/null +++ b/find/testsuite/find.gnu/posix-dflt.exp @@ -0,0 +1,10 @@ +# Verifies that the POSIX behaviour without -P or -L options is +# correctly implemented, but does this by using the GNU extension +# -printf. +exec rm -rf tmp + +exec mkdir tmp +exec ln -s /etc/passwd tmp/LINK +exec ln -s /NOSUCHFILE tmp/BROKEN + +find_start p { -P tmp/LINK tmp/BROKEN tmp -printf "%y %d %p\n" } diff --git a/find/testsuite/find.gnu/posix-dflt.xo b/find/testsuite/find.gnu/posix-dflt.xo new file mode 100644 index 0000000..7359d24 --- /dev/null +++ b/find/testsuite/find.gnu/posix-dflt.xo @@ -0,0 +1,5 @@ +d 0 tmp +l 0 tmp/BROKEN +l 0 tmp/LINK +l 1 tmp/BROKEN +l 1 tmp/LINK diff --git a/find/testsuite/find.gnu/posix-h.exp b/find/testsuite/find.gnu/posix-h.exp new file mode 100644 index 0000000..4023b25 --- /dev/null +++ b/find/testsuite/find.gnu/posix-h.exp @@ -0,0 +1,13 @@ +# Verifies that the POSIX -H option is correctly implemented, +# but does this by using the GNU extension -printf. +exec rm -rf tmp + +exec mkdir tmp +exec ln -s /etc/passwd tmp/LINK +exec ln -s /NOSUCHFILE tmp/BROKEN + +# If the file is not on the command line, the link is not +# dereferenced, and so tmp/LINK should appear at depth 1 +# but as type "l". tmp itself appears first at depth 0 as +# a directory. +find_start p { -H tmp/LINK tmp/BROKEN tmp -printf "H1: %y %d %p\n" } diff --git a/find/testsuite/find.gnu/posix-h.xo b/find/testsuite/find.gnu/posix-h.xo new file mode 100644 index 0000000..4d503f7 --- /dev/null +++ b/find/testsuite/find.gnu/posix-h.xo @@ -0,0 +1,5 @@ +H1: d 0 tmp +H1: f 0 tmp/LINK +H1: l 0 tmp/BROKEN +H1: l 1 tmp/BROKEN +H1: l 1 tmp/LINK diff --git a/find/testsuite/find.gnu/posix-l.exp b/find/testsuite/find.gnu/posix-l.exp new file mode 100644 index 0000000..6055edf --- /dev/null +++ b/find/testsuite/find.gnu/posix-l.exp @@ -0,0 +1,10 @@ +# Verifies that the POSIX -L option is correctly implemented, +# but does this by using the GNU extension -printf. +exec rm -rf tmp + +exec mkdir tmp +exec ln -s /etc/passwd tmp/LINK +exec ln -s /NOSUCHFILE tmp/BROKEN + +# Links should all be dereferenced unless they are broken. +find_start p { -L tmp/LINK tmp/BROKEN tmp -printf "%y %d %p\n" } diff --git a/find/testsuite/find.gnu/posix-l.xo b/find/testsuite/find.gnu/posix-l.xo new file mode 100644 index 0000000..f2c7940 --- /dev/null +++ b/find/testsuite/find.gnu/posix-l.xo @@ -0,0 +1,5 @@ +d 0 tmp +f 0 tmp/LINK +f 1 tmp/LINK +l 0 tmp/BROKEN +l 1 tmp/BROKEN diff --git a/find/testsuite/find.gnu/posix-perminvalid.exp b/find/testsuite/find.gnu/posix-perminvalid.exp new file mode 100644 index 0000000..7463a4a --- /dev/null +++ b/find/testsuite/find.gnu/posix-perminvalid.exp @@ -0,0 +1,17 @@ +# tests for non-POSIX-compliant argument to -perm +# Remember any previous value of POSIXLY_CORRECT (if there was one) +if [info exists env(POSIXLY_CORRECT)] { + set oldval env(POSIXLY_CORRECT) +} + +# Set POSIXLY_CORRECT and perform the test +set env(POSIXLY_CORRECT) 1 +find_start f {. -perm +a+x} + +# Set POSIXLY_CORRECT to its previous value +if [info exists oldval] { + set env(POSIXLY_CORRECT) $oldval +} else { + unset env(POSIXLY_CORRECT) +} + diff --git a/find/testsuite/find.gnu/print0.exp b/find/testsuite/find.gnu/print0.exp new file mode 100644 index 0000000..11a3cb6 --- /dev/null +++ b/find/testsuite/find.gnu/print0.exp @@ -0,0 +1,5 @@ +# test for -print0. +exec rm -rf tmp +exec touch tmp +find_start p { tmp -print0 } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/print0.xo b/find/testsuite/find.gnu/print0.xo new file mode 100644 index 0000000000000000000000000000000000000000..b947b3b7e55900b5b3261f7bf0fd726189e503e2 GIT binary patch literal 4 LcwQ^XEnolu1N#9| literal 0 HcwPel00001 diff --git a/find/testsuite/find.gnu/print_stdout.exp b/find/testsuite/find.gnu/print_stdout.exp new file mode 100644 index 0000000..5bbeefa --- /dev/null +++ b/find/testsuite/find.gnu/print_stdout.exp @@ -0,0 +1,5 @@ +# test for -fprint +exec rm -rf tmp +exec touch tmp +find_start p { tmp -fprint /dev/stdout } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/print_stdout.xo b/find/testsuite/find.gnu/print_stdout.xo new file mode 100644 index 0000000..a9a5aec --- /dev/null +++ b/find/testsuite/find.gnu/print_stdout.xo @@ -0,0 +1 @@ +tmp diff --git a/find/testsuite/find.gnu/printf-h.exp b/find/testsuite/find.gnu/printf-h.exp new file mode 100644 index 0000000..fb0187c --- /dev/null +++ b/find/testsuite/find.gnu/printf-h.exp @@ -0,0 +1,5 @@ +# Test case for Savannah bug ID #12085. +exec rm -rf tmp +exec touch tmp +find_start p {tmp -printf "RESULT: %h %f\n" } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/printf-h.xo b/find/testsuite/find.gnu/printf-h.xo new file mode 100644 index 0000000..dc6ce01 --- /dev/null +++ b/find/testsuite/find.gnu/printf-h.xo @@ -0,0 +1 @@ +RESULT: . tmp diff --git a/find/testsuite/find.gnu/printf-slash.exp b/find/testsuite/find.gnu/printf-slash.exp new file mode 100644 index 0000000..3f46023 --- /dev/null +++ b/find/testsuite/find.gnu/printf-slash.exp @@ -0,0 +1 @@ +find_start p {/ /// -maxdepth 0 -printf "%p %f\\n"} diff --git a/find/testsuite/find.gnu/printf-slash.xo b/find/testsuite/find.gnu/printf-slash.xo new file mode 100644 index 0000000..50f8192 --- /dev/null +++ b/find/testsuite/find.gnu/printf-slash.xo @@ -0,0 +1,2 @@ +/ / +/// / diff --git a/find/testsuite/find.gnu/printf-symlink.exp b/find/testsuite/find.gnu/printf-symlink.exp new file mode 100644 index 0000000..6acc3e6 --- /dev/null +++ b/find/testsuite/find.gnu/printf-symlink.exp @@ -0,0 +1,6 @@ +exec rm -rf tmp +exec mkdir tmp +exec touch tmp/file +exec ln -s file tmp/LINK +find_start p {tmp/LINK -printf "RESULT: %y %Y %p\n" -printf "RESULT2: %Y %y %p\n" } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/printf-symlink.xo b/find/testsuite/find.gnu/printf-symlink.xo new file mode 100644 index 0000000..cc2b69c --- /dev/null +++ b/find/testsuite/find.gnu/printf-symlink.xo @@ -0,0 +1,2 @@ +RESULT: l f tmp/LINK +RESULT2: f l tmp/LINK diff --git a/find/testsuite/find.gnu/printf.exp b/find/testsuite/find.gnu/printf.exp new file mode 100644 index 0000000..c504d85 --- /dev/null +++ b/find/testsuite/find.gnu/printf.exp @@ -0,0 +1,6 @@ +exec rm -rf tmp +exec mkdir tmp +exec touch tmp/file +exec chmod 600 tmp/file +find_start p {tmp -type f -printf "a %d\n" -printf "b %f\n" -printf "c %h\n" -printf "d %H\n" -printf "e %l\n" -printf "f %m\n" -printf "g %n\n" -printf "h %p\n" -printf "i %P\n" -printf "j %y\n" -printf "k %Y\n"} +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/printf.xo b/find/testsuite/find.gnu/printf.xo new file mode 100644 index 0000000..4eda7e3 --- /dev/null +++ b/find/testsuite/find.gnu/printf.xo @@ -0,0 +1,11 @@ +a 1 +b file +c tmp +d tmp +e +f 600 +g 1 +h tmp/file +i file +j f +k f diff --git a/find/testsuite/find.gnu/printfHdfl.exp b/find/testsuite/find.gnu/printfHdfl.exp new file mode 100644 index 0000000..517ecc5 --- /dev/null +++ b/find/testsuite/find.gnu/printfHdfl.exp @@ -0,0 +1,2 @@ +# verify that %H with no argument assumes "." +find_start p { -maxdepth 0 -printf "%H" } diff --git a/find/testsuite/find.gnu/printfHdfl.xo b/find/testsuite/find.gnu/printfHdfl.xo new file mode 100644 index 0000000..9c558e3 --- /dev/null +++ b/find/testsuite/find.gnu/printfHdfl.xo @@ -0,0 +1 @@ +. diff --git a/find/testsuite/find.gnu/prune-default-print.exp b/find/testsuite/find.gnu/prune-default-print.exp new file mode 100644 index 0000000..b43a6b9 --- /dev/null +++ b/find/testsuite/find.gnu/prune-default-print.exp @@ -0,0 +1,5 @@ +# Verifies that default -print is used with -prune +exec rm -rf tmp +exec mkdir tmp +find_start p {tmp -prune} +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/prune-default-print.xo b/find/testsuite/find.gnu/prune-default-print.xo new file mode 100644 index 0000000..a9a5aec --- /dev/null +++ b/find/testsuite/find.gnu/prune-default-print.xo @@ -0,0 +1 @@ +tmp diff --git a/find/testsuite/find.gnu/quit.exp b/find/testsuite/find.gnu/quit.exp new file mode 100644 index 0000000..610ad7f --- /dev/null +++ b/find/testsuite/find.gnu/quit.exp @@ -0,0 +1,5 @@ +# test for -quit. +exec rm -rf tmp +exec mkdir tmp tmp/top tmp/top/one tmp/top/one/foo tmp/top/two +find_start p {tmp/top/one tmp/top/two -depth -print -name one -quit } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/quit.xo b/find/testsuite/find.gnu/quit.xo new file mode 100644 index 0000000..14c1d8d --- /dev/null +++ b/find/testsuite/find.gnu/quit.xo @@ -0,0 +1,2 @@ +tmp/top/one/foo +tmp/top/one diff --git a/find/testsuite/find.gnu/regex1.exp b/find/testsuite/find.gnu/regex1.exp new file mode 100644 index 0000000..071dcaf --- /dev/null +++ b/find/testsuite/find.gnu/regex1.exp @@ -0,0 +1,5 @@ +# test for -regex +exec rm -rf tmp +exec mkdir tmp tmp/d tmp/d/d tmp/d/d/d tmp/d/d/d/e +find_start p {tmp -regex {tmp\(/d\)*} -print } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/regex1.xo b/find/testsuite/find.gnu/regex1.xo new file mode 100644 index 0000000..c4259bb --- /dev/null +++ b/find/testsuite/find.gnu/regex1.xo @@ -0,0 +1,4 @@ +tmp +tmp/d +tmp/d/d +tmp/d/d/d diff --git a/find/testsuite/find.gnu/regex2.exp b/find/testsuite/find.gnu/regex2.exp new file mode 100644 index 0000000..71cc1e3 --- /dev/null +++ b/find/testsuite/find.gnu/regex2.exp @@ -0,0 +1,5 @@ +# test for -regex +exec rm -rf tmp +exec mkdir tmp tmp/d tmp/d/d tmp/d/d/d tmp/d/d/d/e +find_start p {tmp -regextype posix-extended -regex {tmp(/d)*} -print } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/regex2.xo b/find/testsuite/find.gnu/regex2.xo new file mode 100644 index 0000000..c4259bb --- /dev/null +++ b/find/testsuite/find.gnu/regex2.xo @@ -0,0 +1,4 @@ +tmp +tmp/d +tmp/d/d +tmp/d/d/d diff --git a/find/testsuite/find.gnu/samefile-copy.exp b/find/testsuite/find.gnu/samefile-copy.exp new file mode 100644 index 0000000..69e47cd --- /dev/null +++ b/find/testsuite/find.gnu/samefile-copy.exp @@ -0,0 +1,8 @@ +# test for -samefile +exec rm -rf tmp +exec mkdir tmp tmp/one tmp/two +exec touch tmp/file1 tmp/file2 +exec cp tmp/file1 tmp/one/link +exec cp tmp/file2 tmp/two/link +find_start p {tmp/one tmp/two -samefile tmp/file1 -print} +# exec rm -rf tmp diff --git a/find/testsuite/find.gnu/samefile-copy.xo b/find/testsuite/find.gnu/samefile-copy.xo new file mode 100644 index 0000000..e69de29 diff --git a/find/testsuite/find.gnu/samefile-link.exp b/find/testsuite/find.gnu/samefile-link.exp new file mode 100644 index 0000000..e288160 --- /dev/null +++ b/find/testsuite/find.gnu/samefile-link.exp @@ -0,0 +1,9 @@ +# test for -samefile +exec rm -rf tmp +exec mkdir tmp tmp/one tmp/two +exec touch tmp/file1 tmp/file2 +exec ln tmp/file1 tmp/one/link +exec ln -s tmp/file1 tmp/one/symlink +exec ln tmp/file2 tmp/two/link +find_start p {tmp/one tmp/two -samefile tmp/file1 -print} +# exec rm -rf tmp diff --git a/find/testsuite/find.gnu/samefile-link.xo b/find/testsuite/find.gnu/samefile-link.xo new file mode 100644 index 0000000..e53b73e --- /dev/null +++ b/find/testsuite/find.gnu/samefile-link.xo @@ -0,0 +1 @@ +tmp/one/link diff --git a/find/testsuite/find.gnu/samefile-missing.exp b/find/testsuite/find.gnu/samefile-missing.exp new file mode 100644 index 0000000..143f117 --- /dev/null +++ b/find/testsuite/find.gnu/samefile-missing.exp @@ -0,0 +1,4 @@ +# test for diagnosis of the fact that the argument to -samefile is missing +find_start f ". -samefile" + + diff --git a/find/testsuite/find.gnu/samefile-p-brokenlink.exp b/find/testsuite/find.gnu/samefile-p-brokenlink.exp new file mode 100644 index 0000000..9289516 --- /dev/null +++ b/find/testsuite/find.gnu/samefile-p-brokenlink.exp @@ -0,0 +1,13 @@ +# test for find -P -samefile with a broken link +exec rm -rf tmp +exec mkdir tmp +exec touch tmp/file1 +exec ln tmp/file1 tmp/link +exec ln -s tmp/file1 tmp/symlink +exec ln -s tmp/file2 tmp/broken +exec ln tmp/broken tmp/blink + +find_start p { -P tmp -samefile tmp/broken -print} +exec rm -rf tmp + + diff --git a/find/testsuite/find.gnu/samefile-p-brokenlink.xo b/find/testsuite/find.gnu/samefile-p-brokenlink.xo new file mode 100644 index 0000000..aaa98f3 --- /dev/null +++ b/find/testsuite/find.gnu/samefile-p-brokenlink.xo @@ -0,0 +1,2 @@ +tmp/blink +tmp/broken \ No newline at end of file diff --git a/find/testsuite/find.gnu/samefile-same.exp b/find/testsuite/find.gnu/samefile-same.exp new file mode 100644 index 0000000..739f6c6 --- /dev/null +++ b/find/testsuite/find.gnu/samefile-same.exp @@ -0,0 +1,6 @@ +# test for -samefile +exec rm -rf tmp +exec mkdir tmp tmp/one tmp/two +exec touch tmp/file +find_start p {tmp tmp/file -samefile tmp/file -print} +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/samefile-same.xo b/find/testsuite/find.gnu/samefile-same.xo new file mode 100644 index 0000000..061fd95 --- /dev/null +++ b/find/testsuite/find.gnu/samefile-same.xo @@ -0,0 +1,2 @@ +tmp/file +tmp/file diff --git a/find/testsuite/find.gnu/samefile-symlink.exp b/find/testsuite/find.gnu/samefile-symlink.exp new file mode 100644 index 0000000..1c6aa1f --- /dev/null +++ b/find/testsuite/find.gnu/samefile-symlink.exp @@ -0,0 +1,10 @@ +# test for -samefile +exec rm -rf tmp +exec mkdir tmp tmp/one tmp/two +exec touch tmp/file1 tmp/file2 +exec ln tmp/file1 tmp/one/link +exec ln -s ../file1 tmp/one/symlink +exec ln tmp/file2 tmp/two/link +exec ln -s ../file2 tmp/two/symlink +find_start p { -L tmp/one tmp/two -samefile tmp/file1 -print} +# exec rm -rf tmp diff --git a/find/testsuite/find.gnu/samefile-symlink.xo b/find/testsuite/find.gnu/samefile-symlink.xo new file mode 100644 index 0000000..ca1e727 --- /dev/null +++ b/find/testsuite/find.gnu/samefile-symlink.xo @@ -0,0 +1,2 @@ +tmp/one/link +tmp/one/symlink diff --git a/find/testsuite/find.gnu/sv-bug-12230.exp b/find/testsuite/find.gnu/sv-bug-12230.exp new file mode 100644 index 0000000..3af22c6 --- /dev/null +++ b/find/testsuite/find.gnu/sv-bug-12230.exp @@ -0,0 +1,14 @@ +# Bug report by Dmitry V. Levin. +# +# The command: +# find tmp -false -execdir echo == {} + +# Actually produces one line of output. It +# should produce none, because the echo command +# should never be invoked. +# +if { [ safe_path ] } { + exec rm -rf tmp + exec mkdir tmp + find_start p { tmp -false -execdir echo == "{}" + } + exec rm -rf tmp +} diff --git a/find/testsuite/find.gnu/sv-bug-17477.exp b/find/testsuite/find.gnu/sv-bug-17477.exp new file mode 100644 index 0000000..2cc7fe3 --- /dev/null +++ b/find/testsuite/find.gnu/sv-bug-17477.exp @@ -0,0 +1,2 @@ +# verify that % with no argument fails gracefully +find_start f { -maxdepth 0 -printf "test: %" } diff --git a/find/testsuite/find.gnu/sv-bug-17490.exp b/find/testsuite/find.gnu/sv-bug-17490.exp new file mode 100644 index 0000000..b0d522d --- /dev/null +++ b/find/testsuite/find.gnu/sv-bug-17490.exp @@ -0,0 +1,5 @@ +# test for Savannah bug #17490 +# +# That bug was a coredump if the argument to -regex was the final argument. +find_start p {. -maxdepth 0 -regex x } + diff --git a/find/testsuite/find.gnu/sv-bug-17782.exp b/find/testsuite/find.gnu/sv-bug-17782.exp new file mode 100644 index 0000000..6771f28 --- /dev/null +++ b/find/testsuite/find.gnu/sv-bug-17782.exp @@ -0,0 +1,15 @@ +# Savannah bug #17782. +# While -execdir echo blah {} works, -execdir echo "blah {}" doesn't. +# The bug is that the ./ prefix is prepended to the argument containing the +# braces, not to the expansion of the braces, so you get output like +# ./blah foo +# instead of +# blah ./foo +# +if { [ safe_path ] } { + exec rm -rf tmp + exec mkdir tmp + exec touch tmp/foo + find_start p { tmp -name foo -execdir echo "saw {}" \; } + exec rm -rf tmp +} diff --git a/find/testsuite/find.gnu/sv-bug-17782.xo b/find/testsuite/find.gnu/sv-bug-17782.xo new file mode 100644 index 0000000..2bde550 --- /dev/null +++ b/find/testsuite/find.gnu/sv-bug-17782.xo @@ -0,0 +1 @@ +saw ./foo \ No newline at end of file diff --git a/find/testsuite/find.gnu/sv-bug-18222.exp b/find/testsuite/find.gnu/sv-bug-18222.exp new file mode 100644 index 0000000..f317448 --- /dev/null +++ b/find/testsuite/find.gnu/sv-bug-18222.exp @@ -0,0 +1,9 @@ +# Test for Savannah bug #18222 +# +# That bug was a case were the expansion of %H is truncated if the name +# of the second start point is longer than that of the first. +exec rm -rf tmp +exec mkdir tmp +exec touch tmp/short tmp/longer +find_start p { tmp/short tmp/longer -printf "%H\n" } + diff --git a/find/testsuite/find.gnu/sv-bug-18222.xo b/find/testsuite/find.gnu/sv-bug-18222.xo new file mode 100644 index 0000000..4f5f863 --- /dev/null +++ b/find/testsuite/find.gnu/sv-bug-18222.xo @@ -0,0 +1,2 @@ +tmp/short +tmp/longer diff --git a/find/testsuite/find.gnu/true.exp b/find/testsuite/find.gnu/true.exp new file mode 100644 index 0000000..3da595b --- /dev/null +++ b/find/testsuite/find.gnu/true.exp @@ -0,0 +1,5 @@ +# test for -true. +exec rm -rf tmp +exec mkdir tmp tmp/fred tmp/fred/jim +find_start p { tmp -depth -print -true -print } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/true.xo b/find/testsuite/find.gnu/true.xo new file mode 100644 index 0000000..8484390 --- /dev/null +++ b/find/testsuite/find.gnu/true.xo @@ -0,0 +1,6 @@ +tmp/fred/jim +tmp/fred/jim +tmp/fred +tmp/fred +tmp +tmp diff --git a/find/testsuite/find.gnu/used-invarg.exp b/find/testsuite/find.gnu/used-invarg.exp new file mode 100644 index 0000000..be5eed1 --- /dev/null +++ b/find/testsuite/find.gnu/used-invarg.exp @@ -0,0 +1,2 @@ +# tests for invalid argument to -used +find_start f {. -used ZZ} diff --git a/find/testsuite/find.gnu/used-missing.exp b/find/testsuite/find.gnu/used-missing.exp new file mode 100644 index 0000000..b8b8674 --- /dev/null +++ b/find/testsuite/find.gnu/used-missing.exp @@ -0,0 +1,2 @@ +# tests for missing argument to -used +find_start f {. -used } diff --git a/find/testsuite/find.gnu/user-invalid.exp b/find/testsuite/find.gnu/user-invalid.exp new file mode 100644 index 0000000..ee1d02a --- /dev/null +++ b/find/testsuite/find.gnu/user-invalid.exp @@ -0,0 +1,4 @@ +# tests for invalid argument to -user +foreach user { : "" 14JJ 10.3 -4 } { + find_start f ". -user $user" +} diff --git a/find/testsuite/find.gnu/wholename.exp b/find/testsuite/find.gnu/wholename.exp new file mode 100644 index 0000000..128d1ac --- /dev/null +++ b/find/testsuite/find.gnu/wholename.exp @@ -0,0 +1,5 @@ +# test for -wholename +exec rm -rf tmp +exec mkdir tmp tmp/top tmp/top/one tmp/top/one/two +find_start p {tmp/top -wholename tmp/top/one -print } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/wholename.xo b/find/testsuite/find.gnu/wholename.xo new file mode 100644 index 0000000..66d2877 --- /dev/null +++ b/find/testsuite/find.gnu/wholename.xo @@ -0,0 +1 @@ +tmp/top/one diff --git a/find/testsuite/find.gnu/xtype-symlink.exp b/find/testsuite/find.gnu/xtype-symlink.exp new file mode 100644 index 0000000..500daa5 --- /dev/null +++ b/find/testsuite/find.gnu/xtype-symlink.exp @@ -0,0 +1,7 @@ +exec rm -rf tmp +exec mkdir tmp +exec touch tmp/file +exec ln -s file tmp/LINK +exec ls -l tmp > /tmp/z +find_start p {tmp/LINK -xtype f } +exec rm -rf tmp diff --git a/find/testsuite/find.gnu/xtype-symlink.xo b/find/testsuite/find.gnu/xtype-symlink.xo new file mode 100644 index 0000000..f46bde2 --- /dev/null +++ b/find/testsuite/find.gnu/xtype-symlink.xo @@ -0,0 +1 @@ +tmp/LINK diff --git a/find/testsuite/find.gnu/xtype.exp b/find/testsuite/find.gnu/xtype.exp new file mode 100644 index 0000000..62cb749 --- /dev/null +++ b/find/testsuite/find.gnu/xtype.exp @@ -0,0 +1,8 @@ +# checks for the -xtype test. +exec rm -rf tmp + +exec mkdir tmp +exec ln -s /etc/passwd tmp/LINK +exec ln -s /NOSUCHFILE tmp/BROKEN + +find_start p { -H tmp/LINK tmp/BROKEN tmp -xtype l -printf "xtype is l: %p\n" , \! -xtype l -printf "xtype is not l: %p\n" } diff --git a/find/testsuite/find.gnu/xtype.xo b/find/testsuite/find.gnu/xtype.xo new file mode 100644 index 0000000..92b74ed --- /dev/null +++ b/find/testsuite/find.gnu/xtype.xo @@ -0,0 +1,5 @@ +xtype is l: tmp/LINK +xtype is l: tmp/BROKEN +xtype is not l: tmp +xtype is not l: tmp/LINK +xtype is l: tmp/BROKEN diff --git a/find/testsuite/find.posix/and.exp b/find/testsuite/find.posix/and.exp new file mode 100644 index 0000000..ac1d622 --- /dev/null +++ b/find/testsuite/find.posix/and.exp @@ -0,0 +1,5 @@ +# tests for -name +exec rm -rf tmp +exec mkdir tmp tmp/fred tmp/jim +find_start p {tmp -name fred -a -print} +exec rm -rf tmp diff --git a/find/testsuite/find.posix/and.xo b/find/testsuite/find.posix/and.xo new file mode 100644 index 0000000..8cc8940 --- /dev/null +++ b/find/testsuite/find.posix/and.xo @@ -0,0 +1 @@ +tmp/fred diff --git a/find/testsuite/find.posix/bracket-depth.exp b/find/testsuite/find.posix/bracket-depth.exp new file mode 100644 index 0000000..05d659e --- /dev/null +++ b/find/testsuite/find.posix/bracket-depth.exp @@ -0,0 +1,5 @@ +exec rm -rf tmp +exec mkdir tmp +# shoud not result in a fatal error. +find_start p { tmp \( -depth \) -false -print } + diff --git a/find/testsuite/find.posix/depth1.exp b/find/testsuite/find.posix/depth1.exp new file mode 100644 index 0000000..c730d22 --- /dev/null +++ b/find/testsuite/find.posix/depth1.exp @@ -0,0 +1,7 @@ +# tests for the bug reported at http://lists.gnu.org/archive/html/bug-findutils/2005-02/msg00077.html +exec rm -rf tmp +exec mkdir tmp +exec mkdir tmp/1 tmp/1/2 tmp/1/2/3 tmp/1/2/20 tmp/1/2/37 tmp/1/2/54 tmp/1/2/55 tmp/1/2/55/56 tmp/1/2/55/57 tmp/1/2/55/58 tmp/1/2/55/59 +touch tmp/1/2/3/4 tmp/1/2/3/5 tmp/1/2/3/6 tmp/1/2/3/7 tmp/1/2/3/8 tmp/1/2/3/9 tmp/1/2/3/10 tmp/1/2/3/11 tmp/1/2/3/12 tmp/1/2/3/13 tmp/1/2/3/14 tmp/1/2/3/15 tmp/1/2/3/16 tmp/1/2/3/17 tmp/1/2/3/18 tmp/1/2/3/19 tmp/1/2/20/21 tmp/1/2/20/22 tmp/1/2/20/23 tmp/1/2/20/24 tmp/1/2/20/25 tmp/1/2/20/26 tmp/1/2/20/27 tmp/1/2/20/28 tmp/1/2/20/29 tmp/1/2/20/30 tmp/1/2/20/31 tmp/1/2/20/32 tmp/1/2/20/33 tmp/1/2/20/34 tmp/1/2/20/35 tmp/1/2/20/36 tmp/1/2/37/38 tmp/1/2/37/39 tmp/1/2/37/40 tmp/1/2/37/41 tmp/1/2/37/42 tmp/1/2/37/43 tmp/1/2/37/44 tmp/1/2/37/45 tmp/1/2/37/46 tmp/1/2/37/47 tmp/1/2/37/48 tmp/1/2/37/49 tmp/1/2/37/50 tmp/1/2/37/51 tmp/1/2/37/52 tmp/1/2/37/53 tmp/1/2/60 tmp/1/2/61 tmp/1/2/62 tmp/1/2/63 tmp/1/2/64 tmp/1/2/65 tmp/1/66 tmp/1/67 tmp/1/68 tmp/1/69 tmp/1/70 tmp/1/71 tmp/1/72 tmp/1/73 tmp/1/74 tmp/1/75 tmp/1/76 tmp/1/77 tmp/1/78 tmp/1/79 tmp/1/80 tmp/1/81 +find_start p {tmp/1 -depth -type d -print} +exec rm -rf tmp diff --git a/find/testsuite/find.posix/depth1.xo b/find/testsuite/find.posix/depth1.xo new file mode 100644 index 0000000..0147ad5 --- /dev/null +++ b/find/testsuite/find.posix/depth1.xo @@ -0,0 +1,11 @@ +tmp/1 +tmp/1/2 +tmp/1/2/20 +tmp/1/2/3 +tmp/1/2/37 +tmp/1/2/54 +tmp/1/2/55 +tmp/1/2/55/56 +tmp/1/2/55/57 +tmp/1/2/55/58 +tmp/1/2/55/59 diff --git a/find/testsuite/find.posix/empty-parens.exp b/find/testsuite/find.posix/empty-parens.exp new file mode 100644 index 0000000..fc22c54 --- /dev/null +++ b/find/testsuite/find.posix/empty-parens.exp @@ -0,0 +1,3 @@ +# empty parentheses should be rejected as being invalid. +find_start f { . \( -\) } + diff --git a/find/testsuite/find.posix/exec-one.exp b/find/testsuite/find.posix/exec-one.exp new file mode 100644 index 0000000..a4a7ef6 --- /dev/null +++ b/find/testsuite/find.posix/exec-one.exp @@ -0,0 +1,5 @@ +# tests for -name +exec rm -rf tmp +exec mkdir tmp tmp/fred tmp/jim +find_start p {tmp -name fred -exec echo \{\} \; } +exec rm -rf tmp diff --git a/find/testsuite/find.posix/exec-one.xo b/find/testsuite/find.posix/exec-one.xo new file mode 100644 index 0000000..8cc8940 --- /dev/null +++ b/find/testsuite/find.posix/exec-one.xo @@ -0,0 +1 @@ +tmp/fred diff --git a/find/testsuite/find.posix/files-not-expressions1.exp b/find/testsuite/find.posix/files-not-expressions1.exp new file mode 100644 index 0000000..cb5386d --- /dev/null +++ b/find/testsuite/find.posix/files-not-expressions1.exp @@ -0,0 +1,9 @@ +set files "\(1 " + +foreach file $files { touch $file } + +# shoud not result in a fatal error. +find_start p { \(1 } + +foreach file $files { file delete -- $file } + diff --git a/find/testsuite/find.posix/files-not-expressions1.xo b/find/testsuite/find.posix/files-not-expressions1.xo new file mode 100644 index 0000000..000b2a0 --- /dev/null +++ b/find/testsuite/find.posix/files-not-expressions1.xo @@ -0,0 +1 @@ +(1 diff --git a/find/testsuite/find.posix/files-not-expressions2.exp b/find/testsuite/find.posix/files-not-expressions2.exp new file mode 100644 index 0000000..da61124 --- /dev/null +++ b/find/testsuite/find.posix/files-not-expressions2.exp @@ -0,0 +1,9 @@ +set files "!2" + +foreach file $files { touch $file } + +# shoud not result in a fatal error. +find_start p { !2 } + +foreach file $files { file delete -- $file } + diff --git a/find/testsuite/find.posix/files-not-expressions2.xo b/find/testsuite/find.posix/files-not-expressions2.xo new file mode 100644 index 0000000..a829de6 --- /dev/null +++ b/find/testsuite/find.posix/files-not-expressions2.xo @@ -0,0 +1 @@ +!2 diff --git a/find/testsuite/find.posix/files-not-expressions3.exp b/find/testsuite/find.posix/files-not-expressions3.exp new file mode 100644 index 0000000..a85bfe7 --- /dev/null +++ b/find/testsuite/find.posix/files-not-expressions3.exp @@ -0,0 +1,9 @@ +set files "\)" + +foreach file $files { touch $file } + +# shoud not result in a fatal error. +find_start p { \) } + +foreach file $files { file delete -- $file } + diff --git a/find/testsuite/find.posix/files-not-expressions3.xo b/find/testsuite/find.posix/files-not-expressions3.xo new file mode 100644 index 0000000..bea8cd1 --- /dev/null +++ b/find/testsuite/find.posix/files-not-expressions3.xo @@ -0,0 +1 @@ +) diff --git a/find/testsuite/find.posix/group-empty.exp b/find/testsuite/find.posix/group-empty.exp new file mode 100644 index 0000000..eb7851a --- /dev/null +++ b/find/testsuite/find.posix/group-empty.exp @@ -0,0 +1,3 @@ +# test for diagnosis of the fact that the argument to -group is empty +find_start f { . -group "" } + diff --git a/find/testsuite/find.posix/group-missing.exp b/find/testsuite/find.posix/group-missing.exp new file mode 100644 index 0000000..c3e2735 --- /dev/null +++ b/find/testsuite/find.posix/group-missing.exp @@ -0,0 +1,5 @@ +# test for diagnosis of the fact that the argument to -group is missing +exec rm -rf tmp +exec touch tmp +find_start f { tmp -group } +exec rm -rf tmp diff --git a/find/testsuite/find.posix/grouping.exp b/find/testsuite/find.posix/grouping.exp new file mode 100644 index 0000000..c5ce2d7 --- /dev/null +++ b/find/testsuite/find.posix/grouping.exp @@ -0,0 +1,5 @@ +# tests for ! +exec rm -rf tmp +exec mkdir tmp tmp/fred tmp/jim +find_start p {tmp \! \( -name fred -o -name tmp \) -print} +exec rm -rf tmp diff --git a/find/testsuite/find.posix/grouping.xo b/find/testsuite/find.posix/grouping.xo new file mode 100644 index 0000000..a7eac4c --- /dev/null +++ b/find/testsuite/find.posix/grouping.xo @@ -0,0 +1 @@ +tmp/jim \ No newline at end of file diff --git a/find/testsuite/find.posix/links.exp b/find/testsuite/find.posix/links.exp new file mode 100644 index 0000000..adb0fae --- /dev/null +++ b/find/testsuite/find.posix/links.exp @@ -0,0 +1,25 @@ +# tests for -links +exec rm -rf tmp +exec mkdir tmp +touch tmp/file1 tmp/file2 tmp/file3 + +# four links including the original file +exec ln tmp/file1 tmp/1a +exec ln tmp/file1 tmp/1b +exec ln tmp/file1 tmp/1c + +# five links including the original file +exec ln tmp/file2 tmp/2a +exec ln tmp/file2 tmp/2b +exec ln tmp/file2 tmp/2c +exec ln tmp/file2 tmp/2d + +# six links including the original file +exec ln tmp/file3 tmp/3a +exec ln tmp/file3 tmp/3b +exec ln tmp/file3 tmp/3c +exec ln tmp/file3 tmp/3d +exec ln tmp/file3 tmp/3e + +find_start p { tmp/file1 tmp/file2 tmp/file3 -type f ( ( -links -5 -exec echo under5 \{\} \; ) -o ( -links 5 -exec echo exactly5 \{\} \; ) -o ( -links +5 -exec echo over5 \{\} \; ) ) } +exec rm -rf tmp diff --git a/find/testsuite/find.posix/links.xo b/find/testsuite/find.posix/links.xo new file mode 100644 index 0000000..311447f --- /dev/null +++ b/find/testsuite/find.posix/links.xo @@ -0,0 +1,3 @@ +exactly5 tmp/file2 +over5 tmp/file3 +under5 tmp/file1 diff --git a/find/testsuite/find.posix/name-missing.exp b/find/testsuite/find.posix/name-missing.exp new file mode 100644 index 0000000..da8ae5a --- /dev/null +++ b/find/testsuite/find.posix/name-missing.exp @@ -0,0 +1,5 @@ +# test for diagnosis of the fact that the argument to -name is missing +exec rm -rf tmp +exec touch tmp +find_start f { tmp -name } +exec rm -rf tmp diff --git a/find/testsuite/find.posix/name.exp b/find/testsuite/find.posix/name.exp new file mode 100644 index 0000000..65c6f5f --- /dev/null +++ b/find/testsuite/find.posix/name.exp @@ -0,0 +1,5 @@ +# tests for -name +exec rm -rf tmp +exec mkdir tmp tmp/fred tmp/jim +find_start p {tmp -name fred -print} +exec rm -rf tmp diff --git a/find/testsuite/find.posix/name.xo b/find/testsuite/find.posix/name.xo new file mode 100644 index 0000000..8cc8940 --- /dev/null +++ b/find/testsuite/find.posix/name.xo @@ -0,0 +1 @@ +tmp/fred diff --git a/find/testsuite/find.posix/perm-X.exp b/find/testsuite/find.posix/perm-X.exp new file mode 100644 index 0000000..28e78ad --- /dev/null +++ b/find/testsuite/find.posix/perm-X.exp @@ -0,0 +1,12 @@ +# tests for -perm with X +exec rm -rf tmp +exec mkdir tmp +exec chmod 755 tmp +exec true > tmp/empty +exec true > tmp/empty-xxx +exec chmod 711 tmp/empty-xxx +exec mkdir tmp/sub +exec chmod 300 tmp/sub +find_start p { tmp \( ! -name sub -o -prune \) -perm -u+w,a+X -print } +exec chmod 700 tmp/sub +exec rm -rf tmp diff --git a/find/testsuite/find.posix/perm-X.xo b/find/testsuite/find.posix/perm-X.xo new file mode 100644 index 0000000..2af57aa --- /dev/null +++ b/find/testsuite/find.posix/perm-X.xo @@ -0,0 +1,3 @@ +tmp +tmp/empty +tmp/empty-xxx diff --git a/find/testsuite/find.posix/perm-vanilla.exp b/find/testsuite/find.posix/perm-vanilla.exp new file mode 100644 index 0000000..c6b551f --- /dev/null +++ b/find/testsuite/find.posix/perm-vanilla.exp @@ -0,0 +1,18 @@ +# tests for -perm +exec rm -rf tmp +exec mkdir tmp + +## set up a selection of test files +foreach perm { 400 555 700 } { + touch "tmp/$perm" + exec chmod $perm "tmp/$perm" +} +exec ls -l tmp + +# +# The -o operator normally has a short-circuit effect, +# so we have to use "-exec false \;" to make sure that +# all the parenthesised expression actually fail. +# +find_start p {tmp/400 tmp/555 tmp/700 \( -perm 400 -exec echo p400 \{\} \; -exec false \; \) -o \( -perm -400 -exec echo p-400 \{\} \; -exec false \; \) } +# exec rm -rf tmp tmp2 diff --git a/find/testsuite/find.posix/perm-vanilla.xo b/find/testsuite/find.posix/perm-vanilla.xo new file mode 100644 index 0000000..6724004 --- /dev/null +++ b/find/testsuite/find.posix/perm-vanilla.xo @@ -0,0 +1,4 @@ +p400 tmp/400 +p-400 tmp/400 +p-400 tmp/555 +p-400 tmp/700 diff --git a/find/testsuite/find.posix/posixnot.exp b/find/testsuite/find.posix/posixnot.exp new file mode 100644 index 0000000..859309d --- /dev/null +++ b/find/testsuite/find.posix/posixnot.exp @@ -0,0 +1,5 @@ +# tests for ! +exec rm -rf tmp +exec mkdir tmp tmp/fred tmp/jim +find_start p {tmp \! -name fred -print} +exec rm -rf tmp diff --git a/find/testsuite/find.posix/posixnot.xo b/find/testsuite/find.posix/posixnot.xo new file mode 100644 index 0000000..776fed4 --- /dev/null +++ b/find/testsuite/find.posix/posixnot.xo @@ -0,0 +1,2 @@ +tmp +tmp/jim \ No newline at end of file diff --git a/find/testsuite/find.posix/prune.exp b/find/testsuite/find.posix/prune.exp new file mode 100644 index 0000000..10c1bb0 --- /dev/null +++ b/find/testsuite/find.posix/prune.exp @@ -0,0 +1,5 @@ +# tests for -name +exec rm -rf tmp +exec mkdir tmp tmp/fred tmp/jim tmp/jim/1 tmp/shiela +find_start p {tmp -name jim -prune -o -print } +#exec rm -rf tmp diff --git a/find/testsuite/find.posix/prune.xo b/find/testsuite/find.posix/prune.xo new file mode 100644 index 0000000..afe68f8 --- /dev/null +++ b/find/testsuite/find.posix/prune.xo @@ -0,0 +1,3 @@ +tmp +tmp/fred +tmp/shiela diff --git a/find/testsuite/find.posix/size-invalid.exp b/find/testsuite/find.posix/size-invalid.exp new file mode 100644 index 0000000..4989438 --- /dev/null +++ b/find/testsuite/find.posix/size-invalid.exp @@ -0,0 +1,7 @@ +# test for diagnosis of the fact that the argument to -size is invalid +exec rm -rf tmp +exec touch tmp +foreach size { w b c k m G "" +-1 +-1G 1.2k } { + find_start f " tmp -size $size " +} +exec rm -rf tmp diff --git a/find/testsuite/find.posix/size-missing.exp b/find/testsuite/find.posix/size-missing.exp new file mode 100644 index 0000000..74ad151 --- /dev/null +++ b/find/testsuite/find.posix/size-missing.exp @@ -0,0 +1,5 @@ +# test for diagnosis of the fact that the argument to -size is missing +exec rm -rf tmp +exec touch tmp +find_start f { tmp -size } +exec rm -rf tmp diff --git a/find/testsuite/find.posix/sizes.exp b/find/testsuite/find.posix/sizes.exp new file mode 100644 index 0000000..1fdea48 --- /dev/null +++ b/find/testsuite/find.posix/sizes.exp @@ -0,0 +1,15 @@ +# tests for -size +exec rm -rf tmp +exec mkdir tmp +exec true > tmp/0-bytes +exec dd if=/dev/zero bs=1 count=511 of=tmp/511-bytes > /dev/null 2>/dev/null +exec dd if=/dev/zero bs=1 count=512 of=tmp/512-bytes > /dev/null 2>/dev/null +exec dd if=/dev/zero bs=1 count=513 of=tmp/513-bytes > /dev/null 2>/dev/null +exec dd if=/dev/zero bs=1 count=1024 of=tmp/1024-bytes > /dev/null 2>/dev/null +find_start p {tmp -mindepth 1 ( -size -1 -printf "A size -1: %s %p\n" ) , ( -size 1 -printf "B size 1: %s %p\n" ) , ( -size +1 -printf "C size +1: %s %p\n" ) , ( -size -2 -printf "G size -2: %s %p\n" ) , ( -size 2 -printf "H size 2: %s %p\n" ) , ( -size +2 -printf "I size +2: %s %p\n" ) } +# ( -size =1 -printf "E size =1: %s %p\n" ) +# ( -size >1 -printf "F size >1: %s %p\n" ) , +# ( -size <2 -printf "J size <2: %s %p\n" ) , +# ( -size =2 -printf "K size =2: %s %p\n" ) , +# ( -size >2 -printf "L size >2: %s %p\n" ) +exec rm -rf tmp diff --git a/find/testsuite/find.posix/sizes.xo b/find/testsuite/find.posix/sizes.xo new file mode 100644 index 0000000..f89a10c --- /dev/null +++ b/find/testsuite/find.posix/sizes.xo @@ -0,0 +1,10 @@ +A size -1: 0 tmp/0-bytes +B size 1: 511 tmp/511-bytes +B size 1: 512 tmp/512-bytes +C size +1: 513 tmp/513-bytes +C size +1: 1024 tmp/1024-bytes +H size 2: 513 tmp/513-bytes +H size 2: 1024 tmp/1024-bytes +G size -2: 0 tmp/0-bytes +G size -2: 511 tmp/511-bytes +G size -2: 512 tmp/512-bytes diff --git a/find/testsuite/find.posix/sizetype.exp b/find/testsuite/find.posix/sizetype.exp new file mode 100644 index 0000000..b9dedf3 --- /dev/null +++ b/find/testsuite/find.posix/sizetype.exp @@ -0,0 +1,6 @@ +# tests for -size -type +exec rm -rf tmp +exec mkdir tmp +exec true > tmp/empty +find_start p {tmp -size 0c -type f } +exec rm -rf tmp diff --git a/find/testsuite/find.posix/sizetype.xo b/find/testsuite/find.posix/sizetype.xo new file mode 100644 index 0000000..445f1d4 --- /dev/null +++ b/find/testsuite/find.posix/sizetype.xo @@ -0,0 +1 @@ +tmp/empty diff --git a/find/testsuite/find.posix/sv-bug-11175.exp b/find/testsuite/find.posix/sv-bug-11175.exp new file mode 100644 index 0000000..06dd160 --- /dev/null +++ b/find/testsuite/find.posix/sv-bug-11175.exp @@ -0,0 +1,10 @@ +# tests for Savannah bug 11175 (should not check perms of pruned dir) +exec rm -rf tmp +exec mkdir tmp +exec mkdir tmp/noxdir +exec chmod 700 tmp +exec chmod 600 tmp/noxdir +#find_start p {tmp/noxdir -prune -type d -print} +find_start p {tmp -name noxdir -prune -type d -print} +exec chmod 700 tmp/noxdir +exec rm -rf tmp diff --git a/find/testsuite/find.posix/sv-bug-11175.xo b/find/testsuite/find.posix/sv-bug-11175.xo new file mode 100644 index 0000000..cd9c95f --- /dev/null +++ b/find/testsuite/find.posix/sv-bug-11175.xo @@ -0,0 +1 @@ +tmp/noxdir diff --git a/find/testsuite/find.posix/sv-bug-12181.exp b/find/testsuite/find.posix/sv-bug-12181.exp new file mode 100644 index 0000000..8f1d339 --- /dev/null +++ b/find/testsuite/find.posix/sv-bug-12181.exp @@ -0,0 +1,6 @@ +# tests for Savannah bug 12181 (find -H symlink should work) +exec rm -rf tmp +exec mkdir tmp +exec ln -s tmp link +find_start p { -H link} +exec rm -rf tmp link diff --git a/find/testsuite/find.posix/sv-bug-12181.xo b/find/testsuite/find.posix/sv-bug-12181.xo new file mode 100644 index 0000000..2b2328d --- /dev/null +++ b/find/testsuite/find.posix/sv-bug-12181.xo @@ -0,0 +1 @@ +link diff --git a/find/testsuite/find.posix/sv-bug-15235.exp b/find/testsuite/find.posix/sv-bug-15235.exp new file mode 100644 index 0000000..9342e49 --- /dev/null +++ b/find/testsuite/find.posix/sv-bug-15235.exp @@ -0,0 +1,6 @@ +# tests for directory parsing +exec rm -rf \(1 \!2 \, \) +exec mkdir \(1 \!2 \, \) +touch \(1/a \!2/b \,/c \)/d +find_start p {\(1 \!2 \, \)} +exec rm -rf \(1 \!2 \, \) diff --git a/find/testsuite/find.posix/sv-bug-15235.xo b/find/testsuite/find.posix/sv-bug-15235.xo new file mode 100644 index 0000000..2852b81 --- /dev/null +++ b/find/testsuite/find.posix/sv-bug-15235.xo @@ -0,0 +1,8 @@ +(1 +(1/a +!2 +!2/b +, +,/c +) +)/d diff --git a/find/testsuite/find.posix/sv-bug-19605.exp b/find/testsuite/find.posix/sv-bug-19605.exp new file mode 100644 index 0000000..05b8841 --- /dev/null +++ b/find/testsuite/find.posix/sv-bug-19605.exp @@ -0,0 +1,7 @@ +# tests for Savannah bug 19605 (Inability of ftsfind to detect symlink loop) +exec rm -rf tmp +exec mkdir tmp +exec ln -s a tmp/b +exec ln -s b tmp/a +find_start f {-L tmp -false -print} +exec rm -rf tmp diff --git a/find/testsuite/find.posix/sv-bug-19613.exp b/find/testsuite/find.posix/sv-bug-19613.exp new file mode 100644 index 0000000..44423ef --- /dev/null +++ b/find/testsuite/find.posix/sv-bug-19613.exp @@ -0,0 +1,14 @@ +# tests for Savannah bug 19613 ("find -L -type f" fails on symlink loops) +exec rm -rf tmp +exec mkdir tmp tmp/subdir +exec ln -s a tmp/subdir/b +exec ln -s b tmp/subdir/a + +# We want to distinguish between the correct behaviour (error message +# and return 1 because of the loop) and the failure case (assertion +# failure in 4.3.3). To do that we just check that the "tmp/vanilla" +# file is also found. + +touch tmp/vanilla +find_start f { -L tmp -depth -type f} +exec rm -rf tmp diff --git a/find/testsuite/find.posix/sv-bug-19613.xo b/find/testsuite/find.posix/sv-bug-19613.xo new file mode 100644 index 0000000..5618aba --- /dev/null +++ b/find/testsuite/find.posix/sv-bug-19613.xo @@ -0,0 +1 @@ +tmp/vanilla diff --git a/find/testsuite/find.posix/sv-bug-19617.exp b/find/testsuite/find.posix/sv-bug-19617.exp new file mode 100644 index 0000000..fc4caca --- /dev/null +++ b/find/testsuite/find.posix/sv-bug-19617.exp @@ -0,0 +1,7 @@ +# tests for Savannah bug 19617 (Inability of ftsfind to detect nonexistent command line args) +exec rm -rf tmp +exec mkdir tmp +find_start f {-P tmp/nosuchfile -print} +find_start f {-H tmp/nosuchfile -print} +find_start f {-L tmp/nosuchfile -print} +exec rm -rf tmp diff --git a/find/testsuite/find.posix/typearg.exp b/find/testsuite/find.posix/typearg.exp new file mode 100644 index 0000000..ea6a933 --- /dev/null +++ b/find/testsuite/find.posix/typearg.exp @@ -0,0 +1,4 @@ +# tests for arguments to -type +foreach type { Z ZZ } { + find_start f ". -type $type" +} diff --git a/find/testsuite/find.posix/typesize.exp b/find/testsuite/find.posix/typesize.exp new file mode 100644 index 0000000..596b2da --- /dev/null +++ b/find/testsuite/find.posix/typesize.exp @@ -0,0 +1,6 @@ +# tests for -type -size +exec rm -rf tmp +exec mkdir tmp +exec true > tmp/empty +find_start p {tmp -type f -size 0c } +exec rm -rf tmp diff --git a/find/testsuite/find.posix/typesize.xo b/find/testsuite/find.posix/typesize.xo new file mode 100644 index 0000000..445f1d4 --- /dev/null +++ b/find/testsuite/find.posix/typesize.xo @@ -0,0 +1 @@ +tmp/empty diff --git a/find/testsuite/find.posix/user-empty.exp b/find/testsuite/find.posix/user-empty.exp new file mode 100644 index 0000000..136fce0 --- /dev/null +++ b/find/testsuite/find.posix/user-empty.exp @@ -0,0 +1,3 @@ +# test for diagnosis of the fact that the argument to -user is empty +find_start f { . -user "" } + diff --git a/find/testsuite/find.posix/user-missing.exp b/find/testsuite/find.posix/user-missing.exp new file mode 100644 index 0000000..d038735 --- /dev/null +++ b/find/testsuite/find.posix/user-missing.exp @@ -0,0 +1,3 @@ +# test for diagnosis of the fact that the argument to -user is missing +find_start f { tmp -user } + diff --git a/find/tree.c b/find/tree.c new file mode 100644 index 0000000..d12d579 --- /dev/null +++ b/find/tree.c @@ -0,0 +1,1654 @@ +/* tree.c -- helper functions to build and evaluate the expression tree. + Copyright (C) 1990, 91, 92, 93, 94, 2000, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include +#include "defs.h" + +#include +#include + +#include "xalloc.h" +#include "error.h" + + +#if ENABLE_NLS +# include +# define _(Text) gettext (Text) +#else +# define _(Text) Text +#endif +#ifdef gettext_noop +# define N_(String) gettext_noop (String) +#else +/* See locate.c for explanation as to why not use (String) */ +# define N_(String) String +#endif + + + +/* All predicates for each path to process. */ +static struct predicate *predicates = NULL; + +/* The root of the evaluation tree. */ +static struct predicate *eval_tree = NULL; + +/* The last predicate allocated. */ +static struct predicate *last_pred = NULL; + + +static struct predicate *scan_rest PARAMS((struct predicate **input, + struct predicate *head, + short int prev_prec)); +static void merge_pred PARAMS((struct predicate *beg_list, struct predicate *end_list, struct predicate **last_p)); +static struct predicate *set_new_parent PARAMS((struct predicate *curr, enum predicate_precedence high_prec, struct predicate **prevp)); +static const char *cost_name PARAMS((enum EvaluationCost cost)); + + +/* Return a pointer to a tree that represents the + expression prior to non-unary operator *INPUT. + Set *INPUT to point at the next input predicate node. + + Only accepts the following: + + + expression [operators of higher precedence] + + (arbitrary expression) + (arbitrary expression) + + In other words, you can not start out with a bi_op or close_paren. + + If the following operator (if any) is of a higher precedence than + PREV_PREC, the expression just nabbed is part of a following + expression, which really is the expression that should be handed to + our caller, so get_expr recurses. */ + +struct predicate * +get_expr (struct predicate **input, + short int prev_prec, + const struct predicate* prev_pred) +{ + struct predicate *next = NULL; + struct predicate *this_pred = (*input); + + if (*input == NULL) + error (1, 0, _("invalid expression")); + + switch ((*input)->p_type) + { + case NO_TYPE: + error (1, 0, _("invalid expression")); + break; + + case BI_OP: + /* e.g. "find . -a" */ + error (1, 0, _("invalid expression; you have used a binary operator '%s' with nothing before it."), this_pred->p_name); + break; + + case CLOSE_PAREN: + if ((UNI_OP == prev_pred->p_type + || BI_OP == prev_pred->p_type) + && !this_pred->artificial) + { + /* e.g. "find \( -not \)" or "find \( -true -a \" */ + error(1, 0, _("expected an expression between '%s' and ')'"), + prev_pred->p_name); + } + else if ( (*input)->artificial ) + { + /* We have reached the end of the user-supplied predicates + * unexpectedly. + */ + /* e.g. "find . -true -a" */ + error (1, 0, _("expected an expression after '%s'"), prev_pred->p_name); + } + else + { + error (1, 0, _("invalid expression; you have too many ')'")); + } + break; + + case PRIMARY_TYPE: + next = *input; + *input = (*input)->pred_next; + break; + + case UNI_OP: + next = *input; + *input = (*input)->pred_next; + next->pred_right = get_expr (input, NEGATE_PREC, next); + break; + + case OPEN_PAREN: + if ( (NULL == (*input)->pred_next) || (*input)->pred_next->artificial ) + { + /* user typed something like "find . (", and so the ) we are + * looking at is from the artificial "( ) -print" that we + * add. + */ + error (1, 0, _("invalid expression; expected to find a ')' but didn't see one. Perhaps you need an extra predicate after '%s'"), this_pred->p_name); + } + prev_pred = (*input); + *input = (*input)->pred_next; + if ( (*input)->p_type == CLOSE_PAREN ) + { + error (1, 0, _("invalid expression; empty parentheses are not allowed.")); + } + next = get_expr (input, NO_PREC, prev_pred); + if ((*input == NULL) + || ((*input)->p_type != CLOSE_PAREN)) + error (1, 0, _("invalid expression; I was expecting to find a ')' somewhere but did not see one.")); + *input = (*input)->pred_next; /* move over close */ + break; + + default: + error (1, 0, _("oops -- invalid expression type!")); + break; + } + + /* We now have the first expression and are positioned to check + out the next operator. If NULL, all done. Otherwise, if + PREV_PREC < the current node precedence, we must continue; + the expression we just nabbed is more tightly bound to the + following expression than to the previous one. */ + if (*input == NULL) + return (next); + if ((int) (*input)->p_prec > (int) prev_prec) + { + next = scan_rest (input, next, prev_prec); + if (next == NULL) + error (1, 0, _("invalid expression")); + } + return (next); +} + +/* Scan across the remainder of a predicate input list starting + at *INPUT, building the rest of the expression tree to return. + Stop at the first close parenthesis or the end of the input list. + Assumes that get_expr has been called to nab the first element + of the expression tree. + + *INPUT points to the current input predicate list element. + It is updated as we move along the list to point to the + terminating input element. + HEAD points to the predicate element that was obtained + by the call to get_expr. + PREV_PREC is the precedence of the previous predicate element. */ + +static struct predicate * +scan_rest (struct predicate **input, + struct predicate *head, + short int prev_prec) +{ + struct predicate *tree; /* The new tree we are building. */ + + if ((*input == NULL) || ((*input)->p_type == CLOSE_PAREN)) + return (NULL); + tree = head; + while ((*input != NULL) && ((int) (*input)->p_prec > (int) prev_prec)) + { + switch ((*input)->p_type) + { + case NO_TYPE: + case PRIMARY_TYPE: + case UNI_OP: + case OPEN_PAREN: + /* I'm not sure how we get here, so it is not obvious what + * sort of mistakes might give rise to this condition. + */ + error (1, 0, _("invalid expression")); + break; + + case BI_OP: + { + struct predicate *prev = (*input); + (*input)->pred_left = tree; + tree = *input; + *input = (*input)->pred_next; + tree->pred_right = get_expr (input, tree->p_prec, prev); + break; + } + + case CLOSE_PAREN: + return tree; + + default: + error (1, 0, + _("oops -- invalid expression type (%d)!"), + (int)(*input)->p_type); + break; + } + } + return tree; +} + +/* Returns true if the specified predicate is reorderable. */ +static boolean +predicate_is_cost_free(const struct predicate *p) +{ + if (pred_is(p, pred_name) || + pred_is(p, pred_path) || + pred_is(p, pred_iname) || + pred_is(p, pred_ipath)) + { + /* Traditionally (at least 4.1.7 through 4.2.x) GNU find always + * optimised these cases. + */ + return true; + } + else if (options.optimisation_level > 0) + { + if (pred_is(p, pred_and) || + pred_is(p, pred_negate) || + pred_is(p, pred_comma) || + pred_is(p, pred_or)) + return false; + else + return NeedsNothing == p->p_cost; + } + else + { + return false; + } +} + +/* Prints a predicate */ +void print_predicate(FILE *fp, const struct predicate *p) +{ + fprintf (fp, "%s%s%s", + p->p_name, + p->arg_text ? " " : "", + p->arg_text ? p->arg_text : ""); +} + + +struct predlist +{ + struct predicate *head; + struct predicate *tail; +}; + +static void +predlist_init(struct predlist *p) +{ + p->head = p->tail = NULL; +} + +static void +predlist_insert(struct predlist *list, + struct predicate *curr, + struct predicate **pprev) +{ + struct predicate **insertpos = &(list->head); + + *pprev = curr->pred_left; + if (options.optimisation_level > 2) + { + /* Insert the new node in the list after any other entries which + * are more selective. + */ + if (0) + while ( (*insertpos) && ((*insertpos)->est_success_rate < curr->est_success_rate) ) + { + insertpos = &((*insertpos)->pred_left); + } + } + curr->pred_left = (*insertpos); + (*insertpos) = curr; + if (NULL == list->tail) + list->tail = list->head; +} + +static int +pred_cost_compare(const struct predicate *p1, const struct predicate *p2, boolean wantfailure) +{ + if (p1->p_cost == p2->p_cost) + { + if (p1->est_success_rate == p2->est_success_rate) + return 0; + else if (wantfailure) + return p1->est_success_rate < p2->est_success_rate ? -1 : 1; + else + return p1->est_success_rate < p2->est_success_rate ? 1 : -1; + } + else + { + return p1->p_cost < p2->p_cost ? -1 : 1; + } +} + + +static void +predlist_merge_sort(struct predlist *list, + struct predicate **last) +{ + struct predlist new_list; + struct predicate *p, *q; + + if (NULL == list->head) + return; /* nothing to do */ + + if (options.debug_options & DebugTreeOpt) + { + fprintf(stderr, "%s:\n", "predlist before merge sort"); + print_tree(stderr, list->head, 2); + } + + calculate_derived_rates(list->head); + predlist_init(&new_list); + while (list->head) + { + /* remove head of source list */ + q = list->head; + list->head = list->head->pred_left; + q->pred_left = NULL; + + /* insert it into the new list */ + for (p=new_list.head; p; p=p->pred_left) + { + /* If these operations are OR operations, we want to get a + * successful test as soon as possible, to take advantage of + * the short-circuit evaluation. If they're AND, we want to + * get an unsuccessful result early for the same reason. + * Therefore we invert the sense of the comparison for the + * OR case. We only want to invert the sense of the success + * rate comparison, not the operation cost comparison. Hence we + * pass a flag into pred_cost_compare(). + */ + boolean wantfailure = (OR_PREC != p->p_prec); + if (pred_cost_compare(p->pred_right, q->pred_right, wantfailure) >= 0) + break; + } + if (p) + { + /* insert into existing list */ + q->pred_left = p->pred_left; + if (NULL == q->pred_left) + new_list.tail = q; + p->pred_left = q; + } + else + { + q->pred_left = new_list.head; /* prepend */ + new_list.head = q; + if (NULL == new_list.tail) + new_list.tail = q; /* first item in new list */ + } + } + if (options.debug_options & DebugTreeOpt) + { + fprintf(stderr, "%s:\n", "predlist after merge sort"); + print_tree(stderr, new_list.head, 2); + } + + calculate_derived_rates(new_list.head); + merge_pred(new_list.head, new_list.tail, last); + predlist_init(list); +} + +static void +merge_lists(struct predlist lists[], int nlists, + struct predlist *name_list, + struct predlist *regex_list, + struct predicate **last) +{ + int i; + static void (*mergefn)(struct predlist *, struct predicate**); + + mergefn = predlist_merge_sort; + + mergefn(name_list, last); + mergefn(regex_list, last); + + for (i=0; iside_effects + || subtree_has_side_effects(p->pred_left) + || subtree_has_side_effects(p->pred_right); + } + else + { + + return false; + } +} + +static int +worst_cost (const struct predicate *p) +{ + if (p) + { + unsigned int cost_r, cost_l, worst; + cost_l = worst_cost(p->pred_left); + cost_r = worst_cost(p->pred_right); + worst = (cost_l > cost_r) ? cost_l : cost_r; + if (worst < p->p_cost) + worst = p->p_cost; + return worst; + } + else + { + return 0; + } +} + + + +static void +perform_arm_swap(struct predicate *p) +{ + struct predicate *tmp = p->pred_left->pred_right; + p->pred_left->pred_right = p->pred_right; + p->pred_right = tmp; +} + +/* Consider swapping p->pred_left->pred_right with p->pred_right, + * if that yields a faster evaluation. Normally the left predicate is + * evaluated first. + * + * If the operation is an OR, we want the left predicate to be the one that + * succeeds most often. If it is an AND, we want it to be the predicate that + * fails most often. + * + * We don't consider swapping arms of an operator where their cost is + * different or where they have side effects. + * + * A viable test case for this is + * ./find -D opt -O3 . \! -type f -o -type d + * Here, the ! -type f should be evaluated first, + * as we assume that 95% of inodes are vanilla files. + */ +static boolean +consider_arm_swap(struct predicate *p) +{ + int left_cost, right_cost; + const char *reason = NULL; + struct predicate **pl, **pr; + + if (BI_OP != p->p_type) + reason = "Not a binary operation"; + + if (!reason) + { + if (NULL == p->pred_left || NULL == p->pred_right) + reason = "Doesn't have two arms"; + } + + + if (!reason) + { + if (NULL == p->pred_left->pred_right) + reason = "Left arm has no child on RHS"; + } + pr = &p->pred_right; + pl = &p->pred_left->pred_right; + + if (!reason) + { + if (subtree_has_side_effects(*pl)) + reason = "Left subtree has side-effects"; + } + if (!reason) + { + if (subtree_has_side_effects(*pr)) + reason = "Right subtree has side-effects"; + } + + if (!reason) + { + left_cost = worst_cost(*pl); + right_cost = worst_cost(*pr); + + if (left_cost < right_cost) + { + reason = "efficient as-is"; + } + } + if (!reason) + { + boolean want_swap; + + if (left_cost == right_cost) + { + /* it's a candidate */ + float succ_rate_l = (*pl)->est_success_rate; + float succ_rate_r = (*pr)->est_success_rate; + + if (options.debug_options & DebugTreeOpt) + { + fprintf(stderr, "Success rates: l=%f, r=%f\n", succ_rate_l, succ_rate_r); + } + + if (pred_is(p, pred_or)) + { + want_swap = succ_rate_r < succ_rate_l; + if (!want_swap) + reason = "Operation is OR and right success rate >= left"; + } + else if (pred_is(p, pred_and)) + { + want_swap = succ_rate_r > succ_rate_l; + if (!want_swap) + reason = "Operation is AND and right success rate <= left"; + } + else + { + want_swap = false; + reason = "Not AND or OR"; + } + } + else + { + want_swap = true; + } + + if (want_swap) + { + if (options.debug_options & DebugTreeOpt) + { + fprintf(stderr, "Performing arm swap on:\n"); + print_tree (stderr, p, 0); + } + perform_arm_swap(p); + return true; + } + } + + + if (options.debug_options & DebugTreeOpt) + { + fprintf(stderr, "Not an arm swap candidate (%s):\n", reason); + print_tree (stderr, p, 0); + } + return false; +} + +static boolean +do_arm_swaps(struct predicate *p) +{ + if (p) + { + boolean swapped; + do + { + swapped = false; + if (consider_arm_swap(p) + || do_arm_swaps(p->pred_left) + || do_arm_swaps(p->pred_right)) + { + swapped = true; + } + } while (swapped); + return swapped; + } + else + { + return false; + } +} + + + +/* Optimize the ordering of the predicates in the tree. Rearrange + them to minimize work. Strategies: + * Evaluate predicates that don't need inode information first; + the predicates are divided into 1 or more groups separated by + predicates (if any) which have "side effects", such as printing. + The grouping implements the partial ordering on predicates which + those with side effects impose. + + * Place -name, -iname, -path, -ipath, -regex and -iregex at the front + of a group, with -name, -iname, -path and -ipath ahead of + -regex and -iregex. Predicates which are moved to the front + of a group by definition do not have side effects. Both + -regex and -iregex both use pred_regex. + + If higher optimisation levels have been selected, reordering also + occurs according to the p_cost member of each predicate (which + reflects the performance cost of the test). The ordering also + bears in mind whether these operations are more likely to succeed + or fail. When evauating a chain of OR conditions, we prefer + tests likely to succeed at the front of the list. For AND, we + prefer tests likely to fail at the front of the list. + + This routine "normalizes" the predicate tree by ensuring that + all expression predicates have AND (or OR or COMMA) parent nodes + which are linked along the left edge of the expression tree. + This makes manipulation of subtrees easier. + + EVAL_TREEP points to the root pointer of the predicate tree + to be rearranged. opt_expr may return a new root pointer there. + Return true if the tree contains side effects, false if not. */ + +static boolean +opt_expr (struct predicate **eval_treep) +{ + struct predlist regex_list={NULL,NULL}, name_list={NULL,NULL}; + struct predlist cbo_list[NumEvaluationCosts]; + int i; + struct predicate *curr; + struct predicate **prevp; /* Address of `curr' node. */ + struct predicate **last_sidep; /* Last predicate with side effects. */ + PRED_FUNC pred_func; + enum predicate_type p_type; + boolean has_side_effects = false; /* Return value. */ + enum predicate_precedence prev_prec, /* precedence of last BI_OP in branch */ + biop_prec; /* topmost BI_OP precedence in branch */ + + if (eval_treep == NULL || *eval_treep == NULL) + return (false); + + for (i=0; ipred_left != NULL) + { + prevp = &curr->pred_left; + prev_prec = curr->p_prec; /* must be a BI_OP */ + curr = curr->pred_left; + } + + /* Link in the appropriate BI_OP for the last expression, if needed. */ + if (curr->p_type != BI_OP) + set_new_parent (curr, prev_prec, prevp); + + if (options.debug_options & (DebugExpressionTree|DebugTreeOpt)) + { + /* Normalized tree. */ + fprintf (stderr, "Normalized Eval Tree:\n"); + print_tree (stderr, *eval_treep, 0); + } + + /* Rearrange the predicates. */ + prevp = eval_treep; + biop_prec = NO_PREC; /* not COMMA_PREC */ + if ((*prevp) && (*prevp)->p_type == BI_OP) + biop_prec = (*prevp)->p_prec; + while ((curr = *prevp) != NULL) + { + /* If there is a BI_OP of different precedence from the first + in the pred_left chain, create a new parent of the + original precedence, link the new parent to the left of the + previous and link CURR to the right of the new parent. + This preserves the precedence of expressions in the tree + in case we rearrange them. */ + if (curr->p_type == BI_OP) + { + if (curr->p_prec != biop_prec) + curr = set_new_parent(curr, biop_prec, prevp); + } + + /* See which predicate type we have. */ + p_type = curr->pred_right->p_type; + pred_func = curr->pred_right->pred_func; + + + switch (p_type) + { + case NO_TYPE: + case PRIMARY_TYPE: + /* Don't rearrange the arguments of the comma operator, it is + not commutative. */ + if (biop_prec == COMMA_PREC) + break; + + /* If this predicate has no side effects, consider reordering it. */ + if (!curr->pred_right->side_effects) + { + boolean reorder; + + /* If it's one of our special primaries, move it to the + front of the list for that primary. */ + if (predicate_is_cost_free(curr->pred_right)) + { + if (options.debug_options & DebugTreeOpt) + { + fprintf(stderr, "-O%d: promoting cheap predicate ", + (int)options.optimisation_level); + print_predicate(stderr, curr->pred_right); + fprintf(stderr, " into name_list\n"); + } + predlist_insert(&name_list, curr, prevp); + continue; + } + + if (pred_func == pred_regex) + { + predlist_insert(®ex_list, curr, prevp); + continue; + } + + reorder = ((options.optimisation_level > 1) + && (NeedsType == curr->pred_right->p_cost) + && !curr->pred_right->need_stat) || + (options.optimisation_level > 2); + + if (reorder) + { + if (options.debug_options & DebugTreeOpt) + { + fprintf(stderr, "-O%d: categorising predicate ", + (int)options.optimisation_level); + print_predicate(stderr, curr->pred_right); + fprintf(stderr, " by cost (%s)\n", + cost_name(curr->pred_right->p_cost)); + } + predlist_insert(&cbo_list[curr->pred_right->p_cost], curr, prevp); + continue; + } + } + + break; + + case UNI_OP: + /* For NOT, check the expression trees below the NOT. */ + curr->pred_right->side_effects + = opt_expr (&curr->pred_right->pred_right); + break; + + case BI_OP: + /* For nested AND or OR, recurse (AND/OR form layers on the left of + the tree), and continue scanning this level of AND or OR. */ + curr->pred_right->side_effects = opt_expr (&curr->pred_right); + break; + + /* At this point, get_expr and scan_rest have already removed + all of the user's parentheses. */ + + default: + error (1, 0, _("oops -- invalid expression type!")); + break; + } + + if (curr->pred_right->side_effects == true) + { + last_sidep = prevp; + + /* Incorporate lists and reset list pointers for this group. */ + merge_lists(cbo_list, NumEvaluationCosts, &name_list, ®ex_list, last_sidep); + has_side_effects = true; + } + + prevp = &curr->pred_left; + } + + /* Do final list merges. */ + last_sidep = prevp; + merge_lists(cbo_list, NumEvaluationCosts, &name_list, ®ex_list, last_sidep); + return has_side_effects; +} + +static float +constrain_rate(float rate) +{ + if (rate > 1.0f) + return 1.0; + else if (rate < 0.0) + return 0.0; + else + return rate; +} + +/* Link in a new parent BI_OP node for CURR, at *PREVP, with precedence + HIGH_PREC. */ + +static struct predicate * +set_new_parent (struct predicate *curr, enum predicate_precedence high_prec, struct predicate **prevp) +{ + struct predicate *new_parent; + + new_parent = xmalloc (sizeof (struct predicate)); + new_parent->p_type = BI_OP; + new_parent->p_prec = high_prec; + new_parent->need_stat = false; + new_parent->need_type = false; + new_parent->p_cost = NeedsNothing; + + switch (high_prec) + { + case COMMA_PREC: + new_parent->pred_func = pred_comma; + new_parent->p_name = ","; + new_parent->est_success_rate = 1.0; + break; + case OR_PREC: + new_parent->pred_func = pred_or; + new_parent->p_name = "-o"; + new_parent->est_success_rate = constrain_rate(curr->est_success_rate); + break; + case AND_PREC: + new_parent->pred_func = pred_and; + new_parent->p_name = "-a"; + new_parent->est_success_rate = constrain_rate(curr->est_success_rate); + break; + default: + ; /* empty */ + } + + new_parent->side_effects = false; + new_parent->no_default_print = false; + new_parent->args.str = NULL; + new_parent->pred_next = NULL; + + /* Link in new_parent. + Pushes rest of left branch down 1 level to new_parent->pred_right. */ + new_parent->pred_left = NULL; + new_parent->pred_right = curr; + *prevp = new_parent; + + return new_parent; +} + +/* Merge the predicate list that starts at BEG_LIST and ends at END_LIST + into the tree at LAST_P. */ + +static void +merge_pred (struct predicate *beg_list, struct predicate *end_list, struct predicate **last_p) +{ + end_list->pred_left = *last_p; + *last_p = beg_list; +} + +/* Find the first node in expression tree TREE that requires + a stat call and mark the operator above it as needing a stat + before calling the node. Since the expression precedences + are represented in the tree, some preds that need stat may not + get executed (because the expression value is determined earlier.) + So every expression needing stat must be marked as such, not just + the earliest, to be sure to obtain the stat. This still guarantees + that a stat is made as late as possible. Return true if the top node + in TREE requires a stat, false if not. */ + + +struct pred_cost_lookup +{ + PRED_FUNC fn; + enum EvaluationCost cost; +}; +static struct pred_cost_lookup costlookup[] = + { + { pred_amin , NeedsStatInfo }, + { pred_and , NeedsNothing, }, + { pred_anewer , NeedsStatInfo, }, + { pred_atime , NeedsStatInfo, }, + { pred_closeparen, NeedsNothing }, + { pred_cmin , NeedsStatInfo, }, + { pred_cnewer , NeedsStatInfo, }, + { pred_comma , NeedsNothing, }, + { pred_ctime , NeedsStatInfo, }, + { pred_delete , NeedsSyncDiskHit }, + { pred_empty , NeedsStatInfo }, + { pred_exec , NeedsEventualExec }, + { pred_execdir , NeedsEventualExec }, + { pred_executable, NeedsAccessInfo }, + { pred_false , NeedsNothing }, + { pred_fprint , NeedsNothing }, + { pred_fprint0 , NeedsNothing }, + { pred_fprintf , NeedsNothing }, + { pred_fstype , NeedsStatInfo }, /* true for amortised cost */ + { pred_gid , NeedsStatInfo }, + { pred_group , NeedsStatInfo }, + { pred_ilname , NeedsLinkName }, + { pred_iname , NeedsNothing }, + { pred_inum , NeedsStatInfo }, + { pred_ipath , NeedsNothing }, + { pred_links , NeedsStatInfo }, + { pred_lname , NeedsLinkName }, + { pred_ls , NeedsStatInfo }, + { pred_fls , NeedsStatInfo }, + { pred_mmin , NeedsStatInfo }, + { pred_mtime , NeedsStatInfo }, + { pred_name , NeedsNothing }, + { pred_negate , NeedsNothing, }, + { pred_newer , NeedsStatInfo, }, + { pred_newerXY , NeedsStatInfo, }, + { pred_nogroup , NeedsStatInfo }, /* true for amortised cost if caching is on */ + { pred_nouser , NeedsStatInfo }, /* true for amortised cost if caching is on */ + { pred_ok , NeedsUserInteraction }, + { pred_okdir , NeedsUserInteraction }, + { pred_openparen , NeedsNothing }, + { pred_or , NeedsNothing, }, + { pred_path , NeedsNothing }, + { pred_perm , NeedsStatInfo }, + { pred_print , NeedsNothing }, + { pred_print0 , NeedsNothing }, + { pred_prune , NeedsNothing }, + { pred_quit , NeedsNothing }, + { pred_readable , NeedsAccessInfo }, + { pred_regex , NeedsNothing }, + { pred_samefile , NeedsStatInfo }, + { pred_size , NeedsStatInfo }, + { pred_true , NeedsNothing }, + { pred_type , NeedsType }, + { pred_uid , NeedsStatInfo }, + { pred_used , NeedsStatInfo }, + { pred_user , NeedsStatInfo }, + { pred_writable , NeedsAccessInfo }, + { pred_xtype , NeedsType } /* roughly correct unless most files are symlinks */ + }; +static int pred_table_sorted = 0; + +static boolean +check_sorted(void *base, size_t members, size_t membersize, + int (*cmpfn)(const void*, const void*)) +{ + const char *p = base; + size_t i; + for (i=1u; ifn; + u2.pfn = pc2->fn; + return memcmp(u1.mem, u2.mem, sizeof(u1.pfn)); +} + +static enum EvaluationCost +get_pred_cost(const struct predicate *p) +{ + enum EvaluationCost data_requirement_cost = NeedsNothing; + enum EvaluationCost inherent_cost = NeedsUnknown; + + if (p->need_stat) + { + data_requirement_cost = NeedsStatInfo; + } + else if (p->need_type) + { + data_requirement_cost = NeedsType; + } + else + { + data_requirement_cost = NeedsNothing; + } + + if (pred_is(p, pred_exec) || pred_is(p, pred_execdir)) + { + if (p->args.exec_vec.multiple) + inherent_cost = NeedsEventualExec; + else + inherent_cost = NeedsImmediateExec; + } + else if (pred_is(p, pred_fprintf)) + { + /* the parser calculated the cost for us. */ + inherent_cost = p->p_cost; + } + else + { + struct pred_cost_lookup key; + void *entry; + + if (!pred_table_sorted) + { + qsort(costlookup, + sizeof(costlookup)/sizeof(costlookup[0]), + sizeof(costlookup[0]), + cost_table_comparison); + + if (!check_sorted(costlookup, + sizeof(costlookup)/sizeof(costlookup[0]), + sizeof(costlookup[0]), + cost_table_comparison)) + { + error(1, 0, "Failed to sort the costlookup array (indirect)."); + } + pred_table_sorted = 1; + } + key.fn = p->pred_func; + entry = bsearch(&key, costlookup, + sizeof(costlookup)/sizeof(costlookup[0]), + sizeof(costlookup[0]), + cost_table_comparison); + if (entry) + { + inherent_cost = ((const struct pred_cost_lookup*)entry)->cost; + } + else + { + error(0, 0, "warning: no cost entry for predicate %s", p->p_name); + inherent_cost = NeedsUnknown; + } + } + + if (inherent_cost > data_requirement_cost) + return inherent_cost; + else + return data_requirement_cost; +} + +static void +estimate_costs (struct predicate *tree) +{ + if (tree) + { + estimate_costs(tree->pred_right); + estimate_costs(tree->pred_left); + + tree->p_cost = get_pred_cost(tree); + } +} + +struct predicate* +get_eval_tree(void) +{ + return eval_tree; +} + +static float +getrate(const struct predicate *p) +{ + if (p) + return p->est_success_rate; + else + return 1.0f; +} + + +float +calculate_derived_rates(struct predicate *p) +{ + assert (NULL != p); + + if (p->pred_right) + calculate_derived_rates(p->pred_right); + if (p->pred_left) + calculate_derived_rates(p->pred_left); + + assert (p->p_type != CLOSE_PAREN); + assert (p->p_type != OPEN_PAREN); + + switch (p->p_type) + { + case NO_TYPE: + assert (NULL == p->pred_right); + assert (NULL == p->pred_left); + return p->est_success_rate; + + case PRIMARY_TYPE: + assert (NULL == p->pred_right); + assert (NULL == p->pred_left); + return p->est_success_rate; + + case UNI_OP: + /* Unary operators must have exactly one operand */ + assert (pred_is(p, pred_negate)); + assert (NULL == p->pred_left); + p->est_success_rate = (1.0 - p->pred_right->est_success_rate); + return p->est_success_rate; + + case BI_OP: + { + float rate; + /* Binary operators must have two operands */ + if (pred_is(p, pred_and)) + { + rate = getrate(p->pred_right) * getrate(p->pred_left); + } + else if (pred_is(p, pred_comma)) + { + rate = 1.0f; + } + else if (pred_is(p, pred_or)) + { + rate = getrate(p->pred_right) + getrate(p->pred_left); + } + else + { + /* only and, or and comma are BI_OP. */ + assert (0); + abort (); + } + p->est_success_rate = constrain_rate(rate); + } + return p->est_success_rate; + + case OPEN_PAREN: + case CLOSE_PAREN: + p->est_success_rate = 1.0; + return p->est_success_rate; + } + assert (0); + abort (); +} + +/* opt_expr() rearranges predicates such that each left subtree is + * rooted at a logical predicate (e.g. and or or). check_normalization() + * asserts that this property still holds. + * + */ +static void check_normalization(struct predicate *p, boolean at_root) +{ + if (at_root) + { + assert (BI_OP == p->p_type); + } + + if (p->pred_left) + { + assert (BI_OP == p->pred_left->p_type); + check_normalization(p->pred_left, false); + } + if (p->pred_right) + { + check_normalization(p->pred_right, false); + } +} + +struct predicate* +build_expression_tree(int argc, char *argv[], int end_of_leading_options) +{ + const struct parser_table *parse_entry; /* Pointer to the parsing table entry for this expression. */ + char *predicate_name; /* Name of predicate being parsed. */ + struct predicate *cur_pred; + const struct parser_table *entry_close, *entry_print, *entry_open; + int i, oldi; + + predicates = NULL; + + /* Find where in ARGV the predicates begin by skipping the list of + * start points. + */ + for (i = end_of_leading_options; i < argc && !looks_like_expression(argv[i], true); i++) + { + /* Do nothing. */ ; + } + + /* Enclose the expression in `( ... )' so a default -print will + apply to the whole expression. */ + entry_open = find_parser("("); + entry_close = find_parser(")"); + entry_print = find_parser("print"); + assert (entry_open != NULL); + assert (entry_close != NULL); + assert (entry_print != NULL); + + parse_openparen (entry_open, argv, &argc); + last_pred->p_name = "("; + predicates->artificial = true; + parse_begin_user_args(argv, argc, last_pred, predicates); + pred_sanity_check(last_pred); + + /* Build the input order list. */ + while (i < argc ) + { + if (!looks_like_expression(argv[i], false)) + { + error (0, 0, _("paths must precede expression: %s"), argv[i]); + usage(stderr, 1, NULL); + } + + predicate_name = argv[i]; + parse_entry = find_parser (predicate_name); + if (parse_entry == NULL) + { + /* Command line option not recognized */ + error (1, 0, _("unknown predicate `%s'"), predicate_name); + } + + /* We have recognised a test of the form -foo. Eat that, + * unless it is a predicate like -newerXY. + */ + if (parse_entry->type != ARG_SPECIAL_PARSE) + { + i++; + } + oldi = i; + if (!(*(parse_entry->parser_func)) (parse_entry, argv, &i)) + { + if (argv[i]) + { + if ( (ARG_SPECIAL_PARSE == parse_entry->type) && (i == oldi) ) + { + /* The special parse function spat out the + * predicate. It must be invalid, or not tasty. + */ + error (1, 0, _("invalid predicate `%s'"), + predicate_name); + } + else + { + error (1, 0, _("invalid argument `%s' to `%s'"), + argv[i], predicate_name); + } + } + else + { + /* Command line option requires an argument */ + error (1, 0, _("missing argument to `%s'"), predicate_name); + } + } + else + { + last_pred->p_name = predicate_name; + + /* If the parser consumed an argument, save it. */ + if (i != oldi) + last_pred->arg_text = argv[oldi]; + else + last_pred->arg_text = NULL; + } + pred_sanity_check(last_pred); + pred_sanity_check(predicates); /* XXX: expensive */ + } + parse_end_user_args(argv, argc, last_pred, predicates); + if (predicates->pred_next == NULL) + { + /* No predicates that do something other than set a global variable + were given; remove the unneeded initial `(' and add `-print'. */ + cur_pred = predicates; + predicates = last_pred = predicates->pred_next; + free (cur_pred); + parse_print (entry_print, argv, &argc); + last_pred->p_name = "-print"; + pred_sanity_check(last_pred); + pred_sanity_check(predicates); /* XXX: expensive */ + } + else if (!default_prints (predicates->pred_next)) + { + /* One or more predicates that produce output were given; + remove the unneeded initial `('. */ + cur_pred = predicates; + predicates = predicates->pred_next; + pred_sanity_check(predicates); /* XXX: expensive */ + free (cur_pred); + } + else + { + /* `( user-supplied-expression ) -print'. */ + parse_closeparen (entry_close, argv, &argc); + last_pred->p_name = ")"; + last_pred->artificial = true; + pred_sanity_check(last_pred); + parse_print (entry_print, argv, &argc); + last_pred->p_name = "-print"; + last_pred->artificial = true; + pred_sanity_check(last_pred); + pred_sanity_check(predicates); /* XXX: expensive */ + } + + if (options.debug_options & (DebugExpressionTree|DebugTreeOpt)) + { + fprintf (stderr, "Predicate List:\n"); + print_list (stderr, predicates); + } + + /* do a sanity check */ + pred_sanity_check(predicates); + + /* Done parsing the predicates. Build the evaluation tree. */ + cur_pred = predicates; + eval_tree = get_expr (&cur_pred, NO_PREC, NULL); + calculate_derived_rates(eval_tree); + + /* Check if we have any left-over predicates (this fixes + * Debian bug #185202). + */ + if (cur_pred != NULL) + { + /* cur_pred->p_name is often NULL here */ + if (pred_is(cur_pred, pred_closeparen)) + { + /* e.g. "find \( -true \) \)" */ + error (1, 0, _("you have too many ')'")); + } + else + { + if (cur_pred->p_name) + error (1, 0, _("unexpected extra predicate '%s'"), cur_pred->p_name); + else + error (1, 0, _("unexpected extra predicate")); + } + } + + if (options.debug_options & (DebugExpressionTree|DebugTreeOpt)) + { + fprintf (stderr, "Eval Tree:\n"); + print_tree (stderr, eval_tree, 0); + } + + estimate_costs(eval_tree); + + /* Rearrange the eval tree in optimal-predicate order. */ + opt_expr (&eval_tree); + + /* Check that the tree is in normalised order (opt_expr does this) */ + check_normalization(eval_tree, true); + + do_arm_swaps(eval_tree); + + /* Check that the tree is still in normalised order */ + check_normalization(eval_tree, true); + + if (options.debug_options & (DebugExpressionTree|DebugTreeOpt)) + { + fprintf (stderr, "Optimized Eval Tree:\n"); + print_tree (stderr, eval_tree, 0); + fprintf (stderr, "Optimized command line:\n"); + print_optlist(stderr, eval_tree); + fprintf(stderr, "\n"); + } + + return eval_tree; +} + +/* Initialise the performance data for a predicate. + */ +static void +init_pred_perf(struct predicate *pred) +{ + struct predicate_performance_info *p = &pred->perf; + p->visits = p->successes = 0; +} + + +/* Return a pointer to a new predicate structure, which has been + linked in as the last one in the predicates list. + + Set `predicates' to point to the start of the predicates list. + Set `last_pred' to point to the new last predicate in the list. + + Set all cells in the new structure to the default values. */ + +struct predicate * +get_new_pred (const struct parser_table *entry) +{ + register struct predicate *new_pred; + (void) entry; + + /* Options should not be turned into predicates. */ + assert (entry->type != ARG_OPTION); + assert (entry->type != ARG_POSITIONAL_OPTION); + + if (predicates == NULL) + { + predicates = (struct predicate *) + xmalloc (sizeof (struct predicate)); + last_pred = predicates; + } + else + { + new_pred = xmalloc (sizeof (struct predicate)); + last_pred->pred_next = new_pred; + last_pred = new_pred; + } + last_pred->parser_entry = entry; + last_pred->pred_func = NULL; + last_pred->p_name = NULL; + last_pred->p_type = NO_TYPE; + last_pred->p_prec = NO_PREC; + last_pred->side_effects = false; + last_pred->no_default_print = false; + last_pred->need_stat = true; + last_pred->need_type = true; + last_pred->args.str = NULL; + last_pred->pred_next = NULL; + last_pred->pred_left = NULL; + last_pred->pred_right = NULL; + last_pred->literal_control_chars = options.literal_control_chars; + last_pred->artificial = false; + last_pred->est_success_rate = 1.0; + init_pred_perf(last_pred); + return last_pred; +} + +/* Return a pointer to a new predicate, with operator check. + Like get_new_pred, but it checks to make sure that the previous + predicate is an operator. If it isn't, the AND operator is inserted. */ + +struct predicate * +get_new_pred_chk_op (const struct parser_table *entry) +{ + struct predicate *new_pred; + static const struct parser_table *entry_and = NULL; + + /* Locate the entry in the parser table for the "and" operator */ + if (NULL == entry_and) + entry_and = find_parser("and"); + + /* Check that it's actually there. If not, that is a bug.*/ + assert (entry_and != NULL); + + if (last_pred) + switch (last_pred->p_type) + { + case NO_TYPE: + error (1, 0, _("oops -- invalid default insertion of and!")); + break; + + case PRIMARY_TYPE: + case CLOSE_PAREN: + /* We need to interpose the and operator. */ + new_pred = get_new_pred (entry_and); + new_pred->pred_func = pred_and; + new_pred->p_name = "-a"; + new_pred->p_type = BI_OP; + new_pred->p_prec = AND_PREC; + new_pred->need_stat = false; + new_pred->need_type = false; + new_pred->args.str = NULL; + new_pred->side_effects = false; + new_pred->no_default_print = false; + break; + + default: + break; + } + + new_pred = get_new_pred (entry); + new_pred->parser_entry = entry; + return new_pred; +} + +struct cost_assoc +{ + enum EvaluationCost cost; + char *name; +}; +struct cost_assoc cost_table[] = + { + { NeedsNothing, "Nothing" }, + { NeedsType, "Type" }, + { NeedsStatInfo, "StatInfo" }, + { NeedsLinkName, "LinkName" }, + { NeedsAccessInfo, "AccessInfo" }, + { NeedsSyncDiskHit, "SyncDiskHit" }, + { NeedsEventualExec, "EventualExec" }, + { NeedsImmediateExec, "ImmediateExec" }, + { NeedsUserInteraction, "UserInteraction" }, + { NeedsUnknown, "Unknown" } + }; + +struct prec_assoc +{ + short prec; + char *prec_name; +}; + +static struct prec_assoc prec_table[] = +{ + {NO_PREC, "no"}, + {COMMA_PREC, "comma"}, + {OR_PREC, "or"}, + {AND_PREC, "and"}, + {NEGATE_PREC, "negate"}, + {MAX_PREC, "max"}, + {-1, "unknown "} +}; + +struct op_assoc +{ + short type; + char *type_name; +}; + +static struct op_assoc type_table[] = +{ + {NO_TYPE, "no"}, + {PRIMARY_TYPE, "primary"}, + {UNI_OP, "uni_op"}, + {BI_OP, "bi_op"}, + {OPEN_PAREN, "open_paren "}, + {CLOSE_PAREN, "close_paren "}, + {-1, "unknown"} +}; + +static const char * +cost_name (enum EvaluationCost cost) +{ + unsigned int i; + unsigned int n = sizeof(cost_table)/sizeof(cost_table[0]); + + for (i = 0; ip_type), prec_name (node->p_prec)); + fprintf (fp, " cost=%s rate=%#03.2g %sside effects ", + cost_name(node->p_cost), + node->est_success_rate, + (node->side_effects ? "" : "no ")); + + if (node->need_stat || node->need_type) + { + int comma = 0; + + fprintf (fp, "Needs "); + if (node->need_stat) + { + fprintf (fp, "stat"); + comma = 1; + } + if (node->need_type) + { + fprintf (fp, "%stype", comma ? "," : ""); + } + } + fprintf (fp, "\n"); + + + for (i = 0; i < indent; i++) + fprintf (fp, " "); + if (NULL == node->pred_left && NULL == node->pred_right) + { + fprintf (fp, "no children.\n"); + } + else + { + if (node->pred_left) + { + fprintf (fp, "left:\n"); + print_tree (fp, node->pred_left, indent + 1); + } + else + { + fprintf (fp, "no left.\n"); + } + + for (i = 0; i < indent; i++) + fprintf (fp, " "); + if (node->pred_right) + { + fprintf (fp, "right:\n"); + print_tree (fp, node->pred_right, indent + 1); + } + else + { + fprintf (fp, "no right.\n"); + } + } +} diff --git a/find/util.c b/find/util.c new file mode 100644 index 0000000..388f9fc --- /dev/null +++ b/find/util.c @@ -0,0 +1,1035 @@ +/* util.c -- functions for initializing new tree elements, and other things. + Copyright (C) 1990, 91, 92, 93, 94, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include +#include "defs.h" + +#include +#ifdef HAVE_SYS_UTSNAME_H +#include +#endif +#include +#include +#include +#include +#include +#include + +#include "xalloc.h" +#include "quotearg.h" +#include "timespec.h" +#include "error.h" +#include "verify.h" +#include "openat.h" + +#if ENABLE_NLS +# include +# define _(Text) gettext (Text) +#else +# define _(Text) Text +#endif +#ifdef gettext_noop +# define N_(String) gettext_noop (String) +#else +/* See locate.c for explanation as to why not use (String) */ +# define N_(String) String +#endif + + +struct debug_option_assoc +{ + char *name; + int val; + char *docstring; +}; +static struct debug_option_assoc debugassoc[] = + { + { "help", DebugHelp, "Explain the various -D options" }, + { "tree", DebugExpressionTree, "Display the expression tree" }, + { "search",DebugSearch, "Navigate the directory tree verbosely" }, + { "stat", DebugStat, "Trace calls to stat(2) and lstat(2)" }, + { "rates", DebugSuccessRates, "Indicate how often each predicate succeeded" }, + { "opt", DebugExpressionTree|DebugTreeOpt, "Show diagnostic information relating to optimisation" }, + { "exec", DebugExec, "Show diagnostic information relating to -exec, -execdir, -ok and -okdir" } + }; +#define N_DEBUGASSOC (sizeof(debugassoc)/sizeof(debugassoc[0])) + + + + +/* Add a primary of predicate type PRED_FUNC (described by ENTRY) to the predicate input list. + + Return a pointer to the predicate node just inserted. + + Fills in the following cells of the new predicate node: + + pred_func PRED_FUNC + args(.str) NULL + p_type PRIMARY_TYPE + p_prec NO_PREC + + Other cells that need to be filled in are defaulted by + get_new_pred_chk_op, which is used to insure that the prior node is + either not there at all (we are the very first node) or is an + operator. */ + +struct predicate * +insert_primary_withpred (const struct parser_table *entry, PRED_FUNC pred_func) +{ + struct predicate *new_pred; + + new_pred = get_new_pred_chk_op (entry); + new_pred->pred_func = pred_func; + new_pred->p_name = entry->parser_name; + new_pred->args.str = NULL; + new_pred->p_type = PRIMARY_TYPE; + new_pred->p_prec = NO_PREC; + return new_pred; +} + +/* Add a primary described by ENTRY to the predicate input list. + + Return a pointer to the predicate node just inserted. + + Fills in the following cells of the new predicate node: + + pred_func PRED_FUNC + args(.str) NULL + p_type PRIMARY_TYPE + p_prec NO_PREC + + Other cells that need to be filled in are defaulted by + get_new_pred_chk_op, which is used to insure that the prior node is + either not there at all (we are the very first node) or is an + operator. */ +struct predicate * +insert_primary (const struct parser_table *entry) +{ + assert (entry->pred_func != NULL); + return insert_primary_withpred(entry, entry->pred_func); +} + + + +static void +show_valid_debug_options(FILE *fp, int full) +{ + int i; + if (full) + { + fprintf(fp, "Valid arguments for -D:\n"); + for (i=0; i0 ? "|" : ""), debugassoc[i].name); + } + } +} + +void +usage (FILE *fp, int status, char *msg) +{ + if (msg) + fprintf (fp, "%s: %s\n", program_name, msg); + + fprintf (fp, _("Usage: %s [-H] [-L] [-P] [-Olevel] [-D "), program_name); + show_valid_debug_options(fp, 0); + fprintf (fp, _("] [path...] [expression]\n")); + if (0 != status) + exit (status); +} + +void +set_stat_placeholders(struct stat *p) +{ +#if HAVE_STRUCT_STAT_ST_BIRTHTIME + p->st_birthtime = 0; +#endif +#if HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC + p->st_birthtimensec = 0; +#endif +#if HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC + p->st_birthtimespec.tv_nsec = -1; +#endif +#if HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_SEC + p->st_birthtimespec.tv_sec = 0; +#endif +} + + +/* Get the stat information for a file, if it is + * not already known. + */ +int +get_statinfo (const char *pathname, const char *name, struct stat *p) +{ + /* Set markers in fields so we have a good idea if the implementation + * didn't bother to set them (e.g., NetBSD st_birthtimespec for MS-DOS + * files) + */ + if (!state.have_stat) + { + set_stat_placeholders(p); + if (0 == (*options.xstat) (name, p)) + { + if (00000 == p->st_mode) + { + /* Savannah bug #16378. */ + error(0, 0, _("Warning: file %s appears to have mode 0000"), + quotearg_n_style(0, options.err_quoting_style, name)); + } + } + else + { + if (!options.ignore_readdir_race || (errno != ENOENT) ) + { + error (0, errno, "%s", + safely_quote_err_filename(0, pathname)); + state.exit_status = 1; + } + return -1; + } + } + state.have_stat = true; + state.have_type = true; + state.type = p->st_mode; + + return 0; +} + + +/* Get the stat/type information for a file, if it is + * not already known. + */ +int +get_info (const char *pathname, + struct stat *p, + struct predicate *pred_ptr) +{ + boolean todo = false; + + /* If we need the full stat info, or we need the type info but don't + * already have it, stat the file now. + */ + if (pred_ptr->need_stat) + todo = true; + else if ((pred_ptr->need_type && (0 == state.have_type))) + todo = true; + + if (todo) + return get_statinfo(pathname, state.rel_pathname, p); + else + return 0; +} + +/* Determine if we can use O_NOFOLLOW. + */ +#if defined O_NOFOLLOW +boolean +check_nofollow(void) +{ + struct utsname uts; + float release; + + if (0 == O_NOFOLLOW) + { + return false; + } + + if (0 == uname(&uts)) + { + /* POSIX requires that atof() ignore "unrecognised suffixes". */ + release = atof(uts.release); + + if (0 == strcmp("Linux", uts.sysname)) + { + /* Linux kernels 2.1.126 and earlier ignore the O_NOFOLLOW flag. */ + return release >= 2.2; /* close enough */ + } + else if (0 == strcmp("FreeBSD", uts.sysname)) + { + /* FreeBSD 3.0-CURRENT and later support it */ + return release >= 3.1; + } + } + + /* Well, O_NOFOLLOW was defined, so we'll try to use it. */ + return true; +} +#endif + + + +/* Examine the predicate list for instances of -execdir or -okdir + * which have been terminated with '+' (build argument list) rather + * than ';' (singles only). If there are any, run them (this will + * have no effect if there are no arguments waiting). + */ +static void +do_complete_pending_execdirs(struct predicate *p, int dirfd) +{ + if (NULL == p) + return; + + assert (state.execdirs_outstanding); + + do_complete_pending_execdirs(p->pred_left, dirfd); + + if (pred_is(p, pred_execdir) || pred_is(p, pred_okdir)) + { + /* It's an exec-family predicate. p->args.exec_val is valid. */ + if (p->args.exec_vec.multiple) + { + struct exec_val *execp = &p->args.exec_vec; + + /* This one was terminated by '+' and so might have some + * left... Run it if necessary. + */ + if (execp->state.todo) + { + /* There are not-yet-executed arguments. */ + launch (&execp->ctl, &execp->state); + } + } + } + + do_complete_pending_execdirs(p->pred_right, dirfd); +} + +void +complete_pending_execdirs(int dirfd) +{ + if (state.execdirs_outstanding) + { + do_complete_pending_execdirs(get_eval_tree(), dirfd); + state.execdirs_outstanding = false; + } +} + + + +/* Examine the predicate list for instances of -exec which have been + * terminated with '+' (build argument list) rather than ';' (singles + * only). If there are any, run them (this will have no effect if + * there are no arguments waiting). + */ +void +complete_pending_execs(struct predicate *p) +{ + if (NULL == p) + return; + + complete_pending_execs(p->pred_left); + + /* It's an exec-family predicate then p->args.exec_val is valid + * and we can check it. + */ + /* XXX: what about pred_ok() ? */ + if (pred_is(p, pred_exec) && p->args.exec_vec.multiple) + { + struct exec_val *execp = &p->args.exec_vec; + + /* This one was terminated by '+' and so might have some + * left... Run it if necessary. Set state.exit_status if + * there are any problems. + */ + if (execp->state.todo) + { + /* There are not-yet-executed arguments. */ + launch (&execp->ctl, &execp->state); + } + } + + complete_pending_execs(p->pred_right); +} + +static void +traverse_tree(struct predicate *tree, + void (*callback)(struct predicate*)) +{ + if (tree->pred_left) + traverse_tree(tree->pred_left, callback); + + callback(tree); + + if (tree->pred_right) + traverse_tree(tree->pred_right, callback); +} + +static void +flush_and_close_output_files(struct predicate *p) +{ + if (pred_is(p, pred_fprint) + || pred_is(p, pred_fprintf) + || pred_is(p, pred_fls) + || pred_is(p, pred_fprint0)) + { + FILE *f = p->args.printf_vec.stream; + bool failed; + + if (f == stdout || f == stderr) + failed = fflush(p->args.printf_vec.stream) == EOF; + else + failed = fclose(p->args.printf_vec.stream) == EOF; + + if (failed) + nonfatal_file_error(p->args.printf_vec.filename); + } + else if (pred_is(p, pred_print)) + { + if (fflush(p->args.printf_vec.stream) == EOF) + { + nonfatal_file_error(p->args.printf_vec.filename); + } + } + else if (pred_is(p, pred_ls) || pred_is(p, pred_print0)) + { + if (fflush(stdout) == EOF) + { + /* XXX: migrate to printf_vec. */ + nonfatal_file_error("standard output"); + } + } +} + +/* Complete any outstanding commands. + */ +void +cleanup(void) +{ + struct predicate *eval_tree = get_eval_tree(); + if (eval_tree) + { + traverse_tree(eval_tree, complete_pending_execs); + complete_pending_execdirs(get_current_dirfd()); + traverse_tree(eval_tree, flush_and_close_output_files); + } +} + +/* Savannah bug #16378 manifests as an assertion failure in pred_type() + * when an NFS server returns st_mode with value 0 (of course the stat(2) + * system call is itself returning 0 in this case). + */ +#undef DEBUG_SV_BUG_16378 +#if defined DEBUG_SV_BUG_16378 +static int hook_fstatat(int fd, const char *name, struct stat *p, int flags) +{ + static int warned = 0; + + if (!warned) + { + /* No use of _() here; no point asking translators to translate a debug msg */ + error(0, 0, + "Warning: some debug code is enabled for Savannah bug #16378; " + "this should not occur in released versions of findutils!"); + warned = 1; + } + + if (0 == strcmp(name, "./mode0file") + || 0 == strcmp(name, "mode0file")) + { + time_t now = time(NULL); + long day = 86400; + + p->st_rdev = 0; + p->st_dev = 0x300; + p->st_ino = 0; + p->st_mode = 0; /* SV bug #16378 */ + p->st_nlink = 1; + p->st_uid = geteuid(); + p->st_gid = 0; + p->st_size = 42; + p->st_blksize = 32768; + p->st_atime = now-1*day; + p->st_mtime = now-2*day; + p->st_ctime = now-3*day; + + return 0; + } + return fstatat(fd, name, p, flags); +} + +# undef fstatat +# define fstatat(fd,name,p,flags) hook_fstatat((fd),(name),(p),(flags)) +#endif + + +static int +fallback_stat(const char *name, struct stat *p, int prev_rv) +{ + /* Our original stat() call failed. Perhaps we can't follow a + * symbolic link. If that might be the problem, lstat() the link. + * Otherwise, admit defeat. + */ + switch (errno) + { + case ENOENT: + case ENOTDIR: + if (options.debug_options & DebugStat) + fprintf(stderr, "fallback_stat(): stat(%s) failed; falling back on lstat()\n", name); + return fstatat(state.cwd_dir_fd, name, p, AT_SYMLINK_NOFOLLOW); + + case EACCES: + case EIO: + case ELOOP: + case ENAMETOOLONG: +#ifdef EOVERFLOW + case EOVERFLOW: /* EOVERFLOW is not #defined on UNICOS. */ +#endif + default: + return prev_rv; + } +} + + +/* optionh_stat() implements the stat operation when the -H option is + * in effect. + * + * If the item to be examined is a command-line argument, we follow + * symbolic links. If the stat() call fails on the command-line item, + * we fall back on the properties of the symbolic link. + * + * If the item to be examined is not a command-line argument, we + * examine the link itself. + */ +int +optionh_stat(const char *name, struct stat *p) +{ + if (AT_FDCWD != state.cwd_dir_fd) + assert (state.cwd_dir_fd >= 0); + set_stat_placeholders(p); + if (0 == state.curdepth) + { + /* This file is from the command line; deference the link (if it + * is a link). + */ + int rv; + rv = fstatat(state.cwd_dir_fd, name, p, 0); + if (0 == rv) + return 0; /* success */ + else + return fallback_stat(name, p, rv); + } + else + { + /* Not a file on the command line; do not dereference the link. + */ + return fstatat(state.cwd_dir_fd, name, p, AT_SYMLINK_NOFOLLOW); + } +} + +/* optionl_stat() implements the stat operation when the -L option is + * in effect. That option makes us examine the thing the symbolic + * link points to, not the symbolic link itself. + */ +int +optionl_stat(const char *name, struct stat *p) +{ + int rv; + if (AT_FDCWD != state.cwd_dir_fd) + assert (state.cwd_dir_fd >= 0); + + set_stat_placeholders(p); + rv = fstatat(state.cwd_dir_fd, name, p, 0); + if (0 == rv) + return 0; /* normal case. */ + else + return fallback_stat(name, p, rv); +} + +/* optionp_stat() implements the stat operation when the -P option is + * in effect (this is also the default). That option makes us examine + * the symbolic link itself, not the thing it points to. + */ +int +optionp_stat(const char *name, struct stat *p) +{ + assert ((state.cwd_dir_fd >= 0) || (state.cwd_dir_fd==AT_FDCWD)); + set_stat_placeholders(p); + return fstatat(state.cwd_dir_fd, name, p, AT_SYMLINK_NOFOLLOW); +} + + +static uintmax_t stat_count = 0u; + +int +debug_stat (const char *file, struct stat *bufp) +{ + ++stat_count; + fprintf (stderr, "debug_stat (%s)\n", file); + + switch (options.symlink_handling) + { + case SYMLINK_ALWAYS_DEREF: + return optionl_stat(file, bufp); + case SYMLINK_DEREF_ARGSONLY: + return optionh_stat(file, bufp); + case SYMLINK_NEVER_DEREF: + return optionp_stat(file, bufp); + } + /*NOTREACHED*/ + assert (0); + return -1; +} + + +int +following_links(void) +{ + switch (options.symlink_handling) + { + case SYMLINK_ALWAYS_DEREF: + return 1; + case SYMLINK_DEREF_ARGSONLY: + return (state.curdepth == 0); + case SYMLINK_NEVER_DEREF: + default: + return 0; + } +} + + +/* Take a "mode" indicator and fill in the files of 'state'. + */ +int +digest_mode(mode_t mode, + const char *pathname, + const char *name, + struct stat *pstat, + boolean leaf) +{ + /* If we know the type of the directory entry, and it is not a + * symbolic link, we may be able to avoid a stat() or lstat() call. + */ + if (mode) + { + if (S_ISLNK(mode) && following_links()) + { + /* mode is wrong because we should have followed the symlink. */ + if (get_statinfo(pathname, name, pstat) != 0) + return 0; + mode = state.type = pstat->st_mode; + state.have_type = true; + } + else + { + state.have_type = true; + pstat->st_mode = state.type = mode; + } + } + else + { + /* Mode is not yet known; may have to stat the file unless we + * can deduce that it is not a directory (which is all we need to + * know at this stage) + */ + if (leaf) + { + state.have_stat = false; + state.have_type = false;; + state.type = 0; + } + else + { + if (get_statinfo(pathname, name, pstat) != 0) + return 0; + + /* If -L is in effect and we are dealing with a symlink, + * st_mode is the mode of the pointed-to file, while mode is + * the mode of the directory entry (S_IFLNK). Hence now + * that we have the stat information, override "mode". + */ + state.type = pstat->st_mode; + state.have_type = true; + } + } + + /* success. */ + return 1; +} + + +/* Return true if there are no predicates with no_default_print in + predicate list PRED, false if there are any. + Returns true if default print should be performed */ + +boolean +default_prints (struct predicate *pred) +{ + while (pred != NULL) + { + if (pred->no_default_print) + return (false); + pred = pred->pred_next; + } + return (true); +} + +boolean +looks_like_expression(const char *arg, boolean leading) +{ + switch (arg[0]) + { + case '-': + if (arg[1]) /* "-foo" is an expression. */ + return true; + else + return false; /* Just "-" is a filename. */ + break; + + case ')': + case ',': + if (arg[1]) + return false; /* )x and ,z are not expressions */ + else + return !leading; /* A leading ) or , is not either */ + + /* ( and ! are part of an expression, but (2 and !foo are + * filenames. + */ + case '!': + case '(': + if (arg[1]) + return false; + else + return true; + + default: + return false; + } +} + +static void +process_debug_options(char *arg) +{ + const char *p; + char *token_context = NULL; + const char delimiters[] = ","; + boolean empty = true; + size_t i; + + p = strtok_r(arg, delimiters, &token_context); + while (p) + { + empty = false; + + for (i=0; i= N_DEBUGASSOC) + { + error(0, 0, _("Ignoring unrecognised debug flag %s"), + quotearg_n_style(0, options.err_quoting_style, arg)); + } + p = strtok_r(NULL, delimiters, &token_context); + } + if (empty) + { + error(1, 0, _("Empty argument to the -D option.")); + } + else if (options.debug_options & DebugHelp) + { + show_valid_debug_options(stdout, 1); + exit(0); + } +} + +static void +process_optimisation_option(const char *arg) +{ + if (0 == arg[0]) + { + error(1, 0, _("The -O option must be immediately followed by a decimal integer")); + } + else + { + unsigned long opt_level; + char *end; + + if (!isdigit( (unsigned char) arg[0] )) + { + error(1, 0, _("Please specify a decimal number immediately after -O")); + } + else + { + int prev_errno = errno; + errno = 0; + + opt_level = strtoul(arg, &end, 10); + if ( (0==opt_level) && (end==arg) ) + { + error(1, 0, _("Please specify a decimal number immediately after -O")); + } + else if (*end) + { + /* unwanted trailing characters. */ + error(1, 0, _("Invalid optimisation level %s"), arg); + } + else if ( (ULONG_MAX==opt_level) && errno) + { + error(1, errno, _("Invalid optimisation level %s"), arg); + } + else if (opt_level > USHRT_MAX) + { + /* tricky to test, as on some platforms USHORT_MAX and ULONG_MAX + * can have the same value, though this is unusual. + */ + error(1, 0, _("Optimisation level %lu is too high. " + "If you want to find files very quickly, " + "consider using GNU locate."), + opt_level); + } + else + { + options.optimisation_level = opt_level; + errno = prev_errno; + } + } + } +} + +int +process_leading_options(int argc, char *argv[]) +{ + int i, end_of_leading_options; + + for (i=1; (end_of_leading_options = i) < argc; ++i) + { + if (0 == strcmp("-H", argv[i])) + { + /* Meaning: dereference symbolic links on command line, but nowhere else. */ + set_follow_state(SYMLINK_DEREF_ARGSONLY); + } + else if (0 == strcmp("-L", argv[i])) + { + /* Meaning: dereference all symbolic links. */ + set_follow_state(SYMLINK_ALWAYS_DEREF); + } + else if (0 == strcmp("-P", argv[i])) + { + /* Meaning: never dereference symbolic links (default). */ + set_follow_state(SYMLINK_NEVER_DEREF); + } + else if (0 == strcmp("--", argv[i])) + { + /* -- signifies the end of options. */ + end_of_leading_options = i+1; /* Next time start with the next option */ + break; + } + else if (0 == strcmp("-D", argv[i])) + { + process_debug_options(argv[i+1]); + ++i; /* skip the argument too. */ + } + else if (0 == strncmp("-O", argv[i], 2)) + { + process_optimisation_option(argv[i]+2); + } + else + { + /* Hmm, must be one of + * (a) A path name + * (b) A predicate + */ + end_of_leading_options = i; /* Next time start with this option */ + break; + } + } + return end_of_leading_options; +} + +static struct timespec +now(void) +{ + struct timespec retval; + struct timeval tv; + time_t t; + + if (0 == gettimeofday(&tv, NULL)) + { + retval.tv_sec = tv.tv_sec; + retval.tv_nsec = tv.tv_usec * 1000; /* convert unit from microseconds to nanoseconds */ + return retval; + } + t = time(NULL); + assert (t != (time_t)-1); + retval.tv_sec = t; + retval.tv_nsec = 0; + return retval; +} + +void +set_option_defaults(struct options *p) +{ + if (getenv("POSIXLY_CORRECT")) + p->posixly_correct = true; + else + p->posixly_correct = false; + + /* We call check_nofollow() before setlocale() because the numbers + * for which we check (in the results of uname) definitiely have "." + * as the decimal point indicator even under locales for which that + * is not normally true. Hence atof() would do the wrong thing + * if we call it after setlocale(). + */ +#ifdef O_NOFOLLOW + p->open_nofollow_available = check_nofollow(); +#else + p->open_nofollow_available = false; +#endif + + p->regex_options = RE_SYNTAX_EMACS; + + if (isatty(0)) + { + p->warnings = true; + p->literal_control_chars = false; + } + else + { + p->warnings = false; + p->literal_control_chars = false; /* may change */ + } + if (p->posixly_correct) + { + p->warnings = false; + } + + p->do_dir_first = true; + p->maxdepth = p->mindepth = -1; + p->start_time = now(); + p->cur_day_start = p->start_time.tv_sec - DAYSECS; + p->full_days = false; + p->stay_on_filesystem = false; + p->ignore_readdir_race = false; + + if (p->posixly_correct) + p->output_block_size = 512; + else + p->output_block_size = 1024; + + p->debug_options = 0uL; + p->optimisation_level = 0; + + if (getenv("FIND_BLOCK_SIZE")) + { + error (1, 0, _("The environment variable FIND_BLOCK_SIZE is not supported, the only thing that affects the block size is the POSIXLY_CORRECT environment variable")); + } + +#if LEAF_OPTIMISATION + /* The leaf optimisation is enabled. */ + p->no_leaf_check = false; +#else + /* The leaf optimisation is disabled. */ + p->no_leaf_check = true; +#endif + + set_follow_state(SYMLINK_NEVER_DEREF); /* The default is equivalent to -P. */ + + p->err_quoting_style = locale_quoting_style; +} + + +/* get_start_dirfd + * + * Returns the fd for the directory we started in. + */ +int get_start_dirfd(void) +{ + return starting_desc; +} + +/* apply_predicate + * + */ +boolean +apply_predicate(const char *pathname, struct stat *stat_buf, struct predicate *p) +{ + ++p->perf.visits; + + if (p->need_stat || p->need_type) + { + /* We may need a stat here. */ + if (get_info(pathname, stat_buf, p) != 0) + return false; + } + if ((p->pred_func)(pathname, stat_buf, p)) + { + ++(p->perf.successes); + return true; + } + else + { + return false; + } +} + + +/* safely_quote_err_filename + * + */ +const char * +safely_quote_err_filename (int n, char const *arg) +{ + return quotearg_n_style (n, options.err_quoting_style, arg); +} + +/* report_file_err + */ +static void +report_file_err(int exitval, int errno_value, const char *name) +{ + /* It is important that the errno value is passed in as a function + * argument before we call safely_quote_err_filename(), because otherwise + * we might find that safely_quote_err_filename() changes errno. + */ + if (state.exit_status < 1) + state.exit_status = 1; + + error (exitval, errno_value, "%s", safely_quote_err_filename(0, name)); +} + +/* fatal_file_error + * + */ +void +fatal_file_error(const char *name) +{ + report_file_err(1, errno, name); + /*NOTREACHED*/ + abort(); +} + +void +nonfatal_file_error(const char *name) +{ + report_file_err(0, errno, name); +} + diff --git a/import-gnulib.config b/import-gnulib.config new file mode 100644 index 0000000..30039dd --- /dev/null +++ b/import-gnulib.config @@ -0,0 +1,92 @@ +# findutils gnulib.config -*- sh -*- + +# What version of gnulib to use? +gnulib_version="2007-11-10" + +destdir="gnulib" + +# Random extra gnulib files needed for findutils. +extra_files=' +build-aux/config.guess +build-aux/config.sub +build-aux/depcomp +build-aux/install-sh +build-aux/mdate-sh +build-aux/mkinstalldirs +build-aux/missing +build-aux/texinfo.tex +' + +gpl3_update_files=' +build-aux/mdate-sh +build-aux/texinfo.tex +build-aux/ylwrap +' + + +# Modules needed for findutils. +# We need regex to ensure that we can build on platforms like +# Solaris which lack those functions. +modules=' +alloca +argmatch +assert +c-strstr +canonicalize +closein +closeout +dirname +error +fchdir +fcntl +fileblocks +filemode +fnmatch-gnu +fopen-safer +fts +getdate +getline +getopt +gettext +human +idcache +inline +lstat +malloc +mbscasestr +mbsstr +memcmp +memset +mktime +modechange +mountlist +pathmax +quotearg +realloc +regex +rpmatch +savedir +stat-macros +stat-time +stpcpy +strcasestr +strdup +strftime +strtol +strtoul +strtoull +strtoumax +sys_stat +timespec +verify +version-etc +version-etc-fsf +wcwidth +xalloc +xalloc-die +xgetcwd +xstrtod +xstrtol +xstrtoumax +yesno +' diff --git a/import-gnulib.sh b/import-gnulib.sh new file mode 100755 index 0000000..9d9f965 --- /dev/null +++ b/import-gnulib.sh @@ -0,0 +1,311 @@ +#! /bin/sh +# +# import-gnulib.sh -- imports a copy of gnulib into findutils +# Copyright (C) 2003,2004,2005,2006,2007 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +########################################################################## +# +# This script is intended to populate the "gnulib" directory +# with a subset of the gnulib code, as provided by "gnulib-tool". +# +# To use it, just run this script with the top-level sourec directory +# as your working directory. + +# If CDPATH is set, it will sometimes print the name of the directory +# to which you have moved. Unsetting CDPATH prevents this, as does +# prefixing it with ".". +unset CDPATH + +## Defaults +# cvsdir=/doesnotexist +configfile="./import-gnulib.config" +need_checkout=yes + + +# Remember arguments for comments we inject into output files +original_cmd_line_args="$@" + +usage() { + cat >&2 <&2 + exit 1 + fi + + + if ! [ -d "$cvsdir" ] ; then + if mkdir "$cvsdir" ; then + echo "Created $cvsdir" + else + echo "Failed to create $cvsdir" >&2 + exit 1 + fi + fi + + # Decide if gnulib_version is probably a date or probably a tag. + if date -d yesterday >/dev/null ; then + # It looks like GNU date is available + if date -d "$gnulib_version" >/dev/null ; then + # Looks like a date. + cvs_sticky_option="-D" + else + echo "Warning: assuming $gnulib_version is a CVS tag rather than a date" >&2 + cvs_sticky_option="-r" + fi + else + # GNU date unavailable, assume the version is a date + cvs_sticky_option="-D" + fi + + + + ( + # Change directory unconditionally (rater than using checkout + # -d) so that cvs does not pick up defaults from ./CVS. Those + # defaults refer to our own CVS repository for our code, not + # to gnulib. + cd $cvsdir + + # gnulib now uses git as master repository, but used to use + # CVS. Check that we are not running against an old working + # directory which is still pointing at the old CVS repository. + rootfile=gnulib/CVS/Root + cvs_git_root=":pserver:anonymous@pserver.git.sv.gnu.org:/gnulib.git" + + if test -d gnulib/CVS + then + if test x"$(cat $rootfile)" == x"$cvs_git_root"; then + echo "Using the git repository via git-cvs-pserver..." + else + echo "WARNING: Migrating from old CVS repository" >&2 + # Force use of "cvs checkout" as opposed to update. + mv gnulib gnulib.before-git-migration + fi + fi + + if test -d gnulib/CVS ; then + cd gnulib + cmd=update + root="" # use previous + args= + else + cmd=checkout + root="-d $cvs_git_root" + args="-d gnulib HEAD" + fi + set -x + cvs -q $root $cmd $cvs_sticky_option "$gnulib_version" $args + set +x + ) +} + +run_gnulib_tool() { + local tool="$1" + if test -f "$tool" + then + true + else + echo "$tool does not exist, did you specify the right directory?" >&2 + exit 1 + fi + + if test -x "$tool" + then + true + else + echo "$tool is not executable" >&2 + exit 1 + fi + + + if [ -d gnulib ] + then + echo "Warning: directory gnulib already exists." >&2 + else + mkdir gnulib + fi + + set -x + if "$tool" --import --symlink --with-tests --dir=. --lib=libgnulib --source-base=gnulib/lib --m4-base=gnulib/m4 $modules + then + set +x + else + set +x + echo "$tool failed, exiting." >&2 + exit 1 + fi + + # gnulib-tool does not remove broken symlinks leftover from previous runs; + # this assumes GNU find, but should be a safe no-op if it is not + find -L gnulib -lname '*' -delete 2>/dev/null || : +} + +rehack() { + echo "Updating the license of $1" + # Use cp to get the permissions right first + cp -fp "$1" "$1".new + sed -e \ +'s/Free Software Foundation\([;,]\) either version [2]/Free Software Foundation\1 either version 3/' < "$1" > "$1".new + if cmp "$1" "$1".new >/dev/null + then + rm -f "$1".new + else + rm -f "$1" && mv "$1".new "$1" + fi +} + + + +copyhack() { + src="$1" + dst="$2" + shift 2 + if test -d "$dst" + then + dst="$dst"/"$(basename $src)" + fi + cp -fp "$src" "$dst" && rehack "$dst" + +} + + +update_licenses() { + for f in $gpl3_update_files + do + rehack "$f" || exit + done +} + + + +hack_gnulib_tool_output() { + local gnulibdir="${1}" + for file in $extra_files; do + case $file in + */mdate-sh | */texinfo.tex) dest=doc;; + *) dest=build-aux;; + esac + copyhack "${gnulibdir}"/"$file" "$dest" || exit + done + + + + + cat > gnulib/Makefile.am < "${outfile}".new < /dev/null ; then + rm "${outfile}".new + return 0 + fi + fi + mv "${outfile}".new "${outfile}" +} + + +main() { + ## Option parsing + local gnulibdir=/doesnotexist + while getopts "d:a" opt + do + case "$opt" in + d) gnulibdir="$OPTARG" ; need_checkout=no ;; + a) refresh_output_files && update_licenses ; exit $? ;; + **) usage; exit 1;; + esac + done + + # We need the config file to tell us which modules + # to use, even if we don't want to know the CVS version. + . $configfile || exit 1 + + ## If -d was not given, do CVS checkout/update + if [ $need_checkout = yes ] ; then + do_checkout gnulib-cvs + gnulibdir=gnulib-cvs/gnulib + else + echo "Warning: using gnulib code which already exists in $gnulibdir" >&2 + fi + + ## Invoke gnulib-tool to import the code. + local tool="${gnulibdir}"/gnulib-tool + + if run_gnulib_tool "${tool}" && + hack_gnulib_tool_output "${gnulibdir}" && + refresh_output_files && + update_licenses && + update_version_file ; then + echo Done. + else + echo FAILED >&2 + exit 1 + fi +} + +main "$@" diff --git a/lib/.cvsignore b/lib/.cvsignore new file mode 100644 index 0000000..b9df9d0 --- /dev/null +++ b/lib/.cvsignore @@ -0,0 +1,5 @@ +.deps +Makefile +Makefile.in +regexprops +gnulib-version.c diff --git a/lib/.gitignore b/lib/.gitignore new file mode 100644 index 0000000..b9df9d0 --- /dev/null +++ b/lib/.gitignore @@ -0,0 +1,5 @@ +.deps +Makefile +Makefile.in +regexprops +gnulib-version.c diff --git a/lib/Makefile.am b/lib/Makefile.am new file mode 100644 index 0000000..56b8b49 --- /dev/null +++ b/lib/Makefile.am @@ -0,0 +1,44 @@ +## Process this file with automake to produce Makefile.in. + +AUTOMAKE_OPTIONS = 1.5 gnits +# no-dependencies + +noinst_LIBRARIES = libfind.a + +if CROSS_COMPILING +# The regexprops program needs to be a native executable, so we +# can't build it with a cross-compiler. +else +noinst_PROGRAMS = regexprops +regexprops_SOURCES = regexprops.c regextype.c +endif + +libfind_a_SOURCES = gnulib-version.c findutils-version.c +EXTRA_DIST = modetype.h wait.h extendbuf.h savedirinfo.h buildcmd.h \ + gnulib-version.h gnulib-version.c findutils-version.h +BUILT_SOURCES = gnulib-version.c +SUFFIXES = +MOSTLYCLEANFILES = +CLEANFILES = +DISTCLEANFILES = +MAINTAINERCLEANFILES = + + +INCLUDES = -I../gnulib/lib -I$(top_srcdir)/gnulib/lib +LDADD = ../gnulib/lib/libgnulib.a @INTLLIBS@ + +libfind_a_SOURCES += modetype.h nextelem.h printquoted.h listfile.h \ + regextype.h dircallback.h +libfind_a_SOURCES += listfile.c nextelem.c extendbuf.c buildcmd.c savedirinfo.c \ + forcefindlib.c qmark.c printquoted.c regextype.c dircallback.c + +EXTRA_DIST += waitpid.c forcefindlib.c + + +libfind_a_LIBADD = @FINDLIBOBJS@ +libfind_a_DEPENDENCIES = @FINDLIBOBJS@ +# libfind_la_LIBADD = @LTFINDLIBOBJS@ + +# libfind_a_OBJECTS += @FINDLIBOBJS@ +# libfind_la_OBJECTS += @LTFINDLIBOBJS@ + diff --git a/lib/buildcmd.c b/lib/buildcmd.c new file mode 100644 index 0000000..bda2492 --- /dev/null +++ b/lib/buildcmd.c @@ -0,0 +1,553 @@ +/* buildcmd.c -- build command lines from a list of arguments. + Copyright (C) 1990, 91, 92, 93, 94, 2000, 2003, 2005, 2006, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* + XXX_SOC: + + One of the aspects of the SOC project is to adapt this module. + This module currently makes an initial guess at two things: + + buildcmd_control->arg_max (The most characters we can fit in) + buildcmd_control->max_arg_count (most args) + + The nature of the SOC task is to adjust these values when exec fails. + Optionally (if we have the time) we can make the software adjust them + when exec succeeds. If we do the latter, we need to ensure we don't + get into some state where we are sitting just below the limit and + keep trying to extend, because that would lead to every other exec + failing. + + If our initial guess is successful, there is no pressing need really to + increase our guess. Indeed, if we are beign called by xargs (as opposed + to find) th user may have specified a limit with "-s" and we should not + exceed it. +*/ + + +#include + +# ifndef PARAMS +# if defined PROTOTYPES || (defined __STDC__ && __STDC__) +# define PARAMS(Args) Args +# else +# define PARAMS(Args) () +# endif +# endif + +#include + + +#if DO_MULTIBYTE +# if HAVE_MBRLEN +# include +# else + /* Simulate mbrlen with mblen as best we can. */ +# define mbstate_t int +# define mbrlen(s, n, ps) mblen (s, n) +# endif +#endif + +#ifdef HAVE_LOCALE_H +#include +#endif +#if ENABLE_NLS +# include +# define _(Text) gettext (Text) +#else +# define _(Text) Text +#define textdomain(Domain) +#define bindtextdomain(Package, Directory) +#endif +#ifdef gettext_noop +# define N_(String) gettext_noop (String) +#else +/* See locate.c for explanation as to why not use (String) */ +# define N_(String) String +#endif + +#ifndef _POSIX_SOURCE +#include +#endif + +#ifdef HAVE_LIMITS_H +#include +#endif + +/* The presence of unistd.h is assumed by gnulib these days, so we + * might as well assume it too. + */ +/* for sysconf() */ +#include + +#include + +/* COMPAT: SYSV version defaults size (and has a max value of) to 470. + We try to make it as large as possible. See bc_get_arg_max() below. */ +#if !defined(ARG_MAX) && defined(NCARGS) +#error "You have an unusual system. Once you remove this error message from buildcmd.c, it should work, but please make sure that DejaGnu is installed on your system and that 'make check' passes before using the findutils programs" +#define ARG_MAX NCARGS +#endif + + + +#include +#include +#include + +#include "buildcmd.h" + + +extern char **environ; + + +/* Replace all instances of `replace_pat' in ARG with `linebuf', + and add the resulting string to the list of arguments for the command + to execute. + ARGLEN is the length of ARG, not including the null. + LBLEN is the length of LINEBUF, not including the null. + PFXLEN is the length of PREFIX. Substitution is not performed on + the prefix. The prefix is used if the argument contains replace_pat. + + COMPAT: insertions on the SYSV version are limited to 255 chars per line, + and a max of 5 occurrences of replace_pat in the initial-arguments. + Those restrictions do not exist here. */ + +void +bc_do_insert (const struct buildcmd_control *ctl, + struct buildcmd_state *state, + char *arg, size_t arglen, + const char *prefix, size_t pfxlen, + const char *linebuf, size_t lblen, + int initial_args) +{ + /* Temporary copy of each arg with the replace pattern replaced by the + real arg. */ + static char *insertbuf; + char *p; + size_t bytes_left = ctl->arg_max - 1; /* Bytes left on the command line. */ + + /* XXX: on systems lacking an upper limit for exec args, ctl->arg_max + * may have been set to LONG_MAX (see bc_get_arg_max()). Hence + * this xmalloc call may be a bad idea, especially since we are + * adding 1 to it... + */ + if (!insertbuf) + insertbuf = xmalloc (ctl->arg_max + 1); + p = insertbuf; + + do + { + size_t len; /* Length in ARG before `replace_pat'. */ + char *s = mbsstr (arg, ctl->replace_pat); + if (s) + { + len = s - arg; + } + else + { + len = arglen; + } + + if (bytes_left <= len) + break; + else + bytes_left -= len; + + strncpy (p, arg, len); + p += len; + arg += len; + arglen -= len; + + if (s) + { + if (bytes_left <= (lblen + pfxlen)) + break; + else + bytes_left -= (lblen + pfxlen); + + if (prefix) + { + strcpy (p, prefix); + p += pfxlen; + } + strcpy (p, linebuf); + p += lblen; + + arg += ctl->rplen; + arglen -= ctl->rplen; + } + } + while (*arg); + if (*arg) + error (1, 0, _("command too long")); + *p++ = '\0'; + + bc_push_arg (ctl, state, + insertbuf, p - insertbuf, + NULL, 0, + initial_args); +} + +static +void do_exec(const struct buildcmd_control *ctl, + struct buildcmd_state *state) +{ + /* XXX_SOC: + + Here we are calling the user's function. Currently there is no + way for it to report that the argument list was too long. We + should introduce an externally callable function that allows them + to report this. + + If the callee does report that the exec failed, we need to retry + the exec with a shorter argument list. Once we have reduced the + argument list to the point where the exec can succeed, we need to + preserve the list of arguments we couldn't exec this time. + + This also means that the control argument here probably needs not + to be const (since the limits are in the control arg). + + The caller's only requirement on do_exec is that it should + free up enough room for at least one argument. + */ + (ctl->exec_callback)(ctl, state); +} + + +/* Return nonzero if there would not be enough room for an additional + * argument. We check the total number of arguments only, not the space + * occupied by those arguments. + * + * If we return zero, there still may not be enough room for the next + * argument, depending on its length. + */ +static int +bc_argc_limit_reached(int initial_args, + const struct buildcmd_control *ctl, + struct buildcmd_state *state) +{ + /* Check to see if we about to exceed a limit set by xargs' -n option */ + if (!initial_args && ctl->args_per_exec && + ( (state->cmd_argc - ctl->initial_argc) == ctl->args_per_exec)) + return 1; + + /* We deliberately use an equality test here rather than >= in order + * to force a software failure if the code is modified in such a way + * that it fails to call this function for every new argument. + */ + return state->cmd_argc == ctl->max_arg_count; +} + + +/* Add ARG to the end of the list of arguments `cmd_argv' to pass + to the command. + LEN is the length of ARG, including the terminating null. + If this brings the list up to its maximum size, execute the command. +*/ +/* XXX: sometimes this function is called (internally) + * just to push a NULL onto the and of the arg list. + * We should probably do that with a separate function + * for greater clarity. + */ +void +bc_push_arg (const struct buildcmd_control *ctl, + struct buildcmd_state *state, + const char *arg, size_t len, + const char *prefix, size_t pfxlen, + int initial_args) +{ + if (!initial_args) + { + state->todo = 1; + } + + if (arg) + { + /* XXX_SOC: if do_exec() is only guaranteeed to free up one + * argument, this if statement may need to become a while loop. + * If it becomes a while loop, it needs not to be an infinite + * loop... + */ + if (state->cmd_argv_chars + len > ctl->arg_max) + { + if (initial_args || state->cmd_argc == ctl->initial_argc) + error (1, 0, _("can not fit single argument within argument list size limit")); + /* xargs option -i (replace_pat) implies -x (exit_if_size_exceeded) */ + if (ctl->replace_pat + || (ctl->exit_if_size_exceeded && + (ctl->lines_per_exec || ctl->args_per_exec))) + error (1, 0, _("argument list too long")); + do_exec (ctl, state); + } + /* XXX_SOC: this if may also need to become a while loop. In + fact perhaps it is best to factor this out into a separate + function which ceeps calling the exec handler until there is + space for our next argument. Each exec will free one argc + "slot" so the main thing to worry about repeated exec calls + for would be total argument length. + */ + if (bc_argc_limit_reached(initial_args, ctl, state)) + do_exec (ctl, state); + } + + if (state->cmd_argc >= state->cmd_argv_alloc) + { + /* XXX: we could use extendbuf() here. */ + if (!state->cmd_argv) + { + state->cmd_argv_alloc = 64; + state->cmd_argv = xmalloc (sizeof (char *) * state->cmd_argv_alloc); + } + else + { + state->cmd_argv_alloc *= 2; + state->cmd_argv = xrealloc (state->cmd_argv, + sizeof (char *) * state->cmd_argv_alloc); + } + } + + if (!arg) + state->cmd_argv[state->cmd_argc++] = NULL; + else + { + state->cmd_argv[state->cmd_argc++] = state->argbuf + state->cmd_argv_chars; + if (prefix) + { + strcpy (state->argbuf + state->cmd_argv_chars, prefix); + state->cmd_argv_chars += pfxlen; + } + + strcpy (state->argbuf + state->cmd_argv_chars, arg); + state->cmd_argv_chars += len; + + /* If we have now collected enough arguments, + * do the exec immediately. This must be + * conditional on arg!=NULL, since do_exec() + * actually calls bc_push_arg(ctl, state, NULL, 0, false). + */ + if (bc_argc_limit_reached(initial_args, ctl, state)) + do_exec (ctl, state); + } + + /* If this is an initial argument, set the high-water mark. */ + if (initial_args) + { + state->cmd_initial_argv_chars = state->cmd_argv_chars; + } +} + +#if 0 +/* We used to set posix_arg_size_min to the LINE_MAX limit, but + * currently we use _POSIX_ARG_MAX (which is the minimum value). + */ +static size_t +get_line_max(void) +{ + long val; +#ifdef _SC_LINE_MAX + val = sysconf(_SC_LINE_MAX); +#else + val = -1; +#endif + + if (val > 0) + return val; + + /* either _SC_LINE_MAX was not available or + * there is no particular limit. + */ +#ifdef LINE_MAX + val = LINE_MAX; +#endif + + if (val > 0) + return val; + + return 2048L; /* a reasonable guess. */ +} +#endif + +size_t +bc_get_arg_max(void) +{ + long val; + + /* We may resort to using LONG_MAX, so check it fits. */ + /* XXX: better to do a compile-time check */ + assert ( (~(size_t)0) >= LONG_MAX); + +#ifdef _SC_ARG_MAX + val = sysconf(_SC_ARG_MAX); +#else + val = -1; +#endif + + if (val > 0) + return val; + + /* either _SC_ARG_MAX was not available or + * there is no particular limit. + */ +#ifdef ARG_MAX + val = ARG_MAX; +#endif + + if (val > 0) + return val; + + /* The value returned by this function bounds the + * value applied as the ceiling for the -s option. + * Hence it the system won't tell us what its limit + * is, we allow the user to specify more or less + * whatever value they like. + */ + return LONG_MAX; +} + + +static int cb_exec_noop(const struct buildcmd_control *ctl, + struct buildcmd_state *state) +{ + /* does nothing. */ + (void) ctl; + (void) state; + + return 0; +} + + +/* Return how much of ARG_MAX is used by the environment. */ +size_t +bc_size_of_environment (void) +{ + size_t len = 0u; + char **envp = environ; + + while (*envp) + len += strlen (*envp++) + 1; + + return len; +} + + +enum BC_INIT_STATUS +bc_init_controlinfo(struct buildcmd_control *ctl, + size_t headroom) +{ + size_t size_of_environment = bc_size_of_environment(); + + /* POSIX requires that _POSIX_ARG_MAX is 4096. That is the lowest + * possible value for ARG_MAX on a POSIX compliant system. See + * http://www.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html + */ + ctl->posix_arg_size_min = _POSIX_ARG_MAX; + ctl->posix_arg_size_max = bc_get_arg_max(); + + ctl->exit_if_size_exceeded = 0; + + /* Take the size of the environment into account. */ + if (size_of_environment > ctl->posix_arg_size_max) + { + return BC_INIT_ENV_TOO_BIG; + } + else if ((headroom + size_of_environment) >= ctl->posix_arg_size_max) + { + /* POSIX.2 requires xargs to subtract 2048, but ARG_MAX is + * guaranteed to be at least 4096. Although xargs could use an + * assertion here, we use a runtime check which returns an error + * code, because our caller may not be xargs. + */ + return BC_INIT_CANNOT_ACCOMODATE_HEADROOM; + } + else + { + ctl->posix_arg_size_max -= size_of_environment; + ctl->posix_arg_size_max -= headroom; + } + + /* need to subtract 2 on the following line - for Linux/PPC */ + ctl->max_arg_count = (ctl->posix_arg_size_max / sizeof(char*)) - 2u; + assert (ctl->max_arg_count > 0); + ctl->rplen = 0u; + ctl->replace_pat = NULL; + ctl->initial_argc = 0; + ctl->exec_callback = cb_exec_noop; + ctl->lines_per_exec = 0; + ctl->args_per_exec = 0; + + /* Set the initial value of arg_max to the largest value we can + * tolerate. + */ + ctl->arg_max = ctl->posix_arg_size_max; + + return BC_INIT_OK; +} + +void +bc_use_sensible_arg_max(struct buildcmd_control *ctl) +{ +#ifdef DEFAULT_ARG_SIZE + enum { arg_size = DEFAULT_ARG_SIZE }; +#else + enum { arg_size = (128u * 1024u) }; +#endif + + /* Check against the upper and lower limits. */ + if (arg_size > ctl->posix_arg_size_max) + ctl->arg_max = ctl->posix_arg_size_max; + else if (arg_size < ctl->posix_arg_size_min) + ctl->arg_max = ctl->posix_arg_size_min; + else + ctl->arg_max = arg_size; +} + + + + +void +bc_init_state(const struct buildcmd_control *ctl, + struct buildcmd_state *state, + void *context) +{ + state->cmd_argc = 0; + state->cmd_argv_chars = 0; + state->cmd_argv = NULL; + state->cmd_argv_alloc = 0; + + /* XXX: the following memory allocation is inadvisable on systems + * with no ARG_MAX, because ctl->arg_max may actually be close to + * LONG_MAX. Adding one to it is safe though because earlier we + * subtracted 2048. + */ + assert (ctl->arg_max <= (LONG_MAX - 2048L)); + state->argbuf = xmalloc (ctl->arg_max + 1u); + + state->cmd_argv_chars = state->cmd_initial_argv_chars = 0; + state->todo = 0; + state->dirfd = -1; + state->usercontext = context; +} + +void +bc_clear_args(const struct buildcmd_control *ctl, + struct buildcmd_state *state) +{ + state->cmd_argc = ctl->initial_argc; + state->cmd_argv_chars = state->cmd_initial_argv_chars; + state->todo = 0; + state->dirfd = -1; +} diff --git a/lib/buildcmd.h b/lib/buildcmd.h new file mode 100644 index 0000000..cbd3f84 --- /dev/null +++ b/lib/buildcmd.h @@ -0,0 +1,134 @@ +/* buildcmd.[ch] -- build command lines from a stream of arguments + Copyright (C) 2005 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/* + * Written by James Youngman. + */ +#ifndef INC_BUILDCMD_H +#define INC_BUILDCMD_H 1 + +struct buildcmd_state +{ + /* Number of valid elements in `cmd_argv'. */ + int cmd_argc; /* 0 */ + + /* The list of args being built. */ + char **cmd_argv; /* NULL */ + + /* Number of elements allocated for `cmd_argv'. */ + int cmd_argv_alloc; + + /* Storage for elements of `cmd_argv'. */ + char *argbuf; + + /* Number of chars being used in `cmd_argv'. */ + size_t cmd_argv_chars; + + /* Number of chars being used in `cmd_argv' for the initial args.. */ + size_t cmd_initial_argv_chars; + + /* User context information. */ + void *usercontext; + + /* to-do flag. */ + int todo; + + /* Directory in which to perform the exec. */ + int dirfd; +}; + +struct buildcmd_control +{ + /* If true, exit if lines_per_exec or args_per_exec is exceeded. */ + int exit_if_size_exceeded; /* false */ + + /* POSIX limits on the argument length. */ + size_t posix_arg_size_max; + size_t posix_arg_size_min; + + /* The maximum number of characters that can be used per command line. */ + size_t arg_max; + + /* max_arg_count: the maximum number of arguments that can be used. + * + * Many systems include the size of the pointers in ARG_MAX. + * Linux on PPC fails if we just subtract 1 here. + * + * However, not all systems define ARG_MAX. Our bc_get_arg_max() + * function returns a useful value even if ARG_MAX is not defined. + * However, sometimes, max_arg_count is LONG_MAX! + */ + long max_arg_count; + + + /* The length of `replace_pat'. */ + size_t rplen; + + /* If nonzero, then instead of putting the args from stdin at + the end of the command argument list, they are each stuck into the + initial args, replacing each occurrence of the `replace_pat' in the + initial args. */ + char *replace_pat; + + /* Number of initial arguments given on the command line. */ + int initial_argc; /* 0 */ + + /* exec callback. */ + int (*exec_callback)(const struct buildcmd_control *, struct buildcmd_state *); + + /* If nonzero, the maximum number of nonblank lines from stdin to use + per command line. */ + long lines_per_exec; /* 0 */ + + /* The maximum number of arguments to use per command line. */ + long args_per_exec; +}; + +enum BC_INIT_STATUS + { + BC_INIT_OK = 0, + BC_INIT_ENV_TOO_BIG, + BC_INIT_CANNOT_ACCOMODATE_HEADROOM + }; + +extern size_t bc_size_of_environment (void); + + +extern void bc_do_insert (const struct buildcmd_control *ctl, + struct buildcmd_state *state, + char *arg, size_t arglen, + const char *prefix, size_t pfxlen, + const char *linebuf, size_t lblen, + int initial_args); + +extern void bc_push_arg (const struct buildcmd_control *ctl, + struct buildcmd_state *state, + const char *arg, size_t len, + const char *prefix, size_t pfxlen, + int initial_args); + +extern void bc_init_state(const struct buildcmd_control *ctl, + struct buildcmd_state *state, + void *usercontext); +extern enum BC_INIT_STATUS bc_init_controlinfo(struct buildcmd_control *ctl, + size_t arglen_headroom); +extern size_t bc_get_arg_max(void); +extern void bc_use_sensible_arg_max(struct buildcmd_control *ctl); +extern void bc_clear_args(const struct buildcmd_control *ctl, + struct buildcmd_state *state); + + +#endif diff --git a/lib/dircallback.c b/lib/dircallback.c new file mode 100644 index 0000000..b551c02 --- /dev/null +++ b/lib/dircallback.c @@ -0,0 +1,97 @@ +/* listfile.c -- run a function in a specific directory + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* This file was written by James Youngman, based on gnulib'c at-func.c. + */ + + +#include + + +#include "openat.h" +#include +#include +#include + +#include "fcntl--.h" +#include "lstat.h" +#include "save-cwd.h" + + +/* The presence of unistd.h is assumed by gnulib these days, so we + * might as well assume it too. + */ +#include /* for readlink() */ + +#ifdef HAVE_LOCALE_H +#include +#endif + +#if ENABLE_NLS +# include +# define _(Text) gettext (Text) +#else +# define _(Text) Text +#define textdomain(Domain) +#define bindtextdomain(Package, Directory) +#endif +#ifdef gettext_noop +# define N_(String) gettext_noop (String) +#else +/* See locate.c for explanation as to why not use (String) */ +# define N_(String) String +#endif + + + +int +run_in_dir (int dirfd, int (*callback)(void*), void *usercontext) +{ + if (dirfd == AT_FDCWD) + { + return (*callback)(usercontext); + } + else + { + struct saved_cwd saved_cwd; + int saved_errno; + int err; + + if (save_cwd (&saved_cwd) != 0) + openat_save_fail (errno); + + if (fchdir (dirfd) != 0) + { + saved_errno = errno; + free_cwd (&saved_cwd); + errno = saved_errno; + return -1; + } + + err = (*callback)(usercontext); + saved_errno = (err < 0 ? errno : 0); + + if (restore_cwd (&saved_cwd) != 0) + openat_restore_fail (errno); + + free_cwd (&saved_cwd); + + if (saved_errno) + errno = saved_errno; + return err; + } +} diff --git a/lib/dircallback.h b/lib/dircallback.h new file mode 100644 index 0000000..abce104 --- /dev/null +++ b/lib/dircallback.h @@ -0,0 +1,24 @@ +/* listfile.h -- display a long listing of a file + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + + +#if !defined DIRCALLBACK_H +# define DIRCALLBACK_H + +int run_in_dir (int dirfd, int (*callback)(void*), void *usercontext); + +#endif diff --git a/lib/extendbuf.c b/lib/extendbuf.c new file mode 100644 index 0000000..8b7edaf --- /dev/null +++ b/lib/extendbuf.c @@ -0,0 +1,103 @@ +/* extendbuf.c -- manage a dynamically-allocated buffer + + Copyright 2004 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/* Written by James Yougnman . */ + +#include + + +#include +#include +#include +#include + +#include "xalloc.h" +#include "extendbuf.h" + + +/* We initially use a small default size to ensure that this code + * gets exercised. + */ +#ifndef SIZE_DEFAULT +# define SIZE_DEFAULT 16 +#endif + +static size_t +decide_size(size_t current, size_t wanted) +{ + size_t newsize; + + if (0 == current) + newsize = SIZE_DEFAULT; + else + newsize = current; + + while (newsize < wanted) + { + if (2 * newsize < newsize) + xalloc_die (); + newsize *= 2; + } + return newsize; +} + + +void * +extendbuf(void* existing, size_t wanted, size_t *allocated) +{ + int saved_errno; + size_t newsize; + void *result; /* leave uninitialised to allow static code checkers to identify bugs */ + + saved_errno = errno; + + assert (wanted > 0u); + newsize = decide_size(*allocated, wanted); + + if ( (*allocated) == 0 ) + { + /* Sanity check: If there is no existing allocation size, there + * must be no existing allocated buffer. + */ + assert (NULL == existing); + + (*allocated) = newsize; + result = xmalloc(newsize); + } + else + { + if (newsize != (*allocated) ) + { + (*allocated) = newsize; + result = xrealloc (existing, newsize); + + } + else + { + result = existing; + } + } + + if (result) + { + /* xmalloc() or xrealloc() may have changed errno, but in the + success case we want to preserve the previous value. + */ + errno = saved_errno; + } + return result; +} diff --git a/lib/extendbuf.h b/lib/extendbuf.h new file mode 100644 index 0000000..6a4e929 --- /dev/null +++ b/lib/extendbuf.h @@ -0,0 +1,25 @@ +/* extendbuf.h -- Manage a dynamically-alloicated buffer + + Copyright (C) 2004 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef INC_EXTENDBUF_H +#define INC_EXTENDBUF_H 1 + +void *extendbuf(void* existing, size_t wanted, size_t *allocated); + + +#endif diff --git a/lib/findutils-version.c b/lib/findutils-version.c new file mode 100644 index 0000000..7e34969 --- /dev/null +++ b/lib/findutils-version.c @@ -0,0 +1,65 @@ +/* findutils-version.c -- show version information for findutils + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include +#include "stdio-safer.h" +#include "version-etc.h" +#include "gnulib-version.h" + + + +#if ENABLE_NLS +# include +# define _(Text) gettext (Text) +#else +# define _(Text) Text +#endif +#ifdef gettext_noop +# define N_(String) gettext_noop (String) +#else +/* See locate.c for explanation as to why not use (String) */ +# define N_(String) String +#endif + + + +#ifdef _LIBC +/* In the GNU C library, there is a predefined variable for this. */ +# define program_name program_invocation_name +#endif + + +extern char *program_name; +char *version_string = VERSION; + + +void +display_findutils_version(const char *official_name) +{ + /* We use official_name rather than program name in the version + * information. This is deliberate, it is specified by the + * GNU coding standard. + */ + fflush (stderr); + version_etc(stdout, + official_name, PACKAGE_NAME, version_string, + _("Eric B. Decker"), + _("James Youngman"), + _("Kevin Dalley"), + (const char*) NULL); + printf (_("Built using GNU gnulib version %s\n"), gnulib_version); +} diff --git a/lib/findutils-version.h b/lib/findutils-version.h new file mode 100644 index 0000000..ebb7ba9 --- /dev/null +++ b/lib/findutils-version.h @@ -0,0 +1,28 @@ +/* findutils-version.h -- show version information for findutils + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* + * display_findutils_version displays GNU coding standard compliant + * version information. + * + * official_name Official name of the program, for example + * "find" or "xargs" (as opposed to "/bin/find" + * or gfind). + * + */ +void display_findutils_version(const char *official_name); + diff --git a/lib/forcefindlib.c b/lib/forcefindlib.c new file mode 100644 index 0000000..40ea499 --- /dev/null +++ b/lib/forcefindlib.c @@ -0,0 +1,47 @@ +/* Ensures that the FINDLIB_REPLACE_FUNCS macro in configure.in works + Copyright (C) 2004 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +*/ + +/* Written by James Youngman. */ + + +#include + + +extern void forcefindlib(void); /* prevent GCC warning... */ + + + +/* forcefindlib + * + * This function exists only to be pulled into libfind.a by the + * FINDLIB_REPLACE_FUNCS macro in configure.in. We already have + * AC_REPLACE_FUNCS, but that adds to LIBOBJS, and that's a gnulib thing + * in the case of findutils. Hence we have out own library of replacement + * functions which aren't in gnulib (or aren't in it any more). An example + * of this is waitpid(). I develop on a system that doesn't + * lack waitpid, for example. Therefore FINDLIB_REPLACE_FUNCS(waitpid) + * never puts waitpid.o into FINDLIBOBJS. Hence, to ensure that these + * macros are tested every time, we use FINDLIB_REPLACE_FUNCS on a function + * that never exists anywhere, so always needs to be pulled in. That function + * is forcefindlib(). + */ +void +forcefindlib(void) +{ + /* does nothing, exists only to ensure that FINDLIB_REPLACE_FUNCS works. */ +} diff --git a/lib/gnulib-version.h b/lib/gnulib-version.h new file mode 100644 index 0000000..1c841b0 --- /dev/null +++ b/lib/gnulib-version.h @@ -0,0 +1,19 @@ +/* gnulib-version.h + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +extern const char * const gnulib_version; + diff --git a/lib/listfile.c b/lib/listfile.c new file mode 100644 index 0000000..9b4ed20 --- /dev/null +++ b/lib/listfile.c @@ -0,0 +1,433 @@ +/* listfile.c -- display a long listing of a file + Copyright (C) 1991, 1993, 2000, 2004, 2005, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* for readlink() */ +#include + +#include "human.h" +#include "xalloc.h" +#include "pathmax.h" +#include "error.h" +#include "filemode.h" +#include "dircallback.h" +#include "idcache.h" + +#include "listfile.h" + +/* Since major is a function on SVR4, we can't use `ifndef major'. */ +#ifdef MAJOR_IN_MKDEV +#include +#define HAVE_MAJOR +#endif +#ifdef MAJOR_IN_SYSMACROS +#include +#define HAVE_MAJOR +#endif + + + + + +#ifdef HAVE_LOCALE_H +#include +#endif + +#if ENABLE_NLS +# include +# define _(Text) gettext (Text) +#else +# define _(Text) Text +#define textdomain(Domain) +#define bindtextdomain(Package, Directory) +#endif +#ifdef gettext_noop +# define N_(String) gettext_noop (String) +#else +/* See locate.c for explanation as to why not use (String) */ +# define N_(String) String +#endif + + + +#ifdef STAT_MACROS_BROKEN +#undef S_ISCHR +#undef S_ISBLK +#undef S_ISLNK +#endif + +#ifndef S_ISCHR +#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +#endif +#ifndef S_ISBLK +#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +#endif +#if defined S_IFLNK && !defined S_ISLNK +#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) +#endif + +/* Get or fake the disk device blocksize. + Usually defined by sys/param.h (if at all). */ +#ifndef DEV_BSIZE +# ifdef BSIZE +# define DEV_BSIZE BSIZE +# else /* !BSIZE */ +# define DEV_BSIZE 4096 +# endif /* !BSIZE */ +#endif /* !DEV_BSIZE */ + +/* Extract or fake data from a `struct stat'. + ST_BLKSIZE: Preferred I/O blocksize for the file, in bytes. + ST_NBLOCKS: Number of blocks in the file, including indirect blocks. + ST_NBLOCKSIZE: Size of blocks used when calculating ST_NBLOCKS. */ +#ifndef HAVE_STRUCT_STAT_ST_BLOCKS +# define ST_BLKSIZE(statbuf) DEV_BSIZE +# if defined _POSIX_SOURCE || !defined BSIZE /* fileblocks.c uses BSIZE. */ +# define ST_NBLOCKS(statbuf) \ + (S_ISREG ((statbuf).st_mode) \ + || S_ISDIR ((statbuf).st_mode) \ + ? (statbuf).st_size / ST_NBLOCKSIZE + ((statbuf).st_size % ST_NBLOCKSIZE != 0) : 0) +# else /* !_POSIX_SOURCE && BSIZE */ +# define ST_NBLOCKS(statbuf) \ + (S_ISREG ((statbuf).st_mode) \ + || S_ISDIR ((statbuf).st_mode) \ + ? st_blocks ((statbuf).st_size) : 0) +# endif /* !_POSIX_SOURCE && BSIZE */ +#else /* HAVE_STRUCT_STAT_ST_BLOCKS */ +/* Some systems, like Sequents, return st_blksize of 0 on pipes. */ +# define ST_BLKSIZE(statbuf) ((statbuf).st_blksize > 0 \ + ? (statbuf).st_blksize : DEV_BSIZE) +# if defined hpux || defined __hpux__ || defined __hpux +/* HP-UX counts st_blocks in 1024-byte units. + This loses when mixing HP-UX and BSD filesystems with NFS. */ +# define ST_NBLOCKSIZE 1024 +# else /* !hpux */ +# if defined _AIX && defined _I386 +/* AIX PS/2 counts st_blocks in 4K units. */ +# define ST_NBLOCKSIZE (4 * 1024) +# else /* not AIX PS/2 */ +# if defined _CRAY +# define ST_NBLOCKS(statbuf) \ + (S_ISREG ((statbuf).st_mode) \ + || S_ISDIR ((statbuf).st_mode) \ + ? (statbuf).st_blocks * ST_BLKSIZE(statbuf)/ST_NBLOCKSIZE : 0) +# endif /* _CRAY */ +# endif /* not AIX PS/2 */ +# endif /* !hpux */ +#endif /* HAVE_STRUCT_STAT_ST_BLOCKS */ + +#ifndef ST_NBLOCKS +# define ST_NBLOCKS(statbuf) \ + (S_ISREG ((statbuf).st_mode) \ + || S_ISDIR ((statbuf).st_mode) \ + ? (statbuf).st_blocks : 0) +#endif + +#ifndef ST_NBLOCKSIZE +# define ST_NBLOCKSIZE 512 +#endif + +#ifdef major /* Might be defined in sys/types.h. */ +#define HAVE_MAJOR +#endif +#ifndef HAVE_MAJOR +#define major(dev) (((dev) >> 8) & 0xff) +#define minor(dev) ((dev) & 0xff) +#endif +#undef HAVE_MAJOR + + +static void print_name (register const char *p, FILE *stream, int literal_control_chars); + + +size_t +file_blocksize(const struct stat *p) +{ + return ST_NBLOCKSIZE; +} + + + +/* NAME is the name to print. + RELNAME is the path to access it from the current directory. + STATP is the results of stat or lstat on it. + Use CURRENT_TIME to decide whether to print yyyy or hh:mm. + Use OUTPUT_BLOCK_SIZE to determine how to print file block counts + and sizes. + STREAM is the stdio stream to print on. */ + +void +list_file (const char *name, + int dirfd, + char *relname, + const struct stat *statp, + time_t current_time, + int output_block_size, + int literal_control_chars, + FILE *stream) +{ + char modebuf[12]; + struct tm const *when_local; + char const *user_name; + char const *group_name; + char hbuf[LONGEST_HUMAN_READABLE + 1]; + +#if HAVE_ST_DM_MODE + /* Cray DMF: look at the file's migrated, not real, status */ + strmode (statp->st_dm_mode, modebuf); +#else + strmode (statp->st_mode, modebuf); +#endif + + fprintf (stream, "%6s ", + human_readable ((uintmax_t) statp->st_ino, hbuf, + human_ceiling, + 1, 1)); + + fprintf (stream, "%4s ", + human_readable ((uintmax_t) ST_NBLOCKS (*statp), hbuf, + human_ceiling, + ST_NBLOCKSIZE, output_block_size)); + + + /* modebuf includes the space between the mode and the number of links, + as the POSIX "optional alternate access method flag". */ + fprintf (stream, "%s%3lu ", modebuf, (unsigned long) statp->st_nlink); + + user_name = getuser (statp->st_uid); + if (user_name) + fprintf (stream, "%-8s ", user_name); + else + fprintf (stream, "%-8lu ", (unsigned long) statp->st_uid); + + group_name = getgroup (statp->st_gid); + if (group_name) + fprintf (stream, "%-8s ", group_name); + else + fprintf (stream, "%-8lu ", (unsigned long) statp->st_gid); + + if (S_ISCHR (statp->st_mode) || S_ISBLK (statp->st_mode)) +#ifdef HAVE_ST_RDEV + fprintf (stream, "%3lu, %3lu ", + (unsigned long) major (statp->st_rdev), + (unsigned long) minor (statp->st_rdev)); +#else + fprintf (stream, " "); +#endif + else + fprintf (stream, "%8s ", + human_readable ((uintmax_t) statp->st_size, hbuf, + human_ceiling, + 1, + output_block_size < 0 ? output_block_size : 1)); + + if ((when_local = localtime (&statp->st_mtime))) + { + char init_bigbuf[256]; + char *buf = init_bigbuf; + size_t bufsize = sizeof init_bigbuf; + + /* Use strftime rather than ctime, because the former can produce + locale-dependent names for the month (%b). + + Output the year if the file is fairly old or in the future. + POSIX says the cutoff is 6 months old; + approximate this by 6*30 days. + Allow a 1 hour slop factor for what is considered "the future", + to allow for NFS server/client clock disagreement. */ + char const *fmt = + ((current_time - 6 * 30 * 24 * 60 * 60 <= statp->st_mtime + && statp->st_mtime <= current_time + 60 * 60) + ? "%b %e %H:%M" + : "%b %e %Y"); + + while (!strftime (buf, bufsize, fmt, when_local)) + buf = alloca (bufsize *= 2); + + fprintf (stream, "%s ", buf); + } + else + { + /* The time cannot be represented as a local time; + print it as a huge integer number of seconds. */ + int width = 12; + + if (statp->st_mtime < 0) + { + char const *num = human_readable (- (uintmax_t) statp->st_mtime, + hbuf, human_ceiling, 1, 1); + int sign_width = width - strlen (num); + fprintf (stream, "%*s%s ", + sign_width < 0 ? 0 : sign_width, "-", num); + } + else + fprintf (stream, "%*s ", width, + human_readable ((uintmax_t) statp->st_mtime, hbuf, + human_ceiling, + 1, 1)); + } + + print_name (name, stream, literal_control_chars); + +#ifdef S_ISLNK + if (S_ISLNK (statp->st_mode)) + { + char *linkname = get_link_name_at (name, dirfd, relname); + + if (linkname) + { + fputs (" -> ", stream); + print_name (linkname, stream, literal_control_chars); + free (linkname); + } + } +#endif + putc ('\n', stream); +} + + +static void +print_name_without_quoting (const char *p, FILE *stream) +{ + fprintf(stream, "%s", p); +} + + +static void +print_name_with_quoting (register const char *p, FILE *stream) +{ + register unsigned char c; + + while ((c = *p++) != '\0') + { + switch (c) + { + case '\\': + fprintf (stream, "\\\\"); + break; + + case '\n': + fprintf (stream, "\\n"); + break; + + case '\b': + fprintf (stream, "\\b"); + break; + + case '\r': + fprintf (stream, "\\r"); + break; + + case '\t': + fprintf (stream, "\\t"); + break; + + case '\f': + fprintf (stream, "\\f"); + break; + + case ' ': + fprintf (stream, "\\ "); + break; + + case '"': + fprintf (stream, "\\\""); + break; + + default: + if (c > 040 && c < 0177) + putc (c, stream); + else + fprintf (stream, "\\%03o", (unsigned int) c); + } + } +} + +static void print_name (register const char *p, FILE *stream, int literal_control_chars) +{ + if (literal_control_chars) + print_name_without_quoting(p, stream); + else + print_name_with_quoting(p, stream); +} + +#ifdef S_ISLNK +static char * +get_link_name (const char *name, char *relname) +{ + register char *linkname; + register int linklen; + + /* st_size is wrong for symlinks on AIX, and on + mount points with some automounters. + So allocate a pessimistic PATH_MAX + 1 bytes. */ +#define LINK_BUF PATH_MAX + linkname = xmalloc (LINK_BUF + 1); + linklen = readlink (relname, linkname, LINK_BUF); + if (linklen < 0) + { + error (0, errno, "%s", name); + free (linkname); + return 0; + } + linkname[linklen] = '\0'; + return linkname; +} + +struct link_name_args +{ + const char *name; + char *relname; + char *result; +}; + +static int +get_link_name_cb(void *context) +{ + struct link_name_args *args = context; + args->result = get_link_name(args->name, args->relname); + return 0; +} + +char * +get_link_name_at (const char *name, int dirfd, char *relname) +{ + struct link_name_args args; + args.result = NULL; + args.name = name; + args.relname = relname; + if (0 == run_in_dir(dirfd, get_link_name_cb, &args)) + return args.result; + else + return NULL; +} + + +#endif diff --git a/lib/listfile.h b/lib/listfile.h new file mode 100644 index 0000000..d894d23 --- /dev/null +++ b/lib/listfile.h @@ -0,0 +1,28 @@ +/* listfile.h -- display a long listing of a file + Copyright (C) 1991, 1993, 2000 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + + +#if !defined LISTFILE_H +# define LISTFILE_H + +void list_file (const char *name, int dir_fd, char *relname, const struct stat *statp, time_t current_time, int output_block_size, int literal_control_chars, FILE *stream); + +char * get_link_name_at (const char *name, int dirfd, char *relname); + +size_t file_blocksize(const struct stat *p); + +#endif diff --git a/lib/modetype.h b/lib/modetype.h new file mode 100644 index 0000000..2c99eca --- /dev/null +++ b/lib/modetype.h @@ -0,0 +1,142 @@ +/* modetype.h -- file type bits definitions for POSIX systems + Requires sys/types.h sys/stat.h. + Copyright (C) 1990, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* POSIX.1 doesn't mention the S_IFMT bits; instead, it uses S_IStype + test macros. To make storing file types more convenient, define + them; the values don't need to correspond to what the kernel uses, + because of the way we use them. */ +#ifndef INC_MODETYPE_H +#define INC_MODETYPE_H 1 + +#ifndef S_IFMT /* Doesn't have traditional Unix macros. */ +#define S_IFBLK 1 +#define S_IFCHR 2 +#define S_IFDIR 4 +#define S_IFREG 8 +#ifdef S_ISLNK +#define S_IFLNK 16 +#endif +#ifdef S_ISFIFO +#define S_IFIFO 32 +#endif +#ifdef S_ISSOCK +#define S_IFSOCK 64 +#endif +#ifdef S_ISDOOR +#define S_IFDOOR 128 +#endif +#endif /* !S_IFMT */ + +#ifdef STAT_MACROS_BROKEN +#undef S_ISBLK +#undef S_ISCHR +#undef S_ISDIR +#undef S_ISREG +#undef S_ISFIFO +#undef S_ISLNK +#undef S_ISSOCK +#undef S_ISDOOR +#undef S_ISMPB +#undef S_ISMPC +#undef S_ISNWK +#endif + +/* Do the reverse: define the POSIX.1 macros for traditional Unix systems + that don't have them. */ +#if !defined(S_ISBLK) && defined(S_IFBLK) +#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +#endif +#if !defined(S_ISCHR) && defined(S_IFCHR) +#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +#endif +#if !defined(S_ISDIR) && defined(S_IFDIR) +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#endif +#if !defined(S_ISREG) && defined(S_IFREG) +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#endif +#if !defined(S_ISFIFO) && defined(S_IFIFO) +#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) +#endif +#if !defined(S_ISLNK) && defined(S_IFLNK) +#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) +#endif +#if !defined(S_ISSOCK) && defined(S_IFSOCK) +#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) +#endif +#if !defined(S_ISDOOR) && defined(S_IFDOOR) +#define S_ISDOOR(m) (((m) & S_IFMT) == S_IFDOOR) +#endif +#if !defined(S_ISMPB) && defined(S_IFMPB) /* V7 */ +/* Also available on Coherent, according to + * Albert D. Cahalan (acahalan@cs.uml.edu) + */ +#define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) /* multiplexed block device */ +#define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC) /* multiplexed char device */ +/* GNU BFD library source uses type letter 'm' for these */ +#endif + +#if !defined(S_ISNWK) && defined(S_IFNWK) /* HP/UX */ +/* Apparently HPUX ls gives 'n' as the type letter for these. */ +#define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) +#endif + +#endif + +/* The above macros don't handle + * /bin/ls letters Mode What is it? + * S_IFNAM (Xenix "name files") + * H S_ISCDF (HPUX Context Dependent Files) + * S_IFCMP + * S_IFSHAD + */ + +/* +In message <199907051927.PAA01106@jupiter.cs.uml.edu> +Albert Cahalan wrote:- + +BTW, I believe many of these can't actually exist on disk. +Some of these (like S_IFSHAD AFAIK) are not seen by userspace. + +hex name ls octal description +0000 000000 SCO out-of-service inode, BSD unknown type +1000 S_IFIFO p| 010000 fifo (named pipe) +2000 S_IFCHR c 020000 character special +3000 S_IFMPC 030000 multiplexed character device (Coherent) +4000 S_IFDIR d/ 040000 directory +5000 S_IFNAM 050000 XENIX special named file +6000 S_IFBLK b 060000 block special +7000 S_IFMPB 070000 multiplexed block device (Coherent) +8000 S_IFREG - 100000 regular +9000 S_IFCMP 110000 VxFS compressed (file?) +9000 S_IFNWK 110000 HP-UX network special +a000 S_IFLNK l@ 120000 symbolic link +b000 S_IFSHAD 130000 Solaris shadow inode for ACL +c000 S_IFSOCK s= 140000 socket (also "S_IFSOC" on VxFS) +d000 S_IFDOOR D 150000 Solaris door +e000 S_IFWHT w% 160000 BSD whiteout (not used for inode) +f000 S_IFMT 170000 mask (not used for inode) +hex name ls octal description +0200 S_ISVTX 001000 save swapped text even after use +0400 S_ISGID 002000 set group ID on execution +0400 S_ENFMT 002000 SysV forced file locking (shared w/ S_ISGID) +0800 S_CDF 004000 HP-UX hidden directory +0800 S_ISUID 004000 set user ID on execution + + +*/ diff --git a/lib/nextelem.c b/lib/nextelem.c new file mode 100644 index 0000000..a4bd8dd --- /dev/null +++ b/lib/nextelem.c @@ -0,0 +1,107 @@ +/* Return the next element of a path. + Copyright (C) 1992,2005 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* Written by David MacKenzie , + inspired by John P. Rouillard . */ + +#include + + +#include +#if defined HAVE_STRING_H || defined STDC_HEADERS +#include +#else +#include +#ifndef strchr +#define strchr index +#endif +#endif +#if defined STDC_HEADERS +#include +#endif + +#include "nextelem.h" + + +/* Return the next element of a colon-separated path. + A null entry in the path is equivalent to "." (the current directory). + + If NEW_PATH is non-NULL, set the path and return NULL. + If NEW_PATH is NULL, return the next item in the string, or + return NULL if there are no more elements. */ + +char * +next_element (const char *new_path, int curdir_ok) +{ + static char *path = NULL; /* Freshly allocated copy of NEW_PATH. */ + static char *end; /* Start of next element to return. */ + static int final_colon; /* If zero, path didn't end with a colon. */ + char *start; /* Start of path element to return. */ + + if (new_path) + { + if (path) + free (path); + end = path = strdup (new_path); + final_colon = 0; + return NULL; + } + + if (*end == '\0') + { + if (final_colon) + { + final_colon = 0; + return curdir_ok ? "." : ""; + } + return NULL; + } + + start = end; + final_colon = 1; /* Maybe there will be one. */ + + end = strchr (start, ':'); + if (end == start) + { + /* An empty path element. */ + *end++ = '\0'; + return curdir_ok ? "." : ""; + } + else if (end == NULL) + { + /* The last path element. */ + end = strchr (start, '\0'); + final_colon = 0; + } + else + *end++ = '\0'; + + return start; +} + +#ifdef TEST +int +main () +{ + char *p; + + next_element (getenv ("PATH")); + while (p = next_element (NULL)) + puts (p); + exit (0); +} +#endif /* TEST */ diff --git a/lib/nextelem.h b/lib/nextelem.h new file mode 100644 index 0000000..53cfa80 --- /dev/null +++ b/lib/nextelem.h @@ -0,0 +1,26 @@ +/* Return the next element of a path. + Copyright (C) 1992 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* Written by David MacKenzie , + inspired by John P. Rouillard . */ + +#ifndef INC_NEXTELEM_H +#define INC_NEXTELEM_H 1 + +char *next_element (const char *path, int curdir_ok); + +#endif diff --git a/lib/printquoted.c b/lib/printquoted.c new file mode 100644 index 0000000..aa2c3a4 --- /dev/null +++ b/lib/printquoted.c @@ -0,0 +1,87 @@ +/* printquoted.c -- print a specified string with any necessary quoting. + + Copyright (C) 1990, 1991, 1992, 1993, 1994, 2000, + 2003, 2004, 2005 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include + + +#include +#include +#include + +/* Get mbstate_t, mbrtowc(), mbsinit(), wcwidth(). */ +#if HAVE_WCHAR_H +# include +#endif + + + +#include "xalloc.h" +#include "printquoted.h" + + +/* + * Print S according to the format FORMAT, but if the destination is a tty, + * convert any potentially-dangerous characters. The logic in this function + * was taken from ls.c in coreutils (at Sun Jun 5 20:42:51 2005 UTC). + */ +int +print_quoted (FILE *fp, + const struct quoting_options *qopts, + bool dest_is_tty, + const char *format, + const char *s) +{ + int rv; + + if (dest_is_tty) + { + char smallbuf[BUFSIZ]; + size_t len = quotearg_buffer (smallbuf, sizeof smallbuf, s, -1, qopts); + char *buf; + if (len < sizeof smallbuf) + buf = smallbuf; + else + { + /* The original coreutils code uses alloca(), but I don't + * want to take on the anguish of introducing alloca() to + * 'find'. + * XXX: newsflash: we already have alloca(). + */ + buf = xmalloc (len + 1); + quotearg_buffer (buf, len + 1, s, -1, qopts); + } + + /* Replace any remaining funny characters with '?'. */ + len = qmark_chars(buf, len); + + rv = fprintf(fp, format, buf); /* Print the quoted version */ + if (buf != smallbuf) + { + free(buf); + buf = NULL; + } + } + else + { + /* no need to quote things. */ + rv = fprintf(fp, format, s); + } + return rv; +} + diff --git a/lib/printquoted.h b/lib/printquoted.h new file mode 100644 index 0000000..df8e5f0 --- /dev/null +++ b/lib/printquoted.h @@ -0,0 +1,34 @@ +/* Print a string, appropriately quoted. + + Copyright 1997, 1999, 2001, 2003, 2005 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#if !defined PRINTQUOTED_H +# define PRINTQUOTED_H + +#include "quote.h" +#include "quotearg.h" + + +#include +#include + + +size_t qmark_chars(char *buf, size_t len); +int print_quoted (FILE *fp, const struct quoting_options *qopts, bool dest_is_tty, const char *format, const char *s); + + +#endif diff --git a/lib/qmark.c b/lib/qmark.c new file mode 100644 index 0000000..a23a5f8 --- /dev/null +++ b/lib/qmark.c @@ -0,0 +1,237 @@ +/* qmark.c -- quote 'dangerous' filenames + + Copyright (C) 2005 Free Software Foundation, Inc. + Derived from courutils' ls.c: + Copyright (C) 85, 88, 90, 91, 1995-2005 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include + +# include +# include +#include + +#if HAVE_STRING_H || STDC_HEADERS +#include +#else +#include +#endif + + +/* Get mbstate_t, mbrtowc(), mbsinit(), wcwidth(). */ +#if HAVE_WCHAR_H +# include +#endif + +#include "printquoted.h" + + +/* + This comment, IN_CTYPE_DOMAIN and ISPRINT were borrowed from + coreutils at Sun Jun 5 21:17:40 2005 UTC. + + Jim Meyering writes: + + "... Some ctype macros are valid only for character codes that + isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when + using /bin/cc or gcc but without giving an ansi option). So, all + ctype uses should be through macros like ISPRINT... If + STDC_HEADERS is defined, then autoconf has verified that the ctype + macros don't need to be guarded with references to isascii. ... + Defining isascii to 1 should let any compiler worth its salt + eliminate the && through constant folding." + + Bruno Haible adds: + + "... Furthermore, isupper(c) etc. have an undefined result if c is + outside the range -1 <= c <= 255. One is tempted to write isupper(c) + with c being of type `char', but this is wrong if c is an 8-bit + character >= 128 which gets sign-extended to a negative value. + The macro ISUPPER protects against this as well." */ + + + + +/* ISPRINT is defined in on at least Solaris2.6 systems. */ +#undef ISPRINT +#define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c)) + +#if STDC_HEADERS || (!defined (isascii) && !HAVE_ISASCII) +# define IN_CTYPE_DOMAIN(c) 1 +#else +# define IN_CTYPE_DOMAIN(c) isascii(c) +#endif + + + + + +/* Convert a possibly-signed character to an unsigned character. This is + * a bit safer than casting to unsigned char, since it catches some type + * errors that the cast doesn't. + * + * This code taken from coreutils' system.h header at + * Sun Jun 5 21:05:21 2005 UTC. + */ +static inline unsigned char to_uchar (char ch) +{ + return ch; +} + + + +static size_t +unibyte_qmark_chars(char *buf, size_t len) +{ + char *p = buf; + char const *plimit = buf + len; + + while (p < plimit) + { + if (! ISPRINT (to_uchar (*p))) + *p = '?'; + p++; + } + return len; +} + + +#if HAVE_MBRTOWC +static size_t +multibyte_qmark_chars(char *buf, size_t len) +{ + if (MB_CUR_MAX <= 1) + { + return unibyte_qmark_chars(buf, len); + } + else + { + char const *p = buf; + char const *plimit = buf + len; + char *q = buf; + + while (p < plimit) + switch (*p) + { + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* These characters are printable ASCII characters. */ + *q++ = *p++; + break; + default: + /* If we have a multibyte sequence, copy it until we + reach its end, replacing each non-printable multibyte + character with a single question mark. */ + { + mbstate_t mbstate; + memset (&mbstate, 0, sizeof mbstate); + do + { + wchar_t wc; + size_t bytes; + int w; + + bytes = mbrtowc (&wc, p, plimit - p, &mbstate); + + if (bytes == (size_t) -1) + { + /* An invalid multibyte sequence was + encountered. Skip one input byte, and + put a question mark. */ + p++; + *q++ = '?'; + break; + } + + if (bytes == (size_t) -2) + { + /* An incomplete multibyte character + at the end. Replace it entirely with + a question mark. */ + p = plimit; + *q++ = '?'; + break; + } + + if (bytes == 0) + /* A null wide character was encountered. */ + bytes = 1; + + w = wcwidth (wc); + if (w >= 0) + { + /* A printable multibyte character. + Keep it. */ + for (; bytes > 0; --bytes) + *q++ = *p++; + } + else + { + /* An unprintable multibyte character. + Replace it entirely with a question + mark. */ + p += bytes; + *q++ = '?'; + } + } + while (! mbsinit (&mbstate)); + } + break; + } + + /* The buffer may have shrunk. */ + len = q - buf; + return len; + } +} +#endif + + +/* Scan BUF, replacing any dangerous-looking characters with question + * marks. This code is taken from the ls.c file in coreutils as at + * Sun Jun 5 20:51:54 2005 UTC. + * + * This function may shrink the buffer. Either way, the new length + * is returned. + */ +size_t +qmark_chars(char *buf, size_t len) +{ +#if HAVE_MBRTOWC + return multibyte_qmark_chars(buf, len); +#else + return unibyte_qmark_chars(buf, len); +#endif +} + diff --git a/lib/regexprops.c b/lib/regexprops.c new file mode 100644 index 0000000..9d7ef79 --- /dev/null +++ b/lib/regexprops.c @@ -0,0 +1,492 @@ +/* regexprops.c -- document the properties of the regular expressions + understood by gnulib. + + Copyright 2005 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* Written by James Youngman, . */ + +#include + + +#include +#include +#include + +#include "regex.h" +#include "regextype.h" + + +/* Name this program was run with. */ +char *program_name; + +static void output(const char *s, int escape) +{ + (void) escape; + + fputs(s, stdout); +} + + +static void newline(void) +{ + output("\n", 0); +} + +static void content(const char *s) +{ + output(s, 1); +} + +static void literal(const char *s) +{ + output(s, 0); +} + +static void directive(const char *s) +{ + output(s, 0); +} + +static void enum_item(const char *s) +{ + newline(); + directive("@item "); + literal(s); + newline(); +} + +static void begin_subsection(const char *name, + const char *next, + const char *prev, + const char *up) +{ + (void) next; + (void) prev; + (void) up; + + newline(); + + directive("@node "); + content(name); + content(" regular expression syntax"); + newline(); + + directive("@subsection "); + output("@samp{", 0); + content(name); + output("}", 0); + content(" regular expression syntax"); + newline(); +} + +static void begintable_markup(char const *markup) +{ + newline(); + directive("@table "); + literal(markup); + newline(); +} + +static void endtable() +{ + newline(); + directive("@end table"); + newline(); +} + +static void beginenum() +{ + newline(); + directive("@enumerate"); + newline(); +} + +static void endenum() +{ + newline(); + directive("@end enumerate"); + newline(); +} + +static void newpara() +{ + content("\n\n"); +} + + +static void +describe_regex_syntax(int options) +{ + newpara(); + content("The character @samp{.} matches any single character"); + if ( (options & RE_DOT_NEWLINE) == 0 ) + { + content(" except newline"); + } + if (options & RE_DOT_NOT_NULL) + { + if ( (options & RE_DOT_NEWLINE) == 0 ) + content(" and"); + else + content(" except"); + + content(" the null character"); + } + content(". "); + newpara(); + + if (!(options & RE_LIMITED_OPS)) + { + begintable_markup("@samp"); + if (options & RE_BK_PLUS_QM) + { + enum_item("\\+"); + content("indicates that the regular expression should match one" + " or more occurrences of the previous atom or regexp. "); + enum_item("\\?"); + content("indicates that the regular expression should match zero" + " or one occurrence of the previous atom or regexp. "); + enum_item("+ and ? "); + content("match themselves. "); + } + else + { + enum_item("+"); + content("indicates that the regular expression should match one" + " or more occurrences of the previous atom or regexp. "); + enum_item("?"); + content("indicates that the regular expression should match zero" + " or one occurrence of the previous atom or regexp. "); + enum_item("\\+"); + literal("matches a @samp{+}"); + enum_item("\\?"); + literal("matches a @samp{?}. "); + } + endtable(); + } + + newpara(); + + content("Bracket expressions are used to match ranges of characters. "); + literal("Bracket expressions where the range is backward, for example @samp{[z-a]}, are "); + if (options & RE_NO_EMPTY_RANGES) + content("invalid"); + else + content("ignored"); + content(". "); + + if (options & RE_BACKSLASH_ESCAPE_IN_LISTS) + literal("Within square brackets, @samp{\\} can be used to quote " + "the following character. "); + else + literal("Within square brackets, @samp{\\} is taken literally. "); + + if (options & RE_CHAR_CLASSES) + content("Character classes are supported; for example " + "@samp{[[:digit:]]} will match a single decimal digit. "); + else + literal("Character classes are not supported, so for example " + "you would need to use @samp{[0-9]} " + "instead of @samp{[[:digit:]]}. "); + + if (options & RE_HAT_LISTS_NOT_NEWLINE) + { + literal("Non-matching lists @samp{[^@dots{}]} do not ever match newline. "); + } + newpara(); + if (options & RE_NO_GNU_OPS) + { + content("GNU extensions are not supported and so " + "@samp{\\w}, @samp{\\W}, @samp{\\<}, @samp{\\>}, @samp{\\b}, @samp{\\B}, @samp{\\`}, and @samp{\\'} " + "match " + "@samp{w}, @samp{W}, @samp{<}, @samp{>}, @samp{b}, @samp{B}, @samp{`}, and @samp{'} respectively. "); + } + else + { + content("GNU extensions are supported:"); + beginenum(); + enum_item("@samp{\\w} matches a character within a word"); + enum_item("@samp{\\W} matches a character which is not within a word"); + enum_item("@samp{\\<} matches the beginning of a word"); + enum_item("@samp{\\>} matches the end of a word"); + enum_item("@samp{\\b} matches a word boundary"); + enum_item("@samp{\\B} matches characters which are not a word boundary"); + enum_item("@samp{\\`} matches the beginning of the whole input"); + enum_item("@samp{\\'} matches the end of the whole input"); + endenum(); + } + + newpara(); + + + if (options & RE_NO_BK_PARENS) + { + literal("Grouping is performed with parentheses @samp{()}. "); + + if (options & RE_UNMATCHED_RIGHT_PAREN_ORD) + literal("An unmatched @samp{)} matches just itself. "); + } + else + { + literal("Grouping is performed with backslashes followed by parentheses @samp{\\(}, @samp{\\)}. "); + } + + if (options & RE_NO_BK_REFS) + { + content("A backslash followed by a digit matches that digit. "); + } + else + { + literal("A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number. For example @samp{\\2} matches the second group expression. The order of group expressions is determined by the position of their opening parenthesis "); + if (options & RE_NO_BK_PARENS) + literal("@samp{(}"); + else + literal("@samp{\\(}"); + content(". "); + } + + + newpara(); + if (!(options & RE_LIMITED_OPS)) + { + if (options & RE_NO_BK_VBAR) + literal("The alternation operator is @samp{|}. "); + else + literal("The alternation operator is @samp{\\|}. "); + } + newpara(); + + if (options & RE_CONTEXT_INDEP_ANCHORS) + { + literal("The characters @samp{^} and @samp{$} always represent the beginning and end of a string respectively, except within square brackets. Within brackets, @samp{^} can be used to invert the membership of the character class being specified. "); + } + else + { + literal("The character @samp{^} only represents the beginning of a string when it appears:"); + beginenum(); + enum_item("\nAt the beginning of a regular expression"); + enum_item("After an open-group, signified by "); + if (options & RE_NO_BK_PARENS) + { + literal("@samp{(}"); + } + else + { + literal("@samp{\\(}"); + } + newline(); + if (!(options & RE_LIMITED_OPS)) + { + if (options & RE_NEWLINE_ALT) + enum_item("After a newline"); + + if (options & RE_NO_BK_VBAR ) + enum_item("After the alternation operator @samp{|}"); + else + enum_item("After the alternation operator @samp{\\|}"); + } + endenum(); + + newpara(); + literal("The character @samp{$} only represents the end of a string when it appears:"); + beginenum(); + enum_item("At the end of a regular expression"); + enum_item("Before a close-group, signified by "); + if (options & RE_NO_BK_PARENS) + { + literal("@samp{)}"); + } + else + { + literal("@samp{\\)}"); + } + if (!(options & RE_LIMITED_OPS)) + { + if (options & RE_NEWLINE_ALT) + enum_item("Before a newline"); + + if (options & RE_NO_BK_VBAR) + enum_item("Before the alternation operator @samp{|}"); + else + enum_item("Before the alternation operator @samp{\\|}"); + } + endenum(); + } + newpara(); + if (!(options & RE_LIMITED_OPS) ) + { + if ((options & RE_CONTEXT_INDEP_OPS) + && !(options & RE_CONTEXT_INVALID_OPS)) + { + literal("The characters @samp{*}, @samp{+} and @samp{?} are special anywhere in a regular expression. "); + } + else + { + if (options & RE_BK_PLUS_QM) + literal("@samp{\\*}, @samp{\\+} and @samp{\\?} "); + else + literal("@samp{*}, @samp{+} and @samp{?} "); + + if (options & RE_CONTEXT_INVALID_OPS) + { + content("are special at any point in a regular expression except the following places, where they are not allowed:"); + } + else + { + content("are special at any point in a regular expression except:"); + } + + beginenum(); + enum_item("At the beginning of a regular expression"); + enum_item("After an open-group, signified by "); + if (options & RE_NO_BK_PARENS) + { + literal("@samp{(}"); + } + else + { + literal("@samp{\\(}"); + } + if (!(options & RE_LIMITED_OPS)) + { + if (options & RE_NEWLINE_ALT) + enum_item("After a newline"); + + if (options & RE_NO_BK_VBAR) + enum_item("After the alternation operator @samp{|}"); + else + enum_item("After the alternation operator @samp{\\|}"); + } + endenum(); + } + } + + + newpara(); + if (options & RE_INTERVALS) + { + if (options & RE_NO_BK_BRACES) + { + literal("Intervals are specified by @samp{@{} and @samp{@}}. "); + if (options & RE_INVALID_INTERVAL_ORD) + { + literal("Invalid intervals are treated as literals, for example @samp{a@{1} is treated as @samp{a\\@{1}"); + } + else + { + literal("Invalid intervals such as @samp{a@{1z} are not accepted. "); + } + } + else + { + literal("Intervals are specified by @samp{\\@{} and @samp{\\@}}. "); + if (options & RE_INVALID_INTERVAL_ORD) + { + literal("Invalid intervals are treated as literals, for example @samp{a\\@{1} is treated as @samp{a@{1}"); + } + else + { + literal("Invalid intervals such as @samp{a\\@{1z} are not accepted. "); + } + } + + } + + newpara(); + if (options & RE_NO_POSIX_BACKTRACKING) + { + content("Matching succeeds as soon as the whole pattern is matched, meaning that the result may not be the longest possible match. "); + } + else + { + content("The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups. "); + } + newpara(); +} + + + +static void +menu(void) +{ + int i, options; + const char *name; + + output("@menu\n", 0); + for (i=0; + options = get_regex_type_flags(i), + name=get_regex_type_name(i); + ++i) + { + output("* ", 0); + output(name, 0); + content(" regular expression syntax"); + output("::", 0); + newline(); + } + output("@end menu\n", 0); +} + + +static void +describe_all(const char *up) +{ + const char *name, *next, *previous; + int options; + int i, parent; + + menu(); + + previous = ""; + + for (i=0; + options = get_regex_type_flags(i), + name=get_regex_type_name(i); + ++i) + { + next = get_regex_type_name(i+1); + if (NULL == next) + next = ""; + begin_subsection(name, next, previous, up); + parent = get_regex_type_synonym(i); + if (parent >= 0) + { + content("This is a synonym for "); + content(get_regex_type_name(parent)); + content("."); + } + else + { + describe_regex_syntax(options); + } + previous = name; + } +} + + + +int main (int argc, char *argv[]) +{ + const char *up = ""; + program_name = argv[0]; + + if (argc > 1) + up = argv[1]; + + describe_all(up); + return 0; +} diff --git a/lib/regextype.c b/lib/regextype.c new file mode 100644 index 0000000..73e4819 --- /dev/null +++ b/lib/regextype.c @@ -0,0 +1,156 @@ + +/* regextype.c -- Decode the name of a regular expression syntax into am + option name. + + Copyright 2005 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/* Written by James Youngman, . */ + +#if HAVE_CONFIG_H +# include +#endif + +#include +#include + +#include "regextype.h" +#include "regex.h" +#include "quote.h" +#include "xalloc.h" +#include "error.h" + + +#if ENABLE_NLS +# include +# define _(Text) gettext (Text) +#else +# define _(Text) Text +#endif +#ifdef gettext_noop +# define N_(String) gettext_noop (String) +#else +/* See locate.c for explanation as to why not use (String) */ +# define N_(String) String +#endif + + + +struct tagRegexTypeMap +{ + char *name; + int option_val; +}; + +struct tagRegexTypeMap regex_map[] = + { +#ifdef FINDUTILS + { "findutils-default", RE_SYNTAX_EMACS|RE_DOT_NEWLINE }, +#endif + { "awk", RE_SYNTAX_AWK }, + { "egrep", RE_SYNTAX_EGREP }, +#ifndef FINDUTILS + { "ed", RE_SYNTAX_ED }, +#endif + { "emacs", RE_SYNTAX_EMACS }, + { "gnu-awk", RE_SYNTAX_GNU_AWK }, + { "grep", RE_SYNTAX_GREP }, + { "posix-awk", RE_SYNTAX_POSIX_AWK }, + { "posix-basic", RE_SYNTAX_POSIX_BASIC }, + { "posix-egrep", RE_SYNTAX_POSIX_EGREP }, + { "posix-extended", RE_SYNTAX_POSIX_EXTENDED }, +#ifndef FINDUTILS + { "posix-minimal-basic", RE_SYNTAX_POSIX_MINIMAL_BASIC }, + { "sed", RE_SYNTAX_SED }, + /* ,{ "posix-common", _RE_SYNTAX_POSIX_COMMON } */ +#endif + }; +enum { N_REGEX_MAP_ENTRIES = sizeof(regex_map)/sizeof(regex_map[0]) }; + +int +get_regex_type(const char *s) +{ + unsigned i; + size_t msglen; + char *buf, *p; + + msglen = 0u; + for (i=0u; i 0u) + { + strcpy(p, ", "); + p += 2; + } + p += sprintf(p, "%s", quote(regex_map[i].name)); + } + + error(1, 0, _("Unknown regular expression type %s; valid types are %s."), + quote(s), + buf); + /*NOTREACHED*/ + return -1; +} + + +const char * +get_regex_type_name(unsigned int ix) +{ + if (ix < N_REGEX_MAP_ENTRIES) + return regex_map[ix].name; + else + return NULL; +} + +int +get_regex_type_flags(unsigned int ix) +{ + if (ix < N_REGEX_MAP_ENTRIES) + return regex_map[ix].option_val; + else + return -1; +} + + +int get_regex_type_synonym(unsigned int ix) +{ + unsigned i; + int flags; + + if (ix >= N_REGEX_MAP_ENTRIES) + return -1; + + flags = regex_map[ix].option_val; + for (i=0u; i. +*/ +/* Written by James Youngman . + */ + +int get_regex_type(const char *s); + + +const char * get_regex_type_name(unsigned int ix); +int get_regex_type_flags(unsigned int ix); +int get_regex_type_synonym(unsigned int ix); diff --git a/lib/savedirinfo.c b/lib/savedirinfo.c new file mode 100644 index 0000000..be62b7f --- /dev/null +++ b/lib/savedirinfo.c @@ -0,0 +1,384 @@ +/* savedirinfo.c -- Save the list of files in a directory, with additional information. + + Copyright 1990, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 Free + Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/* Written by James Youngman, . */ +/* Derived from savedir.c, written by David MacKenzie . */ + +#include + +#if HAVE_SYS_STAT_H +# include +#endif + +#if HAVE_SYS_TYPES_H +# include +#endif + +/* The presence of unistd.h is assumed by gnulib these days, so we + * might as well assume it too. + */ +#include + +#include + +#if HAVE_DIRENT_H +# include +#else +# define dirent direct +# if HAVE_SYS_NDIR_H +# include +# endif +# if HAVE_SYS_DIR_H +# include +# endif +# if HAVE_NDIR_H +# include +# endif +#endif + +#ifdef CLOSEDIR_VOID +/* Fake a return value. */ +# define CLOSEDIR(d) (closedir (d), 0) +#else +# define CLOSEDIR(d) closedir (d) +#endif + +#include +#include +#include + +#include "xalloc.h" +#include "extendbuf.h" +#include "savedirinfo.h" + +/* In order to use struct dirent.d_type, it has to be enabled on the + * configure command line, and we have to have a d_type member in + * 'struct dirent'. + */ +#if !defined(USE_STRUCT_DIRENT_D_TYPE) +/* Not enabled, hence pretend it is absent. */ +#undef HAVE_STRUCT_DIRENT_D_TYPE +#endif +#if !defined(HAVE_STRUCT_DIRENT_D_TYPE) +/* Not present, so cannot use it. */ +#undef USE_STRUCT_DIRENT_D_TYPE +#endif + + +#if defined HAVE_STRUCT_DIRENT_D_TYPE && defined USE_STRUCT_DIRENT_D_TYPE +/* Convert the value of struct dirent.d_type into a value for + * struct stat.st_mode (at least the file type bits), or zero + * if the type is DT_UNKNOWN or is a value we don't know about. + */ +static mode_t +type_to_mode(unsigned type) +{ + switch (type) + { +#ifdef DT_FIFO + case DT_FIFO: return S_IFIFO; +#endif +#ifdef DT_CHR + case DT_CHR: return S_IFCHR; +#endif +#ifdef DT_DIR + case DT_DIR: return S_IFDIR; +#endif +#ifdef DT_BLK + case DT_BLK: return S_IFBLK; +#endif +#ifdef DT_REG + case DT_REG: return S_IFREG; +#endif +#ifdef DT_LNK + case DT_LNK: return S_IFLNK; +#endif +#ifdef DT_SOCK + case DT_SOCK: return S_IFSOCK; +#endif + default: + return 0; /* Unknown. */ + } +} + +#endif + +struct new_savedir_direntry_internal +{ + int flags; /* from SaveDirDataFlags */ + mode_t type_info; + size_t buffer_offset; +}; + + + +static int +savedir_cmp(const void *p1, const void *p2) +{ + const struct savedir_direntry *de1, *de2; + de1 = p1; + de2 = p2; + return strcmp(de1->name, de2->name); /* POSIX order, not locale order. */ +} + + +static struct savedir_direntry* +convertentries(const struct savedir_dirinfo *info, + struct new_savedir_direntry_internal *internal) +{ + char *p = info->buffer; + struct savedir_direntry *result; + int n =info->size; + int i; + + + result = xmalloc(sizeof(*result) * info->size); + + for (i=0; ibuffer = NULL; + result->size = 0u; + result->entries = NULL; + internal = NULL; + + while ((dp = readdir (dirp)) != NULL) + { + /* Skip "", ".", and "..". "" is returned by at least one buggy + implementation: Solaris 2.4 readdir on NFS file systems. */ + char const *entry = dp->d_name; + if (entry[entry[0] != '.' ? 0 : entry[1] != '.' ? 1 : 2] != '\0') + { + /* Remember the name. */ + size_t entry_size = strlen (entry) + 1; + result->buffer = extendbuf(result->buffer, namebuf_used+entry_size, &namebuf_allocated); + memcpy ((result->buffer) + namebuf_used, entry, entry_size); + + /* Remember the other stuff. */ + internal = extendbuf(internal, (1+result->size)*sizeof(*internal), &entrybuf_allocated); + internal[result->size].flags = 0; + +#if defined HAVE_STRUCT_DIRENT_D_TYPE && defined USE_STRUCT_DIRENT_D_TYPE + internal[result->size].type_info = type_to_mode(dp->d_type); + if (dp->d_type != DT_UNKNOWN) + internal[result->size].flags |= SavedirHaveFileType; +#else + internal[result->size].type_info = 0; +#endif + internal[result->size].buffer_offset = namebuf_used; + + /* Prepare for the next iteration */ + ++(result->size); + namebuf_used += entry_size; + } + } + + result->buffer = extendbuf(result->buffer, namebuf_used+1, &namebuf_allocated); + result->buffer[namebuf_used] = '\0'; + + /* convert the result to its externally-usable form. */ + result->entries = convertentries(result, internal); + free(internal); + internal = NULL; + + + if (flags & SavedirSort) + { + qsort(result->entries, + result->size, sizeof(*result->entries), + savedir_cmp); + } + + + save_errno = errno; + if (CLOSEDIR (dirp) != 0) + save_errno = errno; + if (save_errno != 0) + { + free (result->buffer); + free (result); + errno = save_errno; + return NULL; + } + + return result; +} + +void free_dirinfo(struct savedir_dirinfo *p) +{ + free(p->entries); + p->entries = NULL; + free(p->buffer); + p->buffer = NULL; + free(p); +} + + + +static char * +new_savedirinfo (const char *dir, struct savedir_extrainfo **extra) +{ + struct savedir_dirinfo *p = xsavedir(dir, SavedirSort); + char *buf, *s; + size_t bufbytes = 0; + unsigned int i; + + if (p) + { + struct savedir_extrainfo *pex = xmalloc(p->size * sizeof(*extra)); + for (i=0; isize; ++i) + { + bufbytes += strlen(p->entries[i].name); + ++bufbytes; /* the \0 */ + + pex[i].type_info = p->entries[i].type_info; + } + + s = buf = xmalloc(bufbytes+1); + for (i=0; isize; ++i) + { + size_t len = strlen(p->entries[i].name); + memcpy(s, p->entries[i].name, len); + s += len; + *s = 0; /* Place a NUL */ + ++s; /* Skip the NUL. */ + } + *s = 0; /* final (doubled) terminating NUL */ + + if (extra) + *extra = pex; + else + free (pex); + return buf; + } + else + { + return NULL; + } +} + + +#if 0 +/* Return a freshly allocated string containing the filenames + in directory DIR, separated by '\0' characters; + the end is marked by two '\0' characters in a row. + Return NULL (setting errno) if DIR cannot be opened, read, or closed. */ + +static char * +old_savedirinfo (const char *dir, struct savedir_extrainfo **extra) +{ + DIR *dirp; + struct dirent *dp; + char *name_space; + size_t namebuf_allocated = 0u, namebuf_used = 0u; +#if defined HAVE_STRUCT_DIRENT_D_TYPE && defined USE_STRUCT_DIRENT_D_TYPE + size_t extra_allocated = 0u, extra_used = 0u; + struct savedir_extrainfo *info = NULL; +#endif + int save_errno; + + if (extra) + *extra = NULL; + + dirp = opendir (dir); + if (dirp == NULL) + return NULL; + + errno = 0; + name_space = NULL; + while ((dp = readdir (dirp)) != NULL) + { + /* Skip "", ".", and "..". "" is returned by at least one buggy + implementation: Solaris 2.4 readdir on NFS file systems. */ + char const *entry = dp->d_name; + if (entry[entry[0] != '.' ? 0 : entry[1] != '.' ? 1 : 2] != '\0') + { + /* Remember the name. */ + size_t entry_size = strlen (entry) + 1; + name_space = extendbuf(name_space, namebuf_used+entry_size, &namebuf_allocated); + memcpy (name_space + namebuf_used, entry, entry_size); + namebuf_used += entry_size; + + +#if defined HAVE_STRUCT_DIRENT_D_TYPE && defined USE_STRUCT_DIRENT_D_TYPE + /* Remember the type. */ + if (extra) + { + info = extendbuf(info, + (extra_used+1) * sizeof(struct savedir_dirinfo), + &extra_allocated); + info[extra_used].type_info = type_to_mode(dp->d_type); + ++extra_used; + } +#endif + } + } + + name_space = extendbuf(name_space, namebuf_used+1, &namebuf_allocated); + name_space[namebuf_used] = '\0'; + + save_errno = errno; + if (CLOSEDIR (dirp) != 0) + save_errno = errno; + if (save_errno != 0) + { + free (name_space); + errno = save_errno; + return NULL; + } + +#if defined HAVE_STRUCT_DIRENT_D_TYPE && defined USE_STRUCT_DIRENT_D_TYPE + if (extra && info) + *extra = info; +#endif + + return name_space; +} +#endif + + +char * +savedirinfo (const char *dir, struct savedir_extrainfo **extra) +{ + return new_savedirinfo(dir, extra); +} diff --git a/lib/savedirinfo.h b/lib/savedirinfo.h new file mode 100644 index 0000000..d915de6 --- /dev/null +++ b/lib/savedirinfo.h @@ -0,0 +1,72 @@ +/* Save the list of files in a directory, with additional information. + + Copyright 1997, 1999, 2001, 2003, 2005 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/* Written by James Youngman . + * Based on savedir.h by David MacKenzie . + */ + +#if !defined SAVEDIRINFO_H_ +# define SAVEDIRINFO_H_ + + +typedef enum tagSaveDirControlFlags + { + SavedirSort = 1 + } +SaveDirControlFlags; + + +typedef enum tagSaveDirDataFlags + { + SavedirHaveFileType = 1 + } +SaveDirDataFlags; + + +/* We keep the name and the type in a structure together + * to allow us to sort them together. + */ +struct savedir_direntry +{ + int flags; /* from SaveDirDataFlags */ + char *name; /* the name of the directory entry */ + mode_t type_info; /* the type (or zero if unknown) */ +}; + +struct savedir_dirinfo +{ + char *buffer; /* The names are stored here. */ + size_t size; /* The total number of results. */ + struct savedir_direntry *entries; /* The results themselves */ +}; + + +struct savedir_extrainfo +{ + mode_t type_info; +}; + +/* savedirinfo() is the old interface. */ +char *savedirinfo (const char *dir, struct savedir_extrainfo **extra); + +/* savedir() is the 'new' interface, but the function has the same name + * as the function from findutils 4.1.7 and 4.1.20. + */ +struct savedir_dirinfo * xsavedir(const char *dir, int flags); +void free_dirinfo(struct savedir_dirinfo *p); + +#endif diff --git a/lib/strspn.c b/lib/strspn.c new file mode 100644 index 0000000..53f3a1f --- /dev/null +++ b/lib/strspn.c @@ -0,0 +1,41 @@ +/* strspn.c -- return numbers of chars at start of string in a class + Copyright (C) 1987, 1990, 2004 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include + + +#if defined HAVE_STRING_H +#include +#else +#include +#ifndef strchr +#define strchr index +#endif +#endif + +#if !defined(HAVE_STRSPN) +int +strspn (str, class) + char *str, *class; +{ + register char *st = str; + + while (*st && strchr (class, *st)) + ++st; + return st - str; +} +#endif diff --git a/lib/wait.h b/lib/wait.h new file mode 100644 index 0000000..94ccd43 --- /dev/null +++ b/lib/wait.h @@ -0,0 +1,40 @@ +/* wait.h -- POSIX macros for evaluating exit statuses + Copyright (C) 1990 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +#include /* For pid_t. */ +#if HAVE_SYS_WAIT_H +#include +#endif + +#ifndef WIFSTOPPED +#define WIFSTOPPED(w) (((w) & 0xff) == 0x7f) +#endif +#ifndef WIFSIGNALED +#define WIFSIGNALED(w) (((w) & 0xff) != 0x7f && ((w) & 0xff) != 0) +#endif +#ifndef WIFEXITED +#define WIFEXITED(w) (((w) & 0xff) == 0) +#endif + +#ifndef WSTOPSIG +#define WSTOPSIG(w) (((w) >> 8) & 0xff) +#endif +#ifndef WTERMSIG +#define WTERMSIG(w) ((w) & 0x7f) +#endif +#ifndef WEXITSTATUS +#define WEXITSTATUS(w) (((w) >> 8) & 0xff) +#endif diff --git a/lib/waitpid.c b/lib/waitpid.c new file mode 100644 index 0000000..58a2f2c --- /dev/null +++ b/lib/waitpid.c @@ -0,0 +1,78 @@ +/* Emulate waitpid on systems that just have wait. + Copyright 1994, 1995, 1998, 1999 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +#include + + +#include +#ifndef errno +extern int errno; +#endif + + +#if defined _MSC_VER || defined __MINGW32__ +/* Native Woe32 API. */ +#include +#else +/* Unix API. */ +#include "wait.h" +#endif + +#define WAITPID_CHILDREN 8 +static pid_t waited_pid[WAITPID_CHILDREN]; +static int waited_status[WAITPID_CHILDREN]; + +pid_t +waitpid (pid_t pid, int *stat_loc, int options) +{ + int i; + pid_t p; + + if (!options && (pid == -1 || 0 < pid)) + { + /* If we have already waited for this child, return it immediately. */ + for (i = 0; i < WAITPID_CHILDREN; i++) + { + p = waited_pid[i]; + if (p && (p == pid || pid == -1)) + { + waited_pid[i] = 0; + goto success; + } + } + + /* The child has not returned yet; wait for it, accumulating status. */ + for (i = 0; i < WAITPID_CHILDREN; i++) + if (! waited_pid[i]) + { + p = wait (&waited_status[i]); + if (p < 0) + return p; + if (p == pid || pid == -1) + goto success; + waited_pid[i] = p; + } + } + + /* We cannot emulate this wait call, e.g. because of too many children. */ + errno = EINVAL; + return -1; + +success: + if (stat_loc) + *stat_loc = waited_status[i]; + return p; +} diff --git a/locate/.cvsignore b/locate/.cvsignore new file mode 100644 index 0000000..03a3556 --- /dev/null +++ b/locate/.cvsignore @@ -0,0 +1,10 @@ +.deps +Makefile +Makefile.in +bigram +code +config.h.in +dblocation.texi +frcode +locate +updatedb diff --git a/locate/.gitignore b/locate/.gitignore new file mode 100644 index 0000000..3cbc456 --- /dev/null +++ b/locate/.gitignore @@ -0,0 +1,11 @@ +.deps +Makefile +Makefile.in +bigram +code +config.h.in +frcode +locate +updatedb +*~ + diff --git a/locate/Makefile.am b/locate/Makefile.am new file mode 100644 index 0000000..fd9f1f5 --- /dev/null +++ b/locate/Makefile.am @@ -0,0 +1,58 @@ +# The default database to build and search. +AUTOMAKE_OPTIONS = std-options +LOCATE_DB = $(localstatedir)/locatedb +localedir = $(datadir)/locale + +AM_INSTALLCHECK_STD_OPTIONS_EXEMPT = \ + frcode$(EXEEXT) \ + code$(EXEEXT) \ + bigram$(EXEEXT) +bin_PROGRAMS = locate +libexec_PROGRAMS = frcode code bigram +bin_SCRIPTS = updatedb +man_MANS = locate.1 updatedb.1 locatedb.5 +BUILT_SOURCES = dblocation.texi +EXTRA_DIST = locatedb.h updatedb.sh $(man_MANS) +CLEANFILES = updatedb dblocation.texi +locate_SOURCES = locate.c word_io.c +code_SOURCES = code.c word_io.c + +INCLUDES = -I$(top_srcdir)/lib -I../gnulib/lib -I$(top_srcdir)/gnulib/lib -I../intl -DLOCATE_DB=\"$(LOCATE_DB)\" -DLOCALEDIR=\"$(localedir)\" + +LDADD = ../lib/libfind.a ../gnulib/lib/libgnulib.a @INTLLIBS@ + +$(PROGRAMS) $(LIBPROGRAMS): ../lib/libfind.a ../gnulib/lib/libgnulib.a + +updatedb: updatedb.sh + rm -f $@ + find=`echo find|sed '$(transform)'`; \ + frcode=`echo frcode|sed '$(transform)'`; \ + bigram=`echo bigram|sed '$(transform)'`; \ + code=`echo code|sed '$(transform)'`; \ + sed \ + -e "s,@""bindir""@,$(bindir)," \ + -e "s,@""libexecdir""@,$(libexecdir)," \ + -e "s,@""LOCATE_DB""@,$(LOCATE_DB)," \ + -e "s,@""VERSION""@,@VERSION@," \ + -e "s,@""PACKAGE_NAME""@,@PACKAGE_NAME@," \ + -e "s,@""find""@,$${find}," \ + -e "s,@""frcode""@,$${frcode}," \ + -e "s,@""bigram""@,$${bigram}," \ + -e "s,@""code""@,$${code}," \ + -e "s,@""SORT""@,$(SORT)," \ + -e "s,@""SORT_SUPPORTS_Z""@,$(SORT_SUPPORTS_Z)," \ + $(srcdir)/updatedb.sh > $@ + chmod +x $@ + +install-data-hook: + $(top_srcdir)/build-aux/mkinstalldirs $(DESTDIR)$(localstatedir) + +dblocation.texi: Makefile + echo '@set LOCATE_DB $(LOCATE_DB)' > $@ + +SUBDIRS = . testsuite + +dist-hook: findutils-check-manpages + +findutils-check-manpages: + $(top_srcdir)/build-aux/man-lint.sh $(srcdir) $(man_MANS) diff --git a/locate/bigram.c b/locate/bigram.c new file mode 100644 index 0000000..c9d76cb --- /dev/null +++ b/locate/bigram.c @@ -0,0 +1,114 @@ +/* bigram -- list bigrams for locate + Copyright (C) 1994, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* Usage: bigram < text > bigrams + Use `code' to encode a file using this output. + + Read a file from stdin and write out the bigrams (pairs of + adjacent characters), one bigram per line, to stdout. To reduce + needless duplication in the output, it starts finding the + bigrams on each input line at the character where that line + first differs from the previous line (i.e., in the ASCII + remainder). Therefore, the input should be sorted in order to + get the least redundant output. + + Written by James A. Woods . + Modified by David MacKenzie . */ + +#include +#include + +#if defined HAVE_STRING_H || defined STDC_HEADERS +#include +#else +#include +#endif + +#ifdef STDC_HEADERS +#include +#endif +#include + +#include +#include "closeout.h" + +/* The name this program was run with. */ +char *program_name; + +/* Return the length of the longest common prefix of strings S1 and S2. */ + +static int +prefix_length (char *s1, char *s2) +{ + register char *start; + + for (start = s1; *s1 == *s2 && *s1 != '\0'; s1++, s2++) + ; + return s1 - start; +} + +int +main (int argc, char **argv) +{ + char *path; /* The current input entry. */ + char *oldpath; /* The previous input entry. */ + size_t pathsize, oldpathsize; /* Amounts allocated for them. */ + int line_len; /* Length of input line. */ + + program_name = argv[0]; + (void) argc; + atexit (close_stdout); + + pathsize = oldpathsize = 1026; /* Increased as necessary by getline. */ + path = xmalloc (pathsize); + oldpath = xmalloc (oldpathsize); + + /* Set to empty string, to force the first prefix count to 0. */ + oldpath[0] = '\0'; + + while ((line_len = getline (&path, &pathsize, stdin)) > 0) + { + register int count; /* The prefix length. */ + register int j; /* Index into input line. */ + + path[line_len - 1] = '\0'; /* Remove the newline. */ + + /* Output bigrams in the remainder only. */ + count = prefix_length (oldpath, path); + for (j = count; path[j] != '\0' && path[j + 1] != '\0'; j += 2) + { + putchar (path[j]); + putchar (path[j + 1]); + putchar ('\n'); + } + + { + /* Swap path and oldpath and their sizes. */ + char *tmppath = oldpath; + size_t tmppathsize = oldpathsize; + oldpath = path; + oldpathsize = pathsize; + path = tmppath; + pathsize = tmppathsize; + } + } + + free (path); + free (oldpath); + + return 0; +} diff --git a/locate/code.c b/locate/code.c new file mode 100644 index 0000000..f48885b --- /dev/null +++ b/locate/code.c @@ -0,0 +1,287 @@ +/* code -- bigram- and front-encode filenames for locate + Copyright (C) 1994, 2005, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* Compress a sorted list. + Works with `find' to encode a filename database to save space + and search time. + + Usage: + + bigram < file_list > bigrams + process-bigrams > most_common_bigrams + code most_common_bigrams < file_list > squeezed_list + + Uses `front compression' (see ";login:", March 1983, p. 8). + The output begins with the 128 most common bigrams. + After that, the output format is, for each line, + an offset (from the previous line) differential count byte + followed by a (partially bigram-encoded) ASCII remainder. + The output lines have no terminating byte; the start of the next line + is indicated by its first byte having a value <= 30. + + The encoding of the output bytes is: + + 0-28 likeliest differential counts + offset (14) to make nonnegative + 30 escape code for out-of-range count to follow in next halfword + 128-255 bigram codes (the 128 most common, as determined by `updatedb') + 32-127 single character (printable) ASCII remainder + + Written by James A. Woods . + Modified by David MacKenzie . */ + +#include +#include +#include +#include +#include +#include + + +#ifdef STDC_HEADERS +#include +#endif + +#if ENABLE_NLS +# include +# define _(Text) gettext (Text) +#else +# define _(Text) Text +#define textdomain(Domain) +#define bindtextdomain(Package, Directory) +#endif +#ifdef gettext_noop +# define N_(String) gettext_noop (String) +#else +/* See locate.c for explanation as to why not use (String) */ +# define N_(String) String +#endif + +#include "locatedb.h" +#include "closeout.h" +#include "xalloc.h" +#include "gnulib-version.h" +#include "progname.h" +#include "error.h" +#include "findutils-version.h" + +#ifndef ATTRIBUTE_NORETURN +# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) +#endif + + +/* The name this program was run with. */ +const char *program_name; + +/* The 128 most common bigrams in the file list, padded with NULs + if there are fewer. */ +static char bigrams[257] = {0}; + +/* Return the offset of PATTERN in STRING, or -1 if not found. */ + +static int +strindex (char *string, char *pattern) +{ + register char *s; + + for (s = string; *s != '\0'; s++) + /* Fast first char check. */ + if (*s == *pattern) + { + register char *p2 = pattern + 1, *s2 = s + 1; + while (*p2 != '\0' && *p2 == *s2) + p2++, s2++; + if (*p2 == '\0') + return s2 - strlen (pattern) - string; + } + return -1; +} + +/* Return the length of the longest common prefix of strings S1 and S2. */ + +static int +prefix_length (char *s1, char *s2) +{ + register char *start; + + for (start = s1; *s1 == *s2 && *s1 != '\0'; s1++, s2++) + ; + return s1 - start; +} + +extern char *version_string; + +static void +usage (FILE *stream) +{ + fprintf (stream, _("\ +Usage: %s [--version | --help]\n\ +or %s most_common_bigrams < file-list > locate-database\n"), + program_name, program_name); + fputs (_("\nReport bugs to .\n"), stream); +} + + +static void inerr (const char *filename) ATTRIBUTE_NORETURN; +static void outerr(void) ATTRIBUTE_NORETURN; + +static void +inerr(const char *filename) +{ + error(1, errno, "%s", filename); + /*NOTREACHED*/ + abort(); +} + +static void +outerr(void) +{ + error(1, errno, _("write error")); + /*NOTREACHED*/ + abort(); +} + + +int +main (int argc, char **argv) +{ + char *path; /* The current input entry. */ + char *oldpath; /* The previous input entry. */ + size_t pathsize, oldpathsize; /* Amounts allocated for them. */ + int count, oldcount, diffcount; /* Their prefix lengths & the difference. */ + char bigram[3]; /* Bigram to search for in table. */ + int code; /* Index of `bigram' in bigrams table. */ + FILE *fp; /* Most common bigrams file. */ + int line_len; /* Length of input line. */ + + set_program_name(argv[0]); + atexit (close_stdout); + + bigram[2] = '\0'; + + if (argc != 2) + { + usage(stderr); + return 2; + } + + if (0 == strcmp(argv[1], "--help")) + { + usage(stdout); + return 0; + } + else if (0 == strcmp(argv[1], "--version")) + { + display_findutils_version("code"); + return 0; + } + + fp = fopen (argv[1], "r"); + if (fp == NULL) + { + fprintf (stderr, "%s: ", argv[0]); + perror (argv[1]); + return 1; + } + + pathsize = oldpathsize = 1026; /* Increased as necessary by getline. */ + path = xmalloc (pathsize); + oldpath = xmalloc (oldpathsize); + + /* Set to empty string, to force the first prefix count to 0. */ + oldpath[0] = '\0'; + oldcount = 0; + + /* Copy the list of most common bigrams to the output, + padding with NULs if there are <128 of them. */ + if (NULL == fgets (bigrams, 257, fp)) + inerr(argv[1]); + + if (256 != fwrite (bigrams, 1, 256, stdout)) + outerr(); + + if (EOF == fclose (fp)) + inerr(argv[1]); + + while ((line_len = getline (&path, &pathsize, stdin)) > 0) + { + char *pp; + + path[line_len - 1] = '\0'; /* Remove newline. */ + + /* Squelch unprintable chars in path so as not to botch decoding. */ + for (pp = path; *pp != '\0'; pp++) + { + if (!(*pp >= 040 && *pp < 0177)) + *pp = '?'; + } + + count = prefix_length (oldpath, path); + diffcount = count - oldcount; + oldcount = count; + /* If the difference is small, it fits in one byte; + otherwise, two bytes plus a marker noting that fact. */ + if (diffcount < -LOCATEDB_OLD_OFFSET || diffcount > LOCATEDB_OLD_OFFSET) + { + if (EOF ==- putc (LOCATEDB_OLD_ESCAPE, stdout)) + outerr (); + + if (!putword (stdout, + diffcount+LOCATEDB_OLD_OFFSET, + GetwordEndianStateNative)) + outerr (); + } + else + { + if (EOF == putc (diffcount + LOCATEDB_OLD_OFFSET, stdout)) + outerr (); + } + + /* Look for bigrams in the remainder of the path. */ + for (pp = path + count; *pp != '\0'; pp += 2) + { + if (pp[1] == '\0') + { + /* No bigram is possible; only one char is left. */ + putchar (*pp); + break; + } + bigram[0] = *pp; + bigram[1] = pp[1]; + /* Linear search for specific bigram in string table. */ + code = strindex (bigrams, bigram); + if (code % 2 == 0) + putchar ((code / 2) | 0200); /* It's a common bigram. */ + else + fputs (bigram, stdout); /* Write the text as printable ASCII. */ + } + + { + /* Swap path and oldpath and their sizes. */ + char *tmppath = oldpath; + size_t tmppathsize = oldpathsize; + oldpath = path; + oldpathsize = pathsize; + path = tmppath; + pathsize = tmppathsize; + } + } + + free (path); + free (oldpath); + + return 0; +} diff --git a/locate/frcode.c b/locate/frcode.c new file mode 100644 index 0000000..23f9369 --- /dev/null +++ b/locate/frcode.c @@ -0,0 +1,363 @@ +/* frcode -- front-compress a sorted list + Copyright (C) 1994,2005,2006,2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* Usage: frcode < sorted-list > compressed-list + + Uses front compression (also known as incremental encoding); + see ";login:", March 1983, p. 8. + + The input is a sorted list of NUL-terminated strings (or + newline-terminated if the -0 option is not given). + + The output entries are in the same order as the input; each entry + consists of a signed offset-differential count byte (the additional + number of characters of prefix of the preceding entry to use beyond + the number that the preceding entry is using of its predecessor), + followed by a null-terminated ASCII remainder. + + If the offset-differential count is larger than can be stored + in a byte (+/-127), the byte has the value LOCATEDB_ESCAPE + and the count follows in a 2-byte word, with the high byte first + (network byte order). + + Example: + + Input, with NULs changed to newlines: + /usr/src + /usr/src/cmd/aardvark.c + /usr/src/cmd/armadillo.c + /usr/tmp/zoo + + Length of the longest prefix of the preceding entry to share: + 0 /usr/src + 8 /cmd/aardvark.c + 14 rmadillo.c + 5 tmp/zoo + + Output, with NULs changed to newlines and count bytes made printable: + 0 LOCATE02 + 0 /usr/src + 8 /cmd/aardvark.c + 6 rmadillo.c + -9 tmp/zoo + + (6 = 14 - 8, and -9 = 5 - 14) + + Written by James A. Woods . + Modified by David MacKenzie . + Modified by James Youngman . +*/ + +#include + + +#include +#include +#include +#include +#include +#include + +#if defined HAVE_STRING_H || defined STDC_HEADERS +#include +#else +#include +#endif + +#ifdef STDC_HEADERS +#include +#endif + +#if ENABLE_NLS +# include +# define _(Text) gettext (Text) +#else +# define _(Text) Text +#define textdomain(Domain) +#define bindtextdomain(Package, Directory) +#endif +#ifdef gettext_noop +# define N_(String) gettext_noop (String) +#else +/* We used to use (String) instead of just String, but apparently ISO C + * doesn't allow this (at least, that's what HP said when someone reported + * this as a compiler bug). This is HP case number 1205608192. See + * also http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11250 (which references + * ANSI 3.5.7p14-15). The Intel icc compiler also rejects constructs + * like: static const char buf[] = ("string"); + */ +# define N_(String) String +#endif + + +#include "locatedb.h" +#include +#include "error.h" +#include "closeout.h" +#include "findutils-version.h" + +char *xmalloc PARAMS((size_t)); + +/* The name this program was run with. */ +char *program_name; + +/* Write out a 16-bit int, high byte first (network byte order). + * Return true iff all went well. + */ +static int +put_short (int c, FILE *fp) +{ + /* XXX: The value of c may be negative. ANSI C 1989 (section 6.3.7) + * indicates that the result of shifting a negative value right is + * implementation defined. + */ + assert (c <= SHRT_MAX); + assert (c >= SHRT_MIN); + return (putc (c >> 8, fp) != EOF) && (putc (c, fp) != EOF); +} + +/* Return the length of the longest common prefix of strings S1 and S2. */ + +static int +prefix_length (char *s1, char *s2) +{ + register char *start; + int limit = INT_MAX; + for (start = s1; *s1 == *s2 && *s1 != '\0'; s1++, s2++) + { + /* Don't emit a prefix length that will not fit into + * our return type. + */ + if (0 == --limit) + break; + } + return s1 - start; +} + +static struct option const longopts[] = +{ + {"help", no_argument, NULL, 'h'}, + {"version", no_argument, NULL, 'v'}, + {"null", no_argument, NULL, '0'}, + {NULL, no_argument, NULL, 0} +}; + +extern char *version_string; + +/* The name this program was run with. */ +char *program_name; + + +static void +usage (FILE *stream) +{ + fprintf (stream, + _("Usage: %s [-0 | --null] [--version] [--help]\n"), + program_name); + fputs (_("\nReport bugs to .\n"), stream); +} + +static long +get_seclevel(char *s) +{ + long result; + char *p; + + /* Reset errno in oreder to be able to distinguish LONG_MAX/LONG_MIN + * from values whichare actually out of range + */ + errno = 0; + + result = strtol(s, &p, 10); + if ((0==result) && (p == optarg)) + { + error(1, 0, _("You need to specify a security level as a decimal integer.")); + /*NOTREACHED*/ + return -1; + } + else if ((LONG_MIN==result || LONG_MAX==result) && errno) + + { + error(1, 0, _("Security level %s is outside the convertible range."), s); + /*NOTREACHED*/ + return -1; + } + else if (*p) + { + /* Some suffix exists */ + error(1, 0, _("Security level %s has unexpected suffix %s."), s, p); + /*NOTREACHED*/ + return -1; + } + else + { + return result; + } +} + +static void +outerr(void) +{ + /* Issue the same error message as closeout() would. */ + error(1, errno, _("write error")); +} + +int +main (int argc, char **argv) +{ + char *path; /* The current input entry. */ + char *oldpath; /* The previous input entry. */ + size_t pathsize, oldpathsize; /* Amounts allocated for them. */ + int count, oldcount, diffcount; /* Their prefix lengths & the difference. */ + int line_len; /* Length of input line. */ + int delimiter = '\n'; + int optc; + int slocate_compat = 0; + long slocate_seclevel = 0L; + + program_name = argv[0]; + if (!program_name) + program_name = "frcode"; + atexit (close_stdout); + + pathsize = oldpathsize = 1026; /* Increased as necessary by getline. */ + path = xmalloc (pathsize); + oldpath = xmalloc (oldpathsize); + + oldpath[0] = 0; + oldcount = 0; + + + while ((optc = getopt_long (argc, argv, "hv0S:", longopts, (int *) 0)) != -1) + switch (optc) + { + case '0': + delimiter = 0; + break; + + case 'S': + slocate_compat = 1; + slocate_seclevel = get_seclevel(optarg); + if (slocate_seclevel < 0 || slocate_seclevel > 1) + { + error(1, 0, + _("slocate security level %ld is unsupported."), + slocate_seclevel); + } + break; + + case 'h': + usage (stdout); + return 0; + + case 'v': + display_findutils_version("frcode"); + return 0; + + default: + usage (stderr); + return 1; + } + + /* We expect to have no arguments. */ + if (optind != argc) + { + usage (stderr); + return 1; + } + + + if (slocate_compat) + { + fputc(slocate_seclevel ? '1' : '0', stdout); + fputc(0, stdout); + + } + else + { + /* GNU LOCATE02 format */ + if (fwrite (LOCATEDB_MAGIC, 1, sizeof (LOCATEDB_MAGIC), stdout) + != sizeof(LOCATEDB_MAGIC)) + { + error(1, errno, _("Failed to write to standard output")); + } + } + + + while ((line_len = getdelim (&path, &pathsize, delimiter, stdin)) > 0) + { + path[line_len - 1] = '\0'; /* FIXME temporary: nuke the newline. */ + + count = prefix_length (oldpath, path); + diffcount = count - oldcount; + if ( (diffcount > SHRT_MAX) || (diffcount < SHRT_MIN) ) + { + /* We do this to prevent overflow of the value we + * write with put_short() + */ + count = 0; + diffcount = (-oldcount); + } + oldcount = count; + + if (slocate_compat) + { + /* Emit no count for the first pathname. */ + slocate_compat = 0; + } + else + { + /* If the difference is small, it fits in one byte; + otherwise, two bytes plus a marker noting that fact. */ + if (diffcount < LOCATEDB_ONEBYTE_MIN + || diffcount > LOCATEDB_ONEBYTE_MAX) + { + if (EOF == putc (LOCATEDB_ESCAPE, stdout)) + outerr(); + if (!put_short (diffcount, stdout)) + outerr(); + } + else + { + if (EOF == putc (diffcount, stdout)) + outerr(); + } + } + + if ( (EOF == fputs (path + count, stdout)) + || (EOF == putc ('\0', stdout))) + { + outerr(); + } + + if (1) + { + /* Swap path and oldpath and their sizes. */ + char *tmppath = oldpath; + size_t tmppathsize = oldpathsize; + oldpath = path; + oldpathsize = pathsize; + path = tmppath; + pathsize = tmppathsize; + } + } + + free (path); + free (oldpath); + + return 0; +} diff --git a/locate/locate.1 b/locate/locate.1 new file mode 100644 index 0000000..d774e11 --- /dev/null +++ b/locate/locate.1 @@ -0,0 +1,259 @@ +.TH LOCATE 1 \" -*- nroff -*- +.SH NAME +locate \- list files in databases that match a pattern +.SH SYNOPSIS +.B locate +[\-d path | \-\-database=path] [\-e | \-E | \-\-[non\-]existing] [\-i +| \-\-ignore-case] [\-0 | \-\-null] [\-c | \-\-count] [\-w | \-\-wholename] +|\-b | \-\-basename] [\-l N | \-\-limit=N] [\-S | \-\-statistics] [\-r +| \-\-regex ] [\-\-max-database-age D] [\-P | \-H | \-\-nofollow] [\-L +| \-\-follow] [\-\-version] [\-A | \-\-all] [\-p | \-\-print] [\-\-help] pattern... +.SH DESCRIPTION +This manual page +documents the GNU version of +.BR locate . +For each given pattern, +.B locate +searches one or more databases of file names and displays the +file names that contain the pattern. Patterns can contain shell-style +metacharacters: `*', `?', and `[]'. The metacharacters do not treat +`/' or `.' specially. Therefore, a pattern `foo*bar' can match a +file name that contains `foo3/bar', and a pattern `*duck*' can match a +file name that contains `lake/.ducky'. Patterns that contain +metacharacters should be quoted to protect them from expansion by the +shell. +.P +If a pattern is a plain string \(em it contains no metacharacters \(em +.B locate +displays all file names in the database that contain that string +anywhere. If a pattern does contain metacharacters, +.B locate +only displays file names that match the pattern exactly. As a result, +patterns that contain metacharacters should usually begin with a `*', +and will most often end with one as well. The exceptions are patterns +that are intended to explicitly match the beginning or end of a file +name. +.P +The file name databases contain lists of files that were on the system +when the databases were last updated. The system administrator can +choose the file name of the default database, the frequency with which +the databases are updated, and the directories for which they contain +entries; see \fBupdatedb\fP(1). +.P +If +.BR locate 's +output is going to a terminal, unusual characters in the output are +escaped in the same way as for the \-print action of the +.B find +command. If the output is not going to a terminal, file names are +printed exactly as-is. + +.SH OPTIONS +.TP +.I "\-0, \-\-null" +Use ASCII NUL as a separator, instead of newline. +.TP +.I "\-A, \-\-all" +Print only names which match all non-option arguments, not those matching +one or more non-option arguments. +.TP +.I "\-b, \-\-basename" +Results are considered to match if the pattern specified matches the +final component of the name of a file as listed in the database. +This final component is usually referred to as the `base name'. +.TP +.I "\-c, \-\-count" +Instead of printing the matched filenames, just print the total +number of matches we found, unless \-\-\fIprint\fP (\-p) is also present. +.TP +.I "\-d \fIpath\fP, \-\-database=\fIpath\fP" +Instead of searching the default file name database, search the file +name databases in \fIpath\fP, which is a colon-separated list of +database file names. You can also use the environment variable +.B LOCATE_PATH +to set the list of database files to search. +The option overrides the environment variable if both are used. Empty +elements in the path are taken to be synonyms for the file name of the +default database. +A database can be supplied on stdin, using `\-' as an element +of \fIpath\fP. If more than one element of \fIpath\fP is `\-', +later instances are ignored (and a warning message is printed). +.IP +The file name database format changed starting with GNU +.B find +and +.B locate +version 4.0 to allow machines with different byte orderings to share +the databases. This version of +.B locate +can automatically recognize and read databases produced for older +versions of GNU +.B locate +or Unix versions of +.B locate +or +.BR find . +Support for the old locate database format will be discontinued in a +future release. +.TP +.I "\-e, \-\-existing" +Only print out such names that currently exist (instead of such names +that existed when the database was created). +Note that this may slow down the program a lot, if there are many matches +in the database. If you are using this option within a program, +please note that it is possible for the file to be deleted after +.B locate +has checked that it exists, but before you use it. +.TP +.I "\-E, \-\-non\-existing" +Only print out such names that currently do not exist (instead of such names +that existed when the database was created). +Note that this may slow down the program a lot, if there are many matches +in the database. +.TP +.I "\-\-help" +Print a summary of the options to +.B locate +and exit. +.TP +.I "\-i, \-\-ignore-case" +Ignore case distinctions in both the pattern and the file names. +.TP +.I "\-l N, \-\-limit=N" +Limit the number of matches to N. If a limit is set via this option, +the number of results printed for the \-c option will never be larger +than this number. +.TP +.I "\-L, \-\-follow" +If testing for the existence of files (with the \-e or \-E options), +consider broken symbolic links to be non-existing. This is the default. +.TP +.I "\-\-max-database-age D" +Normally, +.B locate +will issue a warning message when it searches a database which is more +than 8 days old. This option changes that value to something other +than 8. The effect of specifying a negative value is undefined. +.TP +.I "\-m, \-\-mmap" +Accepted but does nothing, for compatibility with BSD +.BR locate . +.TP +.I "\-P, \-H, \-\-nofollow" +If testing for the existence of files (with the \-e or \-E options), treat +broken symbolic links as if they were existing files. The \-H +form of this option is provided purely for similarity with +.BR find ; +the use of \-P is recommended over \-H. +.TP +.I "\-p, \-\-print" +Print search results when they normally would not, because of the presence +of \-\-statistics (\-S) or \-\-count (\-c). +.TP +.I "\-r, \-\-regex " +The pattern specified on the command line is understood to be a +regular expression, as opposed to a glob pattern. The Regular +expressions work in the same was as in +.B emacs +and +.BR find , +except for the fact that "." will match a newline. +Filenames whose full paths match the specified regular expression are +printed (or, in the case of the \-c option, counted). If you wish to +anchor your regular expression at the ends of the full path name, then +as is usual with regular expressions, you should use the characters ^ +and $ to signify this. +.TP +.I "\-s, \-\-stdio" +Accepted but does nothing, for compatibility with BSD +.BR locate . +.TP +.I "\-S, \-\-statistics" +Print various statistics about each locate database and then exit +without performing a search, unless non-option arguments are given. +For compatibility with BSD, \-S is accepted as a synonym +for \-\-statistics. However, the ouptut of +.B locate \-S +is different for the GNU and BSD implementations of +.BR locate . +.TP +.I "\-\-version" +Print the version number of +.B locate +and exit. +.TP +.I "\-w, \-\-wholename" +Match against the whole name of the file as listed in the database. +This is the default. +.SH ENVIRONMENT +.TP +.B LOCATE_PATH +Colon-separated list of databases to search. If the value has a +leading or trailing colon, or has two colons in a row, you may get +results that vary between different versions of +.BR locate . + +.SH "SEE ALSO" +\fBfind\fP(1), \fBlocatedb\fP(5), \fBupdatedb\fP(1), \fBxargs\fP(1), +\fBglob\fP(3), +\fBFinding Files\fP (on-line in Info, or printed) +.SH "HISTORY" +The +.B locate +program started life as the BSD fast find program, contributed to BSD +by James A. Woods. This was described by his paper +.I Finding Files Fast +which was published in Usenix +.IR ;login: , +Vol 8, No 1, February/March, 1983, pp. 8-10. When the +.B find +program began to assume a default +.B -print +action if no action was specified, this changed the interpretation of +.B find +.BR pattern . +The BSD developers therefore moved the fast find functionality into +.BR locate . +The GNU implementation of +.B locate +appears to be derived from the same code. +.P +Significant changes to +.B locate +in reverse order: +.TS +tab(|); +LL. +4.3.7 | Byte-order independent support for old database format +4.3.3 | locate \fI\-i\fR supports multi-byte characters correctly + | Introduced \fI\-\-max_db_age\fR +4.3.2 | Support for the slocate database format +4.2.22| Introduced the \fI\-\-all\fR option +4.2.15| Introduced the \fI\-\-regex\fR option +4.2.14| Introduced options \fI\-L, \-P, \-H\fR +4.2.12| Empty items in \fBLOCATE_PATH\fR now indicate the default database +4.2.11| Introduced the \fI\-\-statistics\fR option +4.2.4 | Introduced \fI\-\-count\fR and \fI\-\-limit\fR +4.2.0 | Glob characters cause matching against the whole file name +4.0 | Introduced the LOCATE02 database format +3.7 | Locate can search multiple databases +.TE +.SH "BUGS" +.P +The locate database correctly handles filenames containing newlines, +but only if the system's sort command has a working +\-z +option. If you suspect that +.B locate +may need to return filenames containing newlines, consider using its +.I \-\-null +option. +.P +The best way to report a bug is to use the form at +http://savannah.gnu.org/bugs/?group=findutils. +The reason for this is that you will then be able to track progress in +fixing the problem. Other comments about \fBlocate\fP(1) and about +the findutils package in general can be sent to the +.I bug-findutils +mailing list. To join the list, send email to +.IR bug-findutils-request@gnu.org . diff --git a/locate/locate.c b/locate/locate.c new file mode 100644 index 0000000..a55d807 --- /dev/null +++ b/locate/locate.c @@ -0,0 +1,1936 @@ +/* locate -- search databases for filenames that match patterns + Copyright (C) 1994, 1996, 1998, 1999, 2000, 2003, + 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* Usage: locate [options] pattern... + + Scan a pathname list for the full pathname of a file, given only + a piece of the name (possibly containing shell globbing metacharacters). + The list has been processed with front-compression, which reduces + the list size by a factor of 4-5. + Recognizes two database formats, old and new. The old format is + bigram coded, which reduces space by a further 20-25% and uses the + following encoding of the database bytes: + + 0-28 likeliest differential counts + offset (14) to make nonnegative + 30 escape code for out-of-range count to follow in next halfword + 128-255 bigram codes (the 128 most common, as determined by `updatedb') + 32-127 single character (printable) ASCII remainder + + Earlier versions of GNU locate used to use a novel two-tiered + string search technique, which was described in Usenix ;login:, Vol + 8, No 1, February/March, 1983, p. 8. + + However, latterly code changes to provide additional functionality + became dificult to make with the existing reading scheme, and so + we no longer perform the matching as efficiently as we used to (that is, + we no longer use the same algorithm). + + The old algorithm was: + + First, match a metacharacter-free subpattern and a partial + pathname BACKWARDS to avoid full expansion of the pathname list. + The time savings is 40-50% over forward matching, which cannot + efficiently handle overlapped search patterns and compressed + path remainders. + + Then, match the actual shell glob pattern (if in this form) + against the candidate pathnames using the slower shell filename + matching routines. + + + Written by James A. Woods . + Modified by David MacKenzie . + Additional work by James Youngman and Bas van Gompel. +*/ + +#include + +#include +#include +#include +#include +#include /* for setgroups() */ +#include +#include +#include +#include +#include + +#include /* for bool/boolean */ + +/* The presence of unistd.h is assumed by gnulib these days, so we + * might as well assume it too. + */ +/* We need for isatty(). */ +#include + +#include + +#define NDEBUG +#include +#include + + +#ifdef STDC_HEADERS +#include +#endif + +#include + +#ifdef HAVE_LOCALE_H +#include +#endif + +#if ENABLE_NLS +# include +# define _(Text) gettext (Text) +#else +# define _(Text) Text +#define textdomain(Domain) +#define bindtextdomain(Package, Directory) +#endif +#ifdef gettext_noop +# define N_(String) gettext_noop (String) +#else +/* We used to use (String) instead of just String, but apparently ISO C + * doesn't allow this (at least, that's what HP said when someone reported + * this as a compiler bug). This is HP case number 1205608192. See + * also http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11250 (which references + * ANSI 3.5.7p14-15). The Intel icc compiler also rejects constructs + * like: static const char buf[] = ("string"); + */ +# define N_(String) String +#endif + +#include "locatedb.h" +#include "xalloc.h" +#include "error.h" +#include "human.h" +#include "dirname.h" +#include "closeout.h" +#include "nextelem.h" +#include "regex.h" +#include "quote.h" +#include "quotearg.h" +#include "printquoted.h" +#include "regextype.h" +#include "findutils-version.h" + +/* Note that this evaluates Ch many times. */ +#ifdef _LIBC +# define TOUPPER(Ch) toupper (Ch) +# define TOLOWER(Ch) tolower (Ch) +#else +# define TOUPPER(Ch) (islower (Ch) ? toupper (Ch) : (Ch)) +# define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) +#endif + +/* typedef enum {false, true} boolean; */ + +/* Warn if a database is older than this. 8 days allows for a weekly + update that takes up to a day to perform. */ +static unsigned int warn_number_units = 8; + +/* Printable name of units used in WARN_SECONDS */ +static const char warn_name_units[] = N_("days"); +#define SECONDS_PER_UNIT (60 * 60 * 24) + +enum visit_result + { + VISIT_CONTINUE = 1, /* please call the next visitor */ + VISIT_ACCEPTED = 2, /* accepted, call no futher callbacks for this file */ + VISIT_REJECTED = 4, /* rejected, process next file. */ + VISIT_ABORT = 8 /* rejected, process no more files. */ + }; + +enum ExistenceCheckType + { + ACCEPT_EITHER, /* Corresponds to lack of -E/-e option */ + ACCEPT_EXISTING, /* Corresponds to option -e */ + ACCEPT_NON_EXISTING /* Corresponds to option -E */ + }; + +/* Check for existence of files before printing them out? */ +enum ExistenceCheckType check_existence = ACCEPT_EITHER; + +static int follow_symlinks = 1; + +/* What to separate the results with. */ +static int separator = '\n'; + +static struct quoting_options * quote_opts = NULL; +static bool stdout_is_a_tty; +static bool print_quoted_filename; +static bool results_were_filtered; + +static const char *selected_secure_db = NULL; + + +/* Change the number of days old the database can be + * before we complain about it. + */ +static void +set_max_db_age(const char *s) +{ + char *end; + unsigned long int val; + /* XXX: we ignore the case where the input is negative, which is allowed(!). */ + + if (0 == *s) + { + error(1, 0, + _("The argument for option --max-database-age must not be empty")); + } + + + /* We have to set errno here, otherwise when the function returns ULONG_MAX, + * we would not be able to tell if that is the correct answer, or whether it + * signifies an error. + */ + errno = 0; + val = strtoul(s, &end, 10); + + /* Diagnose number too large, non-numbes and trailing junk. */ + if ((ULONG_MAX == val && ERANGE == errno) || + (0 == val && EINVAL == errno)) + { + error(1, errno, + _("Invalid argument %s for option --max-database-age"), + quotearg_n_style(0, locale_quoting_style, s)); + } + else if (*end) + { + /* errno wasn't set, don't print its message */ + error(1, 0, + _("Invalid argument %s for option --max-database-age"), + quotearg_n_style(0, locale_quoting_style, s)); + } + else + { + warn_number_units = val; + } +} + + + +/* Read in a 16-bit int, high byte first (network byte order). */ + +static short +get_short (FILE *fp) +{ + + register short x; + + x = (signed char) fgetc (fp) << 8; + x |= (fgetc (fp) & 0xff); + return x; +} + +const char * const metacharacters = "*?[]\\"; + +/* Return nonzero if S contains any shell glob characters. + */ +static int +contains_metacharacter(const char *s) +{ + if (NULL == strpbrk(s, metacharacters)) + return 0; + else + return 1; +} + +/* locate_read_str() + * + * Read bytes from FP into the buffer at offset OFFSET in (*BUF), + * until we reach DELIMITER or end-of-file. We reallocate the buffer + * as necessary, altering (*BUF) and (*SIZ) as appropriate. No assumption + * is made regarding the content of the data (i.e. the implementation is + * 8-bit clean, the only delimiter is DELIMITER). + * + * Written Fri May 23 18:41:16 2003 by James Youngman, because getstr() + * has been removed from gnulib. + * + * We call the function locate_read_str() to avoid a name clash with the curses + * function getstr(). + */ +static int +locate_read_str(char **buf, size_t *siz, FILE *fp, int delimiter, int offs) +{ + char * p = NULL; + size_t sz = 0; + int nread; + size_t needed; + + nread = getdelim(&p, &sz, delimiter, fp); + if (nread >= 0) + { + assert(p != NULL); + + needed = offs + nread + 1u; + if (needed > (*siz)) + { + char *pnew = realloc(*buf, needed); + if (NULL == pnew) + { + return -1; /* FAIL */ + } + else + { + *siz = needed; + *buf = pnew; + } + } + memcpy((*buf)+offs, p, nread); + free(p); + } + return nread; +} + + +struct locate_limits +{ + uintmax_t limit; + uintmax_t items_accepted; +}; +static struct locate_limits limits; + + +struct locate_stats +{ + uintmax_t compressed_bytes; + uintmax_t total_filename_count; + uintmax_t total_filename_length; + uintmax_t whitespace_count; + uintmax_t newline_count; + uintmax_t highbit_filename_count; +}; +static struct locate_stats statistics; + + +struct regular_expression +{ + struct re_pattern_buffer regex; /* for --regex */ +}; + + +struct process_data +{ + int c; /* An input byte. */ + char itemcount; /* Indicates we're at the beginning of an slocate db. */ + int count; /* The length of the prefix shared with the previous database entry. */ + int len; + char *original_filename; /* The current input database entry. */ + size_t pathsize; /* Amount allocated for it. */ + char *munged_filename; /* path or basename(path) */ + FILE *fp; /* The pathname database. */ + const char *dbfile; /* Its name, or "" */ + int slocatedb_format; /* Allows us to cope with slocate's format variant */ + GetwordEndianState endian_state; + /* for the old database format, + the first and second characters of the most common bigrams. */ + char bigram1[128]; + char bigram2[128]; +}; + + +typedef int (*visitfunc)(struct process_data *procdata, + void *context); + +struct visitor +{ + visitfunc inspector; + void * context; + struct visitor *next; +}; + + +static struct visitor *inspectors = NULL; +static struct visitor *lastinspector = NULL; +static struct visitor *past_pat_inspector = NULL; + +static inline int visit(const struct visitor *p, + int accept_flags, + struct process_data *procdata, + const struct visitor * const stop) +{ + register int result = accept_flags; + while ( (accept_flags & result) && (stop != p) ) + { + result = (p->inspector)(procdata, p->context); + p = p->next; + } + return result; +} + +/* 0 or 1 pattern(s) */ +static int +process_simple(struct process_data *procdata) +{ + return visit(inspectors, (VISIT_CONTINUE|VISIT_ACCEPTED), procdata, NULL); +} + +/* Accept if any pattern matches. */ +static int +process_or (struct process_data *procdata) +{ + int result; + + result = visit(inspectors, (VISIT_CONTINUE|VISIT_REJECTED), procdata, past_pat_inspector); + if (result == VISIT_CONTINUE) + result = VISIT_REJECTED; + if (result & (VISIT_ABORT | VISIT_REJECTED)) + return result; + + result = visit(past_pat_inspector, VISIT_CONTINUE, procdata, NULL); + if (VISIT_CONTINUE == result) + return VISIT_ACCEPTED; + else + return result; +} + +/* Accept if all pattern match. */ +static int +process_and (struct process_data *procdata) +{ + int result; + + result = visit(inspectors, (VISIT_CONTINUE|VISIT_ACCEPTED), procdata, past_pat_inspector); + if (result == VISIT_CONTINUE) + result = VISIT_REJECTED; + if (result & (VISIT_ABORT | VISIT_REJECTED)) + return result; + + result = visit(past_pat_inspector, VISIT_CONTINUE, procdata, NULL); + if (VISIT_CONTINUE == result) + return VISIT_ACCEPTED; + else + return result; +} + +typedef int (*processfunc)(struct process_data *procdata); + +static processfunc mainprocessor = NULL; + +static void +add_visitor(visitfunc fn, void *context) +{ + struct visitor *p = xmalloc(sizeof(struct visitor)); + p->inspector = fn; + p->context = context; + p->next = NULL; + + if (NULL == lastinspector) + { + lastinspector = inspectors = p; + } + else + { + lastinspector->next = p; + lastinspector = p; + } +} + +static int +visit_justprint_quoted(struct process_data *procdata, void *context) +{ + (void) context; + print_quoted (stdout, quote_opts, stdout_is_a_tty, + "%s", + procdata->original_filename); + putchar(separator); + return VISIT_CONTINUE; +} + +static int +visit_justprint_unquoted(struct process_data *procdata, void *context) +{ + (void) context; + fputs(procdata->original_filename, stdout); + putchar(separator); + return VISIT_CONTINUE; +} + +static void +toolong (struct process_data *procdata) +{ + error (1, 0, + _("locate database %s contains a " + "filename longer than locate can handle"), + procdata->dbfile); +} + +static void +extend (struct process_data *procdata, size_t siz1, size_t siz2) +{ + /* Figure out if the addition operation is safe before performing it. */ + if (SIZE_MAX - siz1 < siz2) + { + toolong (procdata); + } + else if (procdata->pathsize < (siz1+siz2)) + { + procdata->pathsize = siz1+siz2; + procdata->original_filename = x2nrealloc (procdata->original_filename, + &procdata->pathsize, + 1); + } +} + +static int +visit_old_format(struct process_data *procdata, void *context) +{ + register size_t i; + (void) context; + + if (EOF == procdata->c) + return VISIT_ABORT; + + /* Get the offset in the path where this path info starts. */ + if (procdata->c == LOCATEDB_OLD_ESCAPE) + { + int minval, maxval; + int word; + + procdata->count -= LOCATEDB_OLD_OFFSET; + minval = (0 - procdata->count); + if (procdata->count >= 0) + maxval = (procdata->len - procdata->count); + else + maxval = (procdata->len - 0); + word = getword(procdata->fp, procdata->dbfile, + minval, maxval, &procdata->endian_state); + procdata->count += word; + assert(procdata->count >= 0); + } + else + { + procdata->count += (procdata->c - LOCATEDB_OLD_OFFSET); + assert(procdata->count >= 0); + } + + /* Overlay the old path with the remainder of the new. Read + * more data until we get to the next filename. + */ + for (i=procdata->count; + (procdata->c = getc (procdata->fp)) > LOCATEDB_OLD_ESCAPE;) + { + if (EOF == procdata->c) + break; + + if (procdata->c < 0200) + { + /* An ordinary character. */ + extend (procdata, i, 1u); + procdata->original_filename[i++] = procdata->c; + } + else + { + /* Bigram markers have the high bit set. */ + extend (procdata, i, 2u); + procdata->c &= 0177; + procdata->original_filename[i++] = procdata->bigram1[procdata->c]; + procdata->original_filename[i++] = procdata->bigram2[procdata->c]; + } + } + + /* Consider the case where we executed the loop body zero times; we + * still need space for the terminating null byte. + */ + extend (procdata, i, 1u); + procdata->original_filename[i] = 0; + procdata->len = i; + procdata->munged_filename = procdata->original_filename; + + return VISIT_CONTINUE; +} + +static int +visit_locate02_format(struct process_data *procdata, void *context) +{ + register char *s; + int nread; + (void) context; + + if (procdata->slocatedb_format) + { + if (procdata->itemcount == 0) + { + ungetc(procdata->c, procdata->fp); + procdata->count = 0; + procdata->len = 0; + } + else if (procdata->itemcount == 1) + { + procdata->count = procdata->len-1; + } + else + { + if (procdata->c == LOCATEDB_ESCAPE) + procdata->count += (short)get_short (procdata->fp); + else if (procdata->c > 127) + procdata->count += procdata->c - 256; + else + procdata->count += procdata->c; + } + } + else + { + if (procdata->c == LOCATEDB_ESCAPE) + procdata->count += (short)get_short (procdata->fp); + else if (procdata->c > 127) + procdata->count += procdata->c - 256; + else + procdata->count += procdata->c; + } + + if (procdata->count > procdata->len || procdata->count < 0) + { + /* This should not happen generally , but since we're + * reading in data which is outside our control, we + * cannot prevent it. + */ + error(1, 0, _("locate database %s is corrupt or invalid"), + quotearg_n_style(0, locale_quoting_style, procdata->dbfile)); + } + + /* Overlay the old path with the remainder of the new. */ + nread = locate_read_str (&procdata->original_filename, + &procdata->pathsize, + procdata->fp, 0, procdata->count); + if (nread < 0) + return VISIT_ABORT; + procdata->c = getc (procdata->fp); + procdata->len = procdata->count + nread; + s = procdata->original_filename + procdata->len - 1; /* Move to the last char in path. */ + assert (s[0] != '\0'); + assert (s[1] == '\0'); /* Our terminator. */ + assert (s[2] == '\0'); /* Added by locate_read_str. */ + + procdata->munged_filename = procdata->original_filename; + + if (procdata->slocatedb_format) + { + /* Don't increment indefinitely, it might overflow. */ + if (procdata->itemcount < 6) + { + ++(procdata->itemcount); + } + } + + + return VISIT_CONTINUE; +} + +static int +visit_basename(struct process_data *procdata, void *context) +{ + (void) context; + procdata->munged_filename = last_component (procdata->original_filename); + + return VISIT_CONTINUE; +} + + +/* visit_existing_follow implements -L -e */ +static int +visit_existing_follow(struct process_data *procdata, void *context) +{ + struct stat st; + (void) context; + + /* munged_filename has been converted in some way (to lower case, + * or is just the base name of the file), and original_filename has not. + * Hence only original_filename is still actually the name of the file + * whose existence we would need to check. + */ + if (stat(procdata->original_filename, &st) != 0) + { + return VISIT_REJECTED; + } + else + { + return VISIT_CONTINUE; + } +} + +/* visit_non_existing_follow implements -L -E */ +static int +visit_non_existing_follow(struct process_data *procdata, void *context) +{ + struct stat st; + (void) context; + + /* munged_filename has been converted in some way (to lower case, + * or is just the base name of the file), and original_filename has not. + * Hence only original_filename is still actually the name of the file + * whose existence we would need to check. + */ + if (stat(procdata->original_filename, &st) == 0) + { + return VISIT_REJECTED; + } + else + { + return VISIT_CONTINUE; + } +} + +/* visit_existing_nofollow implements -P -e */ +static int +visit_existing_nofollow(struct process_data *procdata, void *context) +{ + struct stat st; + (void) context; + + /* munged_filename has been converted in some way (to lower case, + * or is just the base name of the file), and original_filename has not. + * Hence only original_filename is still actually the name of the file + * whose existence we would need to check. + */ + if (lstat(procdata->original_filename, &st) != 0) + { + return VISIT_REJECTED; + } + else + { + return VISIT_CONTINUE; + } +} + +/* visit_non_existing_nofollow implements -P -E */ +static int +visit_non_existing_nofollow(struct process_data *procdata, void *context) +{ + struct stat st; + (void) context; + + /* munged_filename has been converted in some way (to lower case, + * or is just the base name of the file), and original_filename has not. + * Hence only original_filename is still actually the name of the file + * whose existence we would need to check. + */ + if (lstat(procdata->original_filename, &st) == 0) + { + return VISIT_REJECTED; + } + else + { + return VISIT_CONTINUE; + } +} + +static int +visit_substring_match_nocasefold_wide(struct process_data *procdata, void *context) +{ + const char *pattern = context; + + if (NULL != mbsstr(procdata->munged_filename, pattern)) + return VISIT_ACCEPTED; + else + return VISIT_REJECTED; +} + +static int +visit_substring_match_nocasefold_narrow(struct process_data *procdata, void *context) +{ + const char *pattern = context; + assert(MB_CUR_MAX == 1); + if (NULL != strstr(procdata->munged_filename, pattern)) + return VISIT_ACCEPTED; + else + return VISIT_REJECTED; +} + +static int +visit_substring_match_casefold_wide(struct process_data *procdata, void *context) +{ + const char *pattern = context; + + if (NULL != mbscasestr(procdata->munged_filename, pattern)) + return VISIT_ACCEPTED; + else + return VISIT_REJECTED; +} + + +static int +visit_substring_match_casefold_narrow(struct process_data *procdata, void *context) +{ + const char *pattern = context; + + assert(MB_CUR_MAX == 1); + if (NULL != strcasestr(procdata->munged_filename, pattern)) + return VISIT_ACCEPTED; + else + return VISIT_REJECTED; +} + + +static int +visit_globmatch_nofold(struct process_data *procdata, void *context) +{ + const char *glob = context; + if (fnmatch(glob, procdata->munged_filename, 0) != 0) + return VISIT_REJECTED; + else + return VISIT_ACCEPTED; +} + + +static int +visit_globmatch_casefold(struct process_data *procdata, void *context) +{ + const char *glob = context; + if (fnmatch(glob, procdata->munged_filename, FNM_CASEFOLD) != 0) + return VISIT_REJECTED; + else + return VISIT_ACCEPTED; +} + + +static int +visit_regex(struct process_data *procdata, void *context) +{ + struct regular_expression *p = context; + const size_t len = strlen(procdata->munged_filename); + + int rv = re_search (&p->regex, procdata->munged_filename, + len, 0, len, + (struct re_registers *) NULL); + if (rv < 0) + { + return VISIT_REJECTED; /* no match (-1), or internal error (-2) */ + } + else + { + return VISIT_ACCEPTED; /* match */ + } +} + + +static int +visit_stats(struct process_data *procdata, void *context) +{ + struct locate_stats *p = context; + size_t len = strlen(procdata->original_filename); + const char *s; + int highbit, whitespace, newline; + + ++(p->total_filename_count); + p->total_filename_length += len; + + highbit = whitespace = newline = 0; + for (s=procdata->original_filename; *s; ++s) + { + if ( (int)(*s) & 128 ) + highbit = 1; + if ('\n' == *s) + { + newline = whitespace = 1; + } + else if (isspace((unsigned char)*s)) + { + whitespace = 1; + } + } + + if (highbit) + ++(p->highbit_filename_count); + if (whitespace) + ++(p->whitespace_count); + if (newline) + ++(p->newline_count); + + return VISIT_CONTINUE; +} + + +static int +visit_limit(struct process_data *procdata, void *context) +{ + struct locate_limits *p = context; + + (void) procdata; + + if (++p->items_accepted >= p->limit) + return VISIT_ABORT; + else + return VISIT_CONTINUE; +} + +static int +visit_count(struct process_data *procdata, void *context) +{ + struct locate_limits *p = context; + + (void) procdata; + + ++p->items_accepted; + return VISIT_CONTINUE; +} + +/* Emit the statistics. + */ +static void +print_stats(int argc, size_t database_file_size) +{ + char hbuf[LONGEST_HUMAN_READABLE + 1]; + + printf(_("Locate database size: %s bytes\n"), + human_readable ((uintmax_t) database_file_size, + hbuf, human_ceiling, 1, 1)); + + printf( (results_were_filtered ? + _("Matching Filenames: %s ") : + _("All Filenames: %s ")), + human_readable (statistics.total_filename_count, + hbuf, human_ceiling, 1, 1)); + printf(_("with a cumulative length of %s bytes"), + human_readable (statistics.total_filename_length, + hbuf, human_ceiling, 1, 1)); + + printf(_("\n\tof which %s contain whitespace, "), + human_readable (statistics.whitespace_count, + hbuf, human_ceiling, 1, 1)); + printf(_("\n\t%s contain newline characters, "), + human_readable (statistics.newline_count, + hbuf, human_ceiling, 1, 1)); + printf(_("\n\tand %s contain characters with the high bit set.\n"), + human_readable (statistics.highbit_filename_count, + hbuf, human_ceiling, 1, 1)); + + if (!argc) + { + if (results_were_filtered) + { + printf(_("Some filenames may have been filtered out, " + "so we cannot compute the compression ratio.\n")); + } + else + { + if (statistics.total_filename_length) + { + /* A negative compression ratio just means that the + * compressed database is larger than the list of + * filenames. This can happen for example for + * old-format databases containing a small list of short + * filenames, because the bigram list is 256 bytes. + */ + printf(_("Compression ratio %4.2f%% (higher is better)\n"), + 100.0 * ((double)statistics.total_filename_length + - (double) database_file_size) + / (double) statistics.total_filename_length); + } + else + { + printf(_("Compression ratio is undefined\n")); + } + } + } + printf("\n"); +} + +/* + * Return nonzero if the data we read in indicates that we are + * looking at a LOCATE02 locate database. + */ +static int +looking_at_gnu_locatedb (const char *data, size_t len) +{ + if (len < sizeof (LOCATEDB_MAGIC)) + return 0; + else if (0 == memcmp (data, LOCATEDB_MAGIC, sizeof (LOCATEDB_MAGIC))) + return 1; /* We saw the magic byte sequence */ + else + return 0; +} + +/* + * Return nonzero if the data we read in indicates that we are + * looking at an slocate database. + */ +static int +looking_at_slocate_locatedb (const char *filename, + const char *data, + size_t len, + int *seclevel) +{ + assert(len <= 2); + + if (len < 2) + { + return 0; + } + else + { + /* Check that the magic number is a one-byte string */ + if (0 == data[1]) + { + if (isdigit((unsigned char)data[0])) + { + /* looks promising. */ + *seclevel = (data[0] - '0'); + + if (*seclevel > 1) + { + /* Hmm, well it's probably an slocate database + * of some awsomely huge security level, like 2. + * We don't know how to handle those. + */ + error(0, 0, + _("locate database %s looks like an slocate " + "database but it seems to have security level %c, " + "which GNU findutils does not currently support"), + quotearg_n_style(0, locale_quoting_style, filename), + data[1]); + return 1; + } + else + { + return 1; + } + } + else + { + /* Not a digit. */ + return 0; + } + } + else + { + /* Definitely not slocate. */ + return 0; + } + } +} + + +static int +i_am_little_endian(void) +{ + union + { + unsigned char uch[4]; + unsigned int ui; + } u; + u.ui = 0u; + u.uch[0] = 1; + u.uch[1] = u.uch[2] = u.uch[3] = 0; + return u.ui == 1; +} + + + + +/* Print or count the entries in DBFILE that match shell globbing patterns in + ARGV. Return the number of entries matched. */ + +static unsigned long +search_one_database (int argc, + char **argv, + const char *dbfile, + FILE *fp, + off_t filesize, + int ignore_case, + int enable_print, + int basename_only, + int use_limit, + struct locate_limits *plimit, + int stats, + int op_and, + int regex, + int regex_options) +{ + char *pathpart; /* A pattern to consider. */ + int argn; /* Index to current pattern in argv. */ + int nread; /* number of bytes read from an entry. */ + struct process_data procdata; /* Storage for data shared with visitors. */ + int slocate_seclevel; + int oldformat; + struct visitor* pvis; /* temp for determining past_pat_inspector. */ + const char *format_name; + enum ExistenceCheckType do_check_existence; + + + /* We may turn on existence checking for a given database. + * We ensure that we can return to the previous behaviour + * by using two variables, do_check_existence (which we act on) + * and check_existence (whcih indicates the default before we + * adjust it on the bassis of what kind of database we;re using + */ + do_check_existence = check_existence; + + + if (ignore_case) + regex_options |= RE_ICASE; + + oldformat = 0; + procdata.endian_state = GetwordEndianStateInitial; + procdata.len = procdata.count = 0; + procdata.slocatedb_format = 0; + procdata.itemcount = 0; + + procdata.dbfile = dbfile; + procdata.fp = fp; + + /* Set up the inspection regime */ + inspectors = NULL; + lastinspector = NULL; + past_pat_inspector = NULL; + results_were_filtered = false; +#if 0 + procdata.pathsize = 1026; /* Increased as necessary by locate_read_str. */ +#else + procdata.pathsize = 128; /* Increased as necessary by locate_read_str. */ +#endif + procdata.original_filename = xmalloc (procdata.pathsize); + + + nread = fread (procdata.original_filename, 1, SLOCATE_DB_MAGIC_LEN, + procdata.fp); + slocate_seclevel = 0; + if (looking_at_slocate_locatedb(procdata.dbfile, + procdata.original_filename, + nread, + &slocate_seclevel)) + { + error(0, 0, + _("%s is an slocate database. " + "Support for these is new, expect problems for now."), + quotearg_n_style(0, locale_quoting_style, procdata.dbfile)); + + /* slocate also uses frcode, but with a different header. + * We handle the header here and then work with the data + * in the normal way. + */ + if (slocate_seclevel > 1) + { + /* We don't know what those security levels mean, + * so do nothing further + */ + error(0, 0, + _("%s is an slocate database of unsupported security level %d; skipping it."), + quotearg_n_style(0, locale_quoting_style, procdata.dbfile), + slocate_seclevel); + return 0; + } + else if (slocate_seclevel > 0) + { + /* Don't show the filenames to the user if they don't exist. + * Showing stats is safe since filenames are only counted + * after the existence check + */ + if (ACCEPT_NON_EXISTING == check_existence) + { + /* Do not allow the user to see a list of filenames that they + * cannot stat(). + */ + error(0, 0, + _("You specified the -E option, but that option " + "cannot be used with slocate-format databases " + "with a non-zero security level. No results will be " + "generated for this database.\n")); + return 0; + } + if (ACCEPT_EXISTING != do_check_existence) + { + if (enable_print || stats) + { + error(0, 0, + _("%s is an slocate database. " + "Turning on the '-e' option."), + quotearg_n_style(0, locale_quoting_style, procdata.dbfile)); + } + do_check_existence = ACCEPT_EXISTING; + } + } + add_visitor(visit_locate02_format, NULL); + format_name = "slocate"; + procdata.slocatedb_format = 1; + } + else + { + int nread2; + + procdata.slocatedb_format = 0; + extend (&procdata, sizeof(LOCATEDB_MAGIC), 0u); + nread2 = fread (procdata.original_filename+nread, 1, sizeof (LOCATEDB_MAGIC)-nread, + procdata.fp); + if (looking_at_gnu_locatedb(procdata.original_filename, nread+nread2)) + { + add_visitor(visit_locate02_format, NULL); + format_name = "GNU LOCATE02"; + } + else /* Use the old format */ + { + int i; + + nread += nread2; + extend (&procdata, 256u, 0u); + /* Read the list of the most common bigrams in the database. */ + if (nread < 256) + { + int more_read = fread (procdata.original_filename + nread, 1, + 256 - nread, procdata.fp); + if ( (more_read + nread) != 256 ) + { + error(1, 0, + _("Old-format locate database %s is " + "too short to be valid"), + quotearg_n_style(0, locale_quoting_style, dbfile)); + + } + } + + for (i = 0; i < 128; i++) + { + procdata.bigram1[i] = procdata.original_filename[i << 1]; + procdata.bigram2[i] = procdata.original_filename[(i << 1) + 1]; + } + format_name = "old"; + oldformat = 1; + add_visitor(visit_old_format, NULL); + } + } + + if (basename_only) + add_visitor(visit_basename, NULL); + + /* Add an inspector for each pattern we're looking for. */ + for ( argn = 0; argn < argc; argn++ ) + { + results_were_filtered = true; + pathpart = argv[argn]; + if (regex) + { + struct regular_expression *p = xmalloc(sizeof(*p)); + const char *error_message = NULL; + + memset (&p->regex, 0, sizeof (p->regex)); + + re_set_syntax(regex_options); + p->regex.allocated = 100; + p->regex.buffer = xmalloc (p->regex.allocated); + p->regex.fastmap = NULL; + p->regex.syntax = regex_options; + p->regex.translate = NULL; + + error_message = re_compile_pattern (pathpart, strlen (pathpart), + &p->regex); + if (error_message) + { + error (1, 0, "%s", error_message); + } + else + { + add_visitor(visit_regex, p); + } + } + else if (contains_metacharacter(pathpart)) + { + if (ignore_case) + add_visitor(visit_globmatch_casefold, pathpart); + else + add_visitor(visit_globmatch_nofold, pathpart); + } + else + { + /* No glob characters used. Hence we match on + * _any part_ of the filename, not just the + * basename. This seems odd to me, but it is the + * traditional behaviour. + * James Youngman + */ + visitfunc matcher; + if (1 == MB_CUR_MAX) + { + /* As an optimisation, use a strstr() matcher if we are + * in a unibyte locale. This can give a x2 speedup in + * the C locale. Some light testing reveals that + * glibc's strstr() is somewhere around 40% faster than + * gnulib's, so we just use strstr(). + */ + matcher = ignore_case ? + visit_substring_match_casefold_narrow : + visit_substring_match_nocasefold_narrow; + } + else + { + matcher = ignore_case ? + visit_substring_match_casefold_wide : + visit_substring_match_nocasefold_wide; + } + add_visitor(matcher, pathpart); + } + } + + pvis = lastinspector; + + /* We add visit_existing_*() as late as possible to reduce the + * number of stat() calls. + */ + switch (do_check_existence) + { + case ACCEPT_EXISTING: + results_were_filtered = true; + if (follow_symlinks) /* -L, default */ + add_visitor(visit_existing_follow, NULL); + else /* -P */ + add_visitor(visit_existing_nofollow, NULL); + break; + + case ACCEPT_NON_EXISTING: + results_were_filtered = true; + if (follow_symlinks) /* -L, default */ + add_visitor(visit_non_existing_follow, NULL); + else /* -P */ + add_visitor(visit_non_existing_nofollow, NULL); + break; + + case ACCEPT_EITHER: /* Default, neither -E nor -e */ + /* do nothing; no extra processing. */ + break; + } + + /* Security issue: The stats visitor must be added immediately + * before the print visitor, because otherwise the -S option would + * leak information about files that the caller cannot see. + */ + if (stats) + add_visitor(visit_stats, &statistics); + + if (enable_print) + { + if (print_quoted_filename) + add_visitor(visit_justprint_quoted, NULL); + else + add_visitor(visit_justprint_unquoted, NULL); + } + + + if (use_limit) + add_visitor(visit_limit, plimit); + else + add_visitor(visit_count, plimit); + + + if (argc > 1) + { + past_pat_inspector = pvis->next; + if (op_and) + mainprocessor = process_and; + else + mainprocessor = process_or; + } + else + mainprocessor = process_simple; + + if (stats) + { + printf(_("Database %s is in the %s format.\n"), + procdata.dbfile, + format_name); + } + + + procdata.c = getc (procdata.fp); + /* If we are searching for filename patterns, the inspector list + * will contain an entry for each pattern for which we are searching. + */ + while ( (procdata.c != EOF) && + (VISIT_ABORT != (mainprocessor)(&procdata)) ) + { + /* Do nothing; all the work is done in the visitor functions. */ + } + + if (stats) + { + if (oldformat) + { + int host_little_endian = i_am_little_endian(); + const char *little = _("The database has little-endian " + "machine-word encoding.\n"); + const char *big = _("The database has big-endian " + "machine-word encoding.\n"); + + if (GetwordEndianStateNative == procdata.endian_state) + { + printf("%s", (host_little_endian ? little : big)); + } + else if (GetwordEndianStateSwab == procdata.endian_state) + { + printf("%s", (host_little_endian ? big : little)); + } + else + { + printf(_("The database machine-word encoding order " + "is not obvious.\n")); + } + } + if (filesize) + print_stats(argc, filesize); + } + + if (ferror (procdata.fp)) + { + error (0, errno, "%s", + quotearg_n_style(0, locale_quoting_style, procdata.dbfile)); + return 0; + } + return plimit->items_accepted; +} + + + + +extern char *version_string; + +/* The name this program was run with. */ +char *program_name; + +static void +usage (FILE *stream) +{ + fprintf (stream, _("\ +Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n\ + [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n\ + [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n\ + [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --stdio ]\n\ + [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n\ + [--max-database-age D] [--version] [--help]\n\ + pattern...\n"), + program_name); + fputs (_("\nReport bugs to .\n"), stream); +} +enum + { + REGEXTYPE_OPTION = CHAR_MAX + 1, + MAX_DB_AGE + }; + + +static struct option const longopts[] = +{ + {"database", required_argument, NULL, 'd'}, + {"existing", no_argument, NULL, 'e'}, + {"non-existing", no_argument, NULL, 'E'}, + {"ignore-case", no_argument, NULL, 'i'}, + {"all", no_argument, NULL, 'A'}, + {"help", no_argument, NULL, 'h'}, + {"version", no_argument, NULL, 'v'}, + {"null", no_argument, NULL, '0'}, + {"count", no_argument, NULL, 'c'}, + {"wholename", no_argument, NULL, 'w'}, + {"wholepath", no_argument, NULL, 'w'}, /* Synonym. */ + {"basename", no_argument, NULL, 'b'}, + {"print", no_argument, NULL, 'p'}, + {"stdio", no_argument, NULL, 's'}, + {"mmap", no_argument, NULL, 'm'}, + {"limit", required_argument, NULL, 'l'}, + {"regex", no_argument, NULL, 'r'}, + {"regextype", required_argument, NULL, REGEXTYPE_OPTION}, + {"statistics", no_argument, NULL, 'S'}, + {"follow", no_argument, NULL, 'L'}, + {"nofollow", no_argument, NULL, 'P'}, + {"max-database-age", required_argument, NULL, MAX_DB_AGE}, + {NULL, no_argument, NULL, 0} +}; + + +static int +drop_privs(void) +{ + const char * what = "failed"; + const uid_t orig_euid = geteuid(); + const uid_t uid = getuid(); + const gid_t gid = getgid(); + +#if HAVE_SETGROUPS + /* Use of setgroups() is restricted to root only. */ + if (0 == orig_euid) + { + /* We're either root or running setuid-root. */ + gid_t groups[1]; + groups[0] = gid; + if (0 != setgroups(1u, groups)) + { + what = _("failed to drop group privileges"); + goto fail; + } + } +#endif + + /* Drop any setuid privileges */ + if (uid != orig_euid) + { + if (0 == uid) + { + /* We're really root anyway, but are setuid to something else. Leave it. */ + } + else + { + errno = 0; + if (0 != setuid(getuid())) + { + what = _("failed to drop setuid privileges"); + goto fail; + } + + /* Defend against the case where the attacker runs us with the + * capability to call setuid() turned off, which on some systems + * will cause the above attempt to drop privileges fail (leaving us + * privileged). + */ + else + { + /* Check that we can no longer switch bask to root */ + if (0 == setuid(0)) + { + what = _("Failed to fully drop privileges"); + /* The errno value here is not interesting (since + * the system call we are complaining about + * succeeded when we wanted it to fail). Arrange + * for the call to error() not to print the errno + * value by setting errno=0. + */ + errno = 0; + goto fail; + } + } + } + } + + /* Drop any setgid privileges */ + errno = 0; + if (0 != setgid(gid)) + { + what = _("failed to drop setgid privileges"); + goto fail; + } + + /* success. */ + return 0; + + fail: + error(1, errno, "%s", + quotearg_n_style(0, locale_quoting_style, what)); + abort(); + kill(0, SIGKILL); + _exit(1); + /*NOTREACHED*/ + /* ... we hope. */ + for (;;) + { + /* deliberate infinite loop */ + } +} + +static int +opendb(const char *name) +{ + int fd = open(name, O_RDONLY +#if defined O_LARGEFILE + |O_LARGEFILE +#endif + ); + if (fd >= 0) + { + /* Make sure it won't survive an exec */ + if (0 != fcntl(fd, F_SETFD, FD_CLOEXEC)) + { + close(fd); + fd = -1; + } + } + return fd; +} + +int +dolocate (int argc, char **argv, int secure_db_fd) +{ + char *dbpath; + unsigned long int found = 0uL; + int ignore_case = 0; + int print = 0; + int just_count = 0; + int basename_only = 0; + int use_limit = 0; + int regex = 0; + int regex_options = RE_SYNTAX_EMACS; + int stats = 0; + int op_and = 0; + const char *e; + FILE *fp; + int they_chose_db = 0; + bool did_stdin = false; /* Set to prevent rereading stdin. */ + + program_name = argv[0]; + +#ifdef HAVE_SETLOCALE + setlocale (LC_ALL, ""); +#endif + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + atexit (close_stdout); + + limits.limit = 0; + limits.items_accepted = 0; + + quote_opts = clone_quoting_options (NULL); + print_quoted_filename = true; + + /* We cannot simultaneously trust $LOCATE_PATH and use the + * setuid-access-controlled database,, since that could cause a leak + * of private data. + */ + dbpath = getenv ("LOCATE_PATH"); + if (dbpath) + { + they_chose_db = 1; + } + + check_existence = ACCEPT_EITHER; + + for (;;) + { + int opti = -1; + int optc = getopt_long (argc, argv, "Abcd:eEil:prsm0SwHPL", longopts, + &opti); + if (optc == -1) + break; + + switch (optc) + { + case '0': + separator = 0; + print_quoted_filename = false; /* print filename 'raw'. */ + break; + + case 'A': + op_and = 1; + break; + + case 'b': + basename_only = 1; + break; + + case 'c': + just_count = 1; + break; + + case 'd': + dbpath = optarg; + they_chose_db = 1; + break; + + case 'e': + check_existence = ACCEPT_EXISTING; + break; + + case 'E': + check_existence = ACCEPT_NON_EXISTING; + break; + + case 'i': + ignore_case = 1; + break; + + case 'h': + usage (stdout); + return 0; + + case MAX_DB_AGE: + /* XXX: nothing in the test suite for this option. */ + set_max_db_age (optarg); + break; + + case 'p': + print = 1; + break; + + case 'v': + display_findutils_version ("locate"); + return 0; + + case 'w': + basename_only = 0; + break; + + case 'r': + regex = 1; + break; + + case REGEXTYPE_OPTION: + regex_options = get_regex_type (optarg); + break; + + case 'S': + stats = 1; + break; + + case 'L': + follow_symlinks = 1; + break; + + /* In find, -P and -H differ in the way they handle paths + * given on the command line. This is not relevant for + * locate, but the -H option is supported because it is + * probably more intuitive to do so. + */ + case 'P': + case 'H': + follow_symlinks = 0; + break; + + case 'l': + { + char *end = optarg; + strtol_error err = xstrtoumax (optarg, &end, 10, &limits.limit, + NULL); + if (LONGINT_OK != err) + xstrtol_fatal (err, opti, optc, longopts, optarg); + use_limit = 1; + } + break; + + case 's': /* use stdio */ + case 'm': /* use mmap */ + /* These options are implemented simply for + * compatibility with FreeBSD + */ + break; + + default: + usage (stderr); + return 1; + } + } + + + /* If the user gave the -d option or set LOCATE_PATH, + * relinquish access to the secure database. + */ + if (they_chose_db) + { + if (secure_db_fd >= 0) + { + close(secure_db_fd); + secure_db_fd = -1; + } + } + + if (!just_count && !stats) + print = 1; + + if (stats) + { + if (optind == argc) + use_limit = 0; + } + else + { + if (!just_count && optind == argc) + { + usage (stderr); + return 1; + } + } + + + if (1 == isatty(STDOUT_FILENO)) + stdout_is_a_tty = true; + else + stdout_is_a_tty = false; + + if (they_chose_db) + next_element (dbpath, 0); /* Initialize. */ + + /* Bail out early if limit already reached. */ + while (!use_limit || limits.limit > limits.items_accepted) + { + struct stat st; + int fd; + off_t filesize; + + statistics.compressed_bytes = + statistics.total_filename_count = + statistics.total_filename_length = + statistics.whitespace_count = + statistics.newline_count = + statistics.highbit_filename_count = 0u; + + if (they_chose_db) + { + /* Take the next element from the list of databases */ + e = next_element ((char *) NULL, 0); + if (NULL == e) + break; + + if (0 == strcmp (e, "-")) + { + if (did_stdin) + { + error (0, 0, + _("warning: the locate database can only be read from stdin once.")); + return 0; + } + else + { + e = ""; + fd = 0; + did_stdin = true; + } + } + else + { + if (0 == strlen(e) || 0 == strcmp(e, ".")) + { + e = LOCATE_DB; + } + + /* open the database */ + fd = opendb(e); + if (fd < 0) + { + error (0, errno, "%s", + quotearg_n_style(0, locale_quoting_style, e)); + return 0; + } + } + } + else + { + if (-1 == secure_db_fd) + { + /* Already searched the database, it's time to exit the loop */ + break; + } + else + { + e = selected_secure_db; + fd = secure_db_fd; + secure_db_fd = -1; + } + } + + /* Check the database to see if it is old. */ + if (fstat(fd, &st)) + { + error (0, errno, "%s", + quotearg_n_style(0, locale_quoting_style, e)); + /* continue anyway */ + filesize = (off_t)0; + } + else + { + time_t now; + + filesize = st.st_size; + + if ((time_t)-1 == time(&now)) + { + /* If we can't tell the time, we don't know how old the + * database is. But since the message is just advisory, + * we continue anyway. + */ + error (0, errno, _("time system call failed")); + } + else + { + double age = difftime(now, st.st_mtime); + double warn_seconds = SECONDS_PER_UNIT * warn_number_units; + if (age > warn_seconds) + { + /* For example: + warning: database `fred' is more than 8 days old (actual age is 10 days)*/ + error (0, 0, + _("warning: database %s is more than %d %s old (actual age is %.1f %s)"), + quotearg_n_style(0, locale_quoting_style, e), + warn_number_units, _(warn_name_units), + (age/(double)SECONDS_PER_UNIT), _(warn_name_units)); + } + } + } + + fp = fdopen(fd, "r"); + if (NULL == fp) + { + error (0, errno, "%s", + quotearg_n_style(0, locale_quoting_style, e)); + return 0; + } + + /* Search this database for all patterns simultaneously */ + found = search_one_database (argc - optind, &argv[optind], + e, fp, filesize, + ignore_case, print, basename_only, + use_limit, &limits, stats, + op_and, regex, regex_options); + + /* Close the databsase (even if it is stdin) */ + if (fclose (fp) == EOF) + { + error (0, errno, "%s", + quotearg_n_style(0, locale_quoting_style, e)); + return 0; + } + } + + if (just_count) + { + printf("%ld\n", found); + } + + if (found || (use_limit && (limits.limit==0)) || stats ) + return 0; + else + return 1; +} + +#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0])) +static int +open_secure_db(void) +{ + int fd, i; + + const char * secure_db_list[] = + { + LOCATE_DB, + "/var/lib/slocate/slocate.db", + NULL + }; + for (i=0; secure_db_list[i]; ++i) + { + fd = opendb(secure_db_list[i]); + if (fd >= 0) + { + selected_secure_db = secure_db_list[i]; + return fd; + } + } + return -1; +} + +int +main (int argc, char **argv) +{ + int dbfd = open_secure_db(); + drop_privs(); + + return dolocate(argc, argv, dbfd); +} diff --git a/locate/locatedb.5 b/locate/locatedb.5 new file mode 100644 index 0000000..a94905d --- /dev/null +++ b/locate/locatedb.5 @@ -0,0 +1,153 @@ +.TH LOCATEDB 5 \" -*- nroff -*- +.SH NAME +locatedb \- front-compressed file name database +.SH DESCRIPTION +This manual page documents the format of file name databases for the +GNU version of +.BR locate . +The file name databases contain lists of files that were in +particular directory trees when the databases were last updated. +.P +There can be multiple databases. Users can select which databases +\fBlocate\fP searches using an environment variable or command line +option; see \fBlocate\fP(1). The system administrator can choose the +file name of the default database, the frequency with which the +databases are updated, and the directories for which they contain +entries. Normally, file name databases are updated by running the +\fBupdatedb\fP program periodically, typically nightly; see +\fBupdatedb\fP(1). + +.SH GNU LOCATE02 database format +This is the default format of databases produced by +.BR updatedb . +The +.B updatedb +program runs +.B frcode +to compress the list of file names using front-compression, which +reduces the database size by a factor of 4 to 5. Front-compression +(also known as incremental encoding) works as follows. +.P +The database entries are a sorted list (case-insensitively, for users' +convenience). Since the list is sorted, each entry is likely to share +a prefix (initial string) with the previous entry. Each database +entry begins with an signed offset-differential count byte, which is +the additional number of characters of prefix of the preceding entry +to use beyond the number that the preceding entry is using of its +predecessor. (The counts can be negative.) Following the count is a +null-terminated ASCII remainder \(em the part of the name that follows +the shared prefix. +.P +If the offset-differential count is larger than can be stored in a +signed byte (+/\-127), the byte has the value 0x80 (binary 10000000) +and the actual count follows in a 2-byte word, with the high byte +first (network byte order). This count can also be negative (the sign +bit being in the first of the two bytes). +.P +Every database begins with a dummy entry for a file called `LOCATE02', +which \fBlocate\fP checks for to ensure that the database file has the +correct format; it ignores the entry in doing the search. +.P +Databases can not be concatenated together, even if the first +(dummy) entry is trimmed from all but the first database. This +is because the offset-differential count in the first entry of the +second and following databases will be wrong. +.P +In the future, the data within the locate database may not be sorted +in any particular order. To obtain sorted results, pipe the output of +.B locate +through +.BR "sort -f" . +.SH slocate database format +The +.B slocate +program uses a database format similar to, but not quite the same as, +GNU +.BR locate . +The first byte of the database specifies its +.I security +.IR level . +If the security level is 0, +.B slocate +will read, match and print filenames on the basis of the information +in the database only. However, if the security level byte is 1, +.B slocate +omits entries from its output if the invoking user is unable to access +them. The second byte of the database is zero. The second byte is +followed by the first database entry. The first entry in the database +is not preceded by any differential count or dummy entry. Instead +the differential count for the first item is assumed to be zero. +.P +Starting with the second entry (if any) in the database, data is +interpreted as for the GNU LOCATE02 format. + +.SH Old Locate Database format +There is also an old database format, used by Unix +.B locate +and +.B find +programs and earlier releases of the GNU ones. \fBupdatedb\fP runs +programs called \fBbigram\fP and \fBcode\fP to produce old-format +databases. The old format differs from the above description in the +following ways. Instead of each entry starting with an +offset-differential count byte and ending with a null, byte values +from 0 through 28 indicate offset-differential counts from -14 through +14. The byte value indicating that a long offset-differential count +follows is 0x1e (30), not 0x80. The long counts are stored in host +byte order, which is not necessarily network byte order, and host +integer word size, which is usually 4 bytes. They also represent a +count 14 less than their value. The database lines have no +termination byte; the start of the next line is indicated by its first +byte having a value <= 30. +.P +In addition, instead of starting with a dummy entry, the old database +format starts with a 256 byte table containing the 128 most common +bigrams in the file list. A bigram is a pair of adjacent bytes. +Bytes in the database that have the high bit set are indexes (with the +high bit cleared) into the bigram table. The bigram and +offset-differential count coding makes these databases 20-25% smaller +than the new format, but makes them not 8-bit clean. Any byte in a +file name that is in the ranges used for the special codes is replaced +in the database by a question mark, which not coincidentally is the +shell wildcard to match a single character. +.SH EXAMPLE +.nf + +Input to \fBfrcode\fP: +.\" with nulls changed to newlines: +/usr/src +/usr/src/cmd/aardvark.c +/usr/src/cmd/armadillo.c +/usr/tmp/zoo + +Length of the longest prefix of the preceding entry to share: +0 /usr/src +8 /cmd/aardvark.c +14 rmadillo.c +5 tmp/zoo + +.fi +Output from \fBfrcode\fP, with trailing nulls changed to newlines +and count bytes made printable: +.nf +0 LOCATE02 +0 /usr/src +8 /cmd/aardvark.c +6 rmadillo.c +\-9 tmp/zoo + +(6 = 14 \- 8, and \-9 = 5 \- 14) +.fi +.SH "SEE ALSO" +\fBfind\fP(1), \fBlocate\fP(1), \fBlocatedb\fP(5), \fBxargs\fP(1), +\fBFinding Files\fP (on-line in Info, or printed) +.SH "BUGS" +.P +The best way to report a bug is to use the form at +http://savannah.gnu.org/bugs/?group=findutils. +The reason for this is that you will then be able to track progress in +fixing the problem. Other comments about \fBlocate\fP(1) and about +the findutils package in general can be sent to the +.I bug-findutils +mailing list. To join the list, send email to +.IR bug-findutils-request@gnu.org . diff --git a/locate/locatedb.h b/locate/locatedb.h new file mode 100644 index 0000000..a4a7289 --- /dev/null +++ b/locate/locatedb.h @@ -0,0 +1,80 @@ +/* locatedb.h -- declarations for the locate database + Copyright (C) 1994 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef _LOCATEDB_H +#define _LOCATEDB_H 1 + +/* The magic string at the start of a locate database, to make sure + it's in the right format. The 02 is the database format version number. + This string has the same format as a database entry, but you can't + concatenate databases even if you remove it, since the differential count + in the first entry of the second database will be wrong. */ +#define LOCATEDB_MAGIC "\0LOCATE02" + +/* Common-prefix length differences in the ranges + 0..127, -127..-1 (0x00..0x7f, 0x81..0xff) fit into one byte. + This value (which is -128) indicates that the difference is + too large to fit into one byte, and a two-byte integer follows. */ +#define LOCATEDB_ESCAPE 0x80 +#define LOCATEDB_ONEBYTE_MAX (127) +#define LOCATEDB_ONEBYTE_MIN (-127) + + +/* If it is ever possible to try to encode LOCATEDB_MAGIC as a + * single-byte offset, then an unfortunate length of common prefix + * will produce a spurious escape character, desynchronising the data + * stream. We use a compile-time check in the preprocessor to prevent + * this. + */ +#if LOCATEDB_ESCAPE <= LOCATEDB_ONEBYTE_MAX +#error "You have a bad combination of LOCATEDB_ESCAPE and LOCATEDB_ONEBYTE_MAX, see above" +#endif + +/* These are used for old, bigram-encoded databases: */ + +/* Means the differential count follows in a 2-byte int instead. */ +#define LOCATEDB_OLD_ESCAPE 30 + +/* Offset added to differential counts to encode them as positive numbers. */ +#define LOCATEDB_OLD_OFFSET 14 + +# ifndef PARAMS +# if defined PROTOTYPES || (defined __STDC__ && __STDC__) +# define PARAMS(Args) Args +# else +# define PARAMS(Args) () +# endif +# endif + +typedef enum + { + GetwordEndianStateInitial = 0, + GetwordEndianStateNative = 1, + GetwordEndianStateSwab = 2 + } GetwordEndianState; + +int getword (FILE *fp, const char *filename, + size_t minvalue, size_t maxvalue, + GetwordEndianState *endian_state_flag); + +bool putword (FILE *fp, int word, + GetwordEndianState endian_state_flag); + + +#define SLOCATE_DB_MAGIC_LEN 2 + +#endif /* !_LOCATEDB_H */ diff --git a/locate/testsuite/.cvsignore b/locate/testsuite/.cvsignore new file mode 100644 index 0000000..de8a383 --- /dev/null +++ b/locate/testsuite/.cvsignore @@ -0,0 +1,5 @@ +Makefile +Makefile.in +locate.log +locate.sum +site.exp diff --git a/locate/testsuite/.gitignore b/locate/testsuite/.gitignore new file mode 100644 index 0000000..de8a383 --- /dev/null +++ b/locate/testsuite/.gitignore @@ -0,0 +1,5 @@ +Makefile +Makefile.in +locate.log +locate.sum +site.exp diff --git a/locate/testsuite/Makefile.am b/locate/testsuite/Makefile.am new file mode 100644 index 0000000..75623bc --- /dev/null +++ b/locate/testsuite/Makefile.am @@ -0,0 +1,50 @@ +AUTOMAKE_OPTIONS=dejagnu +LOCATE = ../locate +UPDATEDB = ../updatedb +LOCATEFLAGS = +UPDATEDBFLAGS = +DEJATOOL = locate + +EXTRA_DIST_EXP = \ +config/unix.exp \ +locate.gnu/bigendian.exp \ +locate.gnu/littleendian.exp \ +locate.gnu/ignore_case1.exp \ +locate.gnu/ignore_case2.exp \ +locate.gnu/ignore_case3.exp \ +locate.gnu/bigprefix1.exp \ +locate.gnu/regex1.exp \ +locate.gnu/exists1.exp \ +locate.gnu/exists2.exp \ +locate.gnu/exists3.exp \ +locate.gnu/notexists1.exp \ +locate.gnu/notexists2.exp \ +locate.gnu/notexists3.exp \ +locate.gnu/old_prefix.exp \ +locate.gnu/space1st.exp \ +locate.gnu/sv-bug-14535.exp \ +locate.gnu/exceedshort.exp + +EXTRA_DIST_XI = \ +locate.gnu/locateddb.old.powerpc.xi \ +locate.gnu/locateddb.old.x86.xi + +EXTRA_DIST_XO = \ +locate.gnu/bigendian.xo \ +locate.gnu/littleendian.xo \ +locate.gnu/ignore_case1.xo \ +locate.gnu/ignore_case2.xo \ +locate.gnu/ignore_case3.xo \ +locate.gnu/exists1.xo \ +locate.gnu/exists2.xo \ +locate.gnu/exists3.xo \ +locate.gnu/notexists1.xo \ +locate.gnu/notexists2.xo \ +locate.gnu/notexists3.xo \ +locate.gnu/old_prefix.xo + +EXTRA_DIST = $(EXTRA_DIST_EXP) $(EXTRA_DIST_XO) $(EXTRA_DIST_XI) + +# DIST_SUBDIRS = config locate.gnu + +CLEANFILES = *.log *.sum site.exp site.bak diff --git a/locate/testsuite/config/unix.exp b/locate/testsuite/config/unix.exp new file mode 100644 index 0000000..d07fbeb --- /dev/null +++ b/locate/testsuite/config/unix.exp @@ -0,0 +1,341 @@ +# -*- TCL -*- +# Test-specific TCL procedures required by DejaGNU. +# Copyright (C) 1994,2003,2004,2005,2006,2007 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +# Modified by David MacKenzie from the gcc files +# written by Rob Savoye . + + +# use the local version of find for updatedb +# +# We normalise (normalize for those over the water) pathnames +# because the updatedb shell script uses "cd", which means that +# any relative paths no longer point where we thought they did. +# Because "file normalize" requires tcl 8.4, we have a plan B +# for normalising the name of a directory, but it is slower. + +proc normalize_dir { dir } { + if [ catch { file normalize $dir } result ] then { + return [ exec /bin/sh -c "cd $dir && /bin/pwd" ] + } else { + return $result; + } +} + +set fulldir [ normalize_dir "../../find" ] +set env{find} "$fulldir/find" + +# use the local help commands for updatedb +set env(LIBEXECDIR) [ normalize_dir .. ] +# use our local version of find, too. + +# do not ignore any file systems for this test +set env(PRUNEFS) "" +global UPDATEDB +global FRCODE +global LOCATE +global FIND + +# look for binaries +set UPDATEDB [findfile $base_dir/../updatedb $base_dir/../updatedb [transform updatedb]] +set FRCODE [findfile $base_dir/../frcode $base_dir/../frcode [transform frcode ]] +set LOCATE [findfile $base_dir/../locate $base_dir/../locate [transform locate ]] +set FIND [findfile $base_dir/../../find/find $base_dir/../../find/find [transform find ]] +verbose "UPDATEDB is $UPDATEDB" 1 +verbose "FRCODE is $FRCODE" 1 +verbose "LOCATE is $LOCATE" 1 +verbose "FIND is $FIND" 1 + + +foreach exe "$UPDATEDB $FRCODE $LOCATE $FIND" { + if ![ string match "/*" $exe ] { + error "Failed to find a binary to test for $exe" + } +} + +global UPDATEDBFLAGS +if ![info exists UPDATEDBFLAGS] then { + set UPDATEDBFLAGS "" +} + +set env(find) "$FIND" + +global LOCATEFLAGS +if ![info exists LOCATEFLAGS] then { + set LOCATEFLAGS "" +} + +# Called by runtest. +# Extract and print the version number of locate. +proc locate_version {} { + global UPDATEDB + global UPDATEDBFLAGS + global LOCATE + global LOCATEFLAGS + + if {[which $LOCATE] != 0} then { + set tmp [ eval exec $LOCATE $LOCATEFLAGS --version $dbfile + + # Now run locate. + set locatecmd "$LOCATE -d $dbfile $locateoptions" + send_log "Running $locatecmd \n" + catch "exec $locatecmd > $outfile" + + set result "" + set f [open "$outfile" r] + while { [ gets $f line ] >= 0 } { + # send_log "Output fragment is $line\n" + append result "$line\n" + } + close $f + + # send_log "Output is $result\n" + + if {[string equal $result $outtext]} { + if $fail_good then { + fail "$testname-$id" + } else { + pass "$testname-$id" + } + } else { + send_log "Output mismatch.\n" + send_log "Expected: $outtext\n" + send_log "Got : $result\n" + fail "$testname-$id" + } +} + + +# Do a test in which we expect an input text file to be preserved unchanged. +proc locate_roundtrip { id intext } { + if ![regexp "\n$" $intext] { + # We like the items to be terminated by newlines. + error "The input text is not terminated by newline" + } + + locate_textonly p $id $intext "-r ." $intext +} + + + +# Run locate and leave the output in $comp_output. +# Called by individual test scripts. +proc locate_start { passfail updatedb_options locate_options + {updatedb_infile ""} {locate_infile ""} + { between_hook "" } + } { + global verbose + global LOCATE + global LOCATEFLAGS + global UPDATEDB + global UPDATEDBFLAGS + global comp_output + + set fail_good [string match "f*" $passfail] + + set scriptname [uplevel {info script}] + set testbase [file rootname $scriptname] + set testname [file tail $testbase] + + set outfile "$testbase.xo" + if {"$updatedb_infile" != ""} then { + set updatedb_infile "[file dirname [file dirname $testbase]]/inputs/$updatedb_infile" + } else { + set updatedb_infile /dev/null + } + if {"$locate_infile" != ""} then { + set locate_infile "[file dirname [file dirname $testbase]]/inputs/$locate_infile" + } else { + set locate_infile /dev/null + } + + catch "exec rm -f locate.out" + + set updatedb_cmd "$UPDATEDB $UPDATEDBFLAGS $updatedb_options < $updatedb_infile" + send_log "$updatedb_cmd\n" + if $verbose>1 then { + send_user "Spawning \"$updatedb_cmd\"\n" + } + catch "exec $updatedb_cmd" comp_output + + if {$comp_output != ""} then { + send_log "$comp_output\n" + if $verbose>1 then { + send_user "$comp_output\n" + } + # If fail_good is set, that refers to the exit + # status of locate, not updatedb... + fail "$testname: updatedb is supposed to be silent, $comp_output" + return + } else { + send_log "updatedb: OK.\n" + } + + + eval $between_hook + + set locate_cmd "$LOCATE $LOCATEFLAGS $locate_options < $locate_infile > locate.out" + send_log "$locate_cmd\n" + if $verbose>1 then { + send_user "Spawning \"$locate_cmd\"\n" + } + + catch "exec $locate_cmd" comp_output + if {$comp_output != ""} then { + send_log "$comp_output\n" + if $verbose>1 then { + send_user "$comp_output\n" + } + if $fail_good then { + pass "$testname" + } else { + fail "$testname: locate failed, $comp_output" + } + return + } + + if [file exists $outfile] then { + set cmp_cmd "cmp locate.out $outfile" + send_log "$cmp_cmd\n" + catch "exec $cmp_cmd" cmpout + if {$cmpout != ""} then { + #catch "exec diff locate.out $outfile" diffout + #puts $diffout + fail "$testname, $cmpout" + return + } + } else { + if {[file size locate.out] != 0} then { + fail "$testname, output should be empty" + return + } + } + pass "$testname" + catch "exec rm -rf tmp" +} + + + +proc locate_from_db { passfail locate_options locate_database } { + global LOCATE + global LOCATEFLAGS + global verbose + + set fail_good [string match "f*" $passfail] + set scriptname [uplevel {info script}] + set testbase [file rootname $scriptname] + set testname [file tail $testbase] + set testdir [file dirname $scriptname] + + set dbpath "$testdir/$locate_database" + set outfile "$testbase.xo" + + set locate_cmd "$LOCATE $LOCATEFLAGS -d $dbpath $locate_options > locate.out" + send_log "$locate_cmd\n" + if $verbose>1 then { + send_user "Spawning \"$locate_cmd\"\n" + } + + catch "exec $locate_cmd 2>/dev/null" comp_output + if {$comp_output != ""} then { + send_log "$comp_output\n" + if $verbose>1 then { + send_user "$comp_output\n" + } + if $fail_good then { + # XXX: in general may want to compare output, too. + pass "$testname" + } else { + fail "$testname: locate unfortunately failed, $comp_output" + } + return + } + + + if [file exists $outfile] then { + set cmp_cmd "cmp locate.out $outfile" + send_log "$cmp_cmd\n" + catch "exec $cmp_cmd" cmpout + if {$cmpout != ""} then { + #catch "exec diff locate.out $outfile" diffout + #puts $diffout + fail "$testname, $cmpout" + return + } + } else { + if {[file size locate.out] != 0} then { + fail "$testname, output should be empty" + return + } + } + pass "$testname" +} + + + + + +# Called by runtest. +# Clean up (remove temporary files) before runtest exits. +proc locate_exit {} { + catch "exec rm -f locate.out updatedb-paths.txt locate.db" +} + +# Called by runtest. +# Extract and print the version number of updatedb. +proc updatedb_version {} { + global UPDATEDB + global UPDATEDBFLAGS + + if {[which $UPDATEDB] != 0} then { + set tmp [eval exec $UPDATEDB $UPDATEDBFLAGS --version &&*3JN-a)JNhwLmWEc^Eud%7Qy}PqSy0J;9wWX&>w7HGH Tfk@ENWhj>fG{cC`n9l?NHRmXw literal 0 HcwPel00001 diff --git a/locate/testsuite/locate.gnu/notexists1.exp b/locate/testsuite/locate.gnu/notexists1.exp new file mode 100644 index 0000000..ba7f297 --- /dev/null +++ b/locate/testsuite/locate.gnu/notexists1.exp @@ -0,0 +1,10 @@ +# tests for -E: make sure we don't print a file if it exists. +# Since there are no matches in this case, we expect a nonzero +# return value as well. +set tmp "tmp" +exec rm -rf $tmp +exec mkdir $tmp +exec mkdir $tmp/subdir +exec touch $tmp/subdir/fred +locate_start f "--changecwd=. --output=$tmp/locatedb --localpaths=tmp/subdir/" "--database=$tmp/locatedb -E fred" {} + diff --git a/locate/testsuite/locate.gnu/notexists1.xo b/locate/testsuite/locate.gnu/notexists1.xo new file mode 100644 index 0000000..e69de29 diff --git a/locate/testsuite/locate.gnu/notexists2.exp b/locate/testsuite/locate.gnu/notexists2.exp new file mode 100644 index 0000000..e809088 --- /dev/null +++ b/locate/testsuite/locate.gnu/notexists2.exp @@ -0,0 +1,9 @@ +# tests for -E: make sure we do print a file if it does not exist. +set tmp "tmp" +exec rm -rf $tmp +exec mkdir $tmp +exec mkdir $tmp/subdir +exec touch $tmp/subdir/fred1 +exec touch $tmp/subdir/fred2 +locate_start p "--changecwd=. --output=$tmp/locatedb --localpaths=tmp/subdir/" "--database=$tmp/locatedb -E fred" {} {} { exec rm "tmp/subdir/fred2" } + diff --git a/locate/testsuite/locate.gnu/notexists2.xo b/locate/testsuite/locate.gnu/notexists2.xo new file mode 100644 index 0000000..091224f --- /dev/null +++ b/locate/testsuite/locate.gnu/notexists2.xo @@ -0,0 +1 @@ +tmp/subdir/fred2 diff --git a/locate/testsuite/locate.gnu/notexists3.exp b/locate/testsuite/locate.gnu/notexists3.exp new file mode 100644 index 0000000..dc46c09 --- /dev/null +++ b/locate/testsuite/locate.gnu/notexists3.exp @@ -0,0 +1,9 @@ +# tests for -E: make sure we do not print a file if it does not exist. +set tmp "tmp" +exec rm -rf $tmp +exec mkdir $tmp +exec mkdir $tmp/subdir +exec touch $tmp/subdir/fred1 +exec touch $tmp/subdir/fred2 +locate_start p "--changecwd=. --output=$tmp/locatedb --localpaths=tmp/subdir/" "--database=$tmp/locatedb -E fred" {} {} { exec rm "tmp/subdir/fred1" } + diff --git a/locate/testsuite/locate.gnu/notexists3.xo b/locate/testsuite/locate.gnu/notexists3.xo new file mode 100644 index 0000000..95fec6e --- /dev/null +++ b/locate/testsuite/locate.gnu/notexists3.xo @@ -0,0 +1 @@ +tmp/subdir/fred1 diff --git a/locate/testsuite/locate.gnu/old_prefix.exp b/locate/testsuite/locate.gnu/old_prefix.exp new file mode 100644 index 0000000..e21cc61 --- /dev/null +++ b/locate/testsuite/locate.gnu/old_prefix.exp @@ -0,0 +1,13 @@ +set tmp "tmp" +exec rm -rf $tmp +exec mkdir $tmp +exec mkdir $tmp/subdir +exec touch $tmp/subdir/________________________________________________________________________________fred1 +exec touch $tmp/subdir/________________________________________________________________________________fred2 +exec touch $tmp/subdir/________________________________________________________________________________fred3 +exec touch $tmp/subdir/________________________________________________________________________________fred4 + +locate_start p "--changecwd=. --output=$tmp/locatedb --old-format --localpaths=tmp/subdir 2>/dev/null" "--database=$tmp/locatedb tmp" {} + + +exec rm -rf $tmp diff --git a/locate/testsuite/locate.gnu/old_prefix.xo b/locate/testsuite/locate.gnu/old_prefix.xo new file mode 100644 index 0000000..909b8e7 --- /dev/null +++ b/locate/testsuite/locate.gnu/old_prefix.xo @@ -0,0 +1,5 @@ +tmp/subdir +tmp/subdir/________________________________________________________________________________fred1 +tmp/subdir/________________________________________________________________________________fred2 +tmp/subdir/________________________________________________________________________________fred3 +tmp/subdir/________________________________________________________________________________fred4 diff --git a/locate/testsuite/locate.gnu/regex1.exp b/locate/testsuite/locate.gnu/regex1.exp new file mode 100644 index 0000000..8989210 --- /dev/null +++ b/locate/testsuite/locate.gnu/regex1.exp @@ -0,0 +1,9 @@ +# regular expression tests +locate_textonly p 0 "/\n" "?" "/\n" +locate_textonly p 1 "/\n" "-r ." "/\n" +locate_textonly p 2 "/" "-r X" "" +locate_textonly p 3 "/\n/bin" "-r n" "/bin\n" +locate_textonly p 4 "/\n/bin" "-i -r BIN" "/bin\n" +locate_textonly p 5 "/\n/bin\n/binary" "-r bin\$" "/bin\n" +locate_textonly p 6 "/\n/bin\n/binary" {-r ^\[^/\]} "" +locate_textonly p 7 "/\n/bin\n/binary" {-r ^\[^X\]} "/\n/bin\n/binary\n" diff --git a/locate/testsuite/locate.gnu/space1st.exp b/locate/testsuite/locate.gnu/space1st.exp new file mode 100644 index 0000000..dc070da --- /dev/null +++ b/locate/testsuite/locate.gnu/space1st.exp @@ -0,0 +1,2 @@ +# check frcode handles space as first character +locate_textonly p 0 " fred\n" "-i fred" " fred\n" diff --git a/locate/testsuite/locate.gnu/sv-bug-14535.exp b/locate/testsuite/locate.gnu/sv-bug-14535.exp new file mode 100644 index 0000000..cc86b18 --- /dev/null +++ b/locate/testsuite/locate.gnu/sv-bug-14535.exp @@ -0,0 +1,61 @@ +# NOTE: this file contains UTF8 characters. + + +proc selectlocale { pattern } { + if [ catch { set locale_list [ split [ eval exec locale -a ] "\n" ] } ] { + # Failed to figure out which tests are supported. + return "" + } + foreach locale $locale_list { + if { [string match $pattern $locale] } { + global env + set env(LC_ALL) $locale + return $locale + } + } + return "" +} + +proc select_any_locale { patternlist } { + foreach pattern $patternlist { + set locale [ selectlocale $pattern ] + if { [ string length $locale ] } { + return $locale + } + } + return "" +} + +# localeoptions contains a list (in order of preference) of the +# locales in which we want to perform part of this test. If we can +# use any locale matching any of the patterns, we run an extra four +# tests. Otherwise, we skip them and issue a warning message. +set localeoptions { + "hu_HU.UTF-8" + "hu_*.UTF-8" + "en_IE.utf8" + "en_GB.utf8" + "en_US.utf8" + "en_*.utf8" + "*.utf8" +} + + + +# Do the regular case-fold tests which only need ASCII support. +locate_textonly p a "teste\n" "-i teste" "teste\n" +locate_textonly p b "testE\n" "-i testE" "testE\n" +locate_textonly p c "testE\n" "-i teste" "testE\n" +locate_textonly p d "teste\n" "-i testE" "teste\n" + +set locale [ select_any_locale $localeoptions ] +if { [ string length $locale ] } { + # We have a UTF-8 locale. Do the extra tests. + locate_textonly p 0 "testé\n" "-i testé" "testé\n" + locate_textonly p 1 "testÉ\n" "-i testé" "testÉ\n" + locate_textonly p 2 "testé\n" "-i testÉ" "testé\n" + locate_textonly p 3 "testÉ\n" "-i testÉ" "testÉ\n" +} else { + warning "Four tests have been skipped because I cannot find a UTF-8 locale configured on your system" +} + diff --git a/locate/updatedb.1 b/locate/updatedb.1 new file mode 100644 index 0000000..e42ec74 --- /dev/null +++ b/locate/updatedb.1 @@ -0,0 +1,144 @@ +.TH UPDATEDB 1 \" -*- nroff -*- +.SH NAME +updatedb \- update a file name database +.SH SYNOPSIS +.B updatedb [\fIoptions\fP] +.SH DESCRIPTION +This manual page +documents the GNU version of +.BR updatedb , +which updates file name databases used by GNU +.BR locate . +The file name databases contain lists of files that were in +particular directory trees when the databases were last updated. +The file name of the default database is determined when \fBlocate\fP +and \fBupdatedb\fP are configured and installed. The frequency with +which the databases are updated and the directories for which they +contain entries depend on how often \fBupdatedb\fP is run, and with +which arguments. +.P +In networked environments, it often makes sense to build a database at +the root of each filesystem, containing the entries for that filesystem. +.B updatedb +is then run for each filesystem on the fileserver where that +filesystem is on a local disk, to prevent thrashing the network. +Users can select which databases \fBlocate\fP searches using an +environment variable or command line option; see \fBlocate\fP(1). +Databases can not be concatenated together. +.P +The file name database format changed starting with GNU +.B find +and +.B locate +version 4.0 to allow machines with different byte orderings to share +the databases. The new GNU +.B locate +can read both the old and new database formats. +However, old versions of +.B locate +and +.B find +produce incorrect results if given a new-format database. +.SH OPTIONS +.TP +.B \-\-findoptions='\fI\-option1 \-option2...\fP' +Global options to pass on to \fBfind\fP. +The environment variable \fBFINDOPTIONS\fP also sets this value. +Default is none. +.TP +.B \-\-localpaths='\fIpath1 path2...\fP' +Non-network directories to put in the database. +Default is /. +.TP +.B \-\-netpaths='\fIpath1 path2...\fP' +Network (NFS, AFS, RFS, etc.) directories to put in the database. +The environment variable \fBNETPATHS\fP also sets this value. +Default is none. +.TP +.B \-\-prunepaths='\fIpath1 path2...\fP' +Directories to not put in the database, which would otherwise be. +Remove any trailing slashes from the path names, otherwise +.B updatedb +won\'t recognise the paths you want to omit (because it uses them as +regular expression patterns). +The environment variable \fBPRUNEPATHS\fP also sets this value. +Default is /tmp /usr/tmp /var/tmp /afs. +.TP +.B \-\-prunefs='\fIpath...\fP' +File systems to not put in the database, which would otherwise be. +Note that files are pruned when a file system is reached; +Any file system mounted under an undesired file system will be +ignored. +The environment variable +\fBPRUNEFS\fP also sets this value. +Default is \fInfs NFS proc\fP. +.TP +.B \-\-output=\fIdbfile\fP +The database file to build. +Default is system-dependent. In Debian GNU/Linux, the default +is /var/cache/locate/locatedb. +.TP +.B \-\-localuser=\fIuser\fP +The user to search non-network directories as, using \fBsu\fP(1). +Default is to search the non-network directories as the current user. +You can also use the environment variable \fBLOCALUSER\fP to set this user. +.TP +.B \-\-netuser=\fIuser\fP +The user to search network directories as, using \fBsu\fP(1). +Default is \fBdaemon\fP. +You can also use the environment variable \fBNETUSER\fP to set this user. +.TP +.B \-\-old\-format +Create the database in the old format. This is a synonym for +.BR \-\-dbformat=old . +.TP +.B \-\-dbformat=F +Create the database in format F. The default format is called LOCATE02. +F can be +.B old +to select the old database format (this is the same as specifying +.BR \-\-old\-format ). +Alternatively the +.B slocate +format is also supported. When the +.B slocate +format is in use, the database produced is marked as having security +level 1. If you want to build a system-wide +.B slocate +database, you may want to run +.B updatedb +as root. +.TP +.B \-\-version +Print the version number of +.B updatedb +and exit. +.TP +.B "\-\-help" +Print a summary of the options to +.B updatedb +and exit. +.SH "SEE ALSO" +\fBfind\fP(1), \fBlocate\fP(1), \fBlocatedb\fP(5), \fBxargs\fP(1) +\fBFinding Files\fP (on-line in Info, or printed) +.SH "BUGS" +.P +The +.B updatedb +program correctly handles filenames containing newlines, +but only if the system's sort command has a working +.I \-z +option. If you suspect that +.B locate +may need to return filenames containing newlines, consider using its +.I \-\-null +option. +.P +The best way to report a bug is to use the form at +http://savannah.gnu.org/bugs/?group=findutils. +The reason for this is that you will then be able to track progress in +fixing the problem. Other comments about \fBupdatedb\fP(1) and about +the findutils package in general can be sent to the +.I bug-findutils +mailing list. To join the list, send email to +.IR bug-findutils-request@gnu.org . diff --git a/locate/updatedb.sh b/locate/updatedb.sh new file mode 100644 index 0000000..dd514b3 --- /dev/null +++ b/locate/updatedb.sh @@ -0,0 +1,372 @@ +#! /bin/sh +# updatedb -- build a locate pathname database +# Copyright (C) 1994, 1996, 1997, 2000, 2001, 2003, 2004, 2005, 2006 +# Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# csh original by James Woods; sh conversion by David MacKenzie. + +#exec 2> /tmp/updatedb-trace.txt +#set -x + +version=' +updatedb (@PACKAGE_NAME@) @VERSION@ +Copyright (C) 2007 Free Software Foundation, Inc. +License GPLv3+: GNU GPL version 3 or later +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. + +Written by Eric B. Decker, James Youngman, and Kevin Dalley. +' + + +usage="\ +Usage: $0 [--findoptions='-option1 -option2...'] + [--localpaths='dir1 dir2...'] [--netpaths='dir1 dir2...'] + [--prunepaths='dir1 dir2...'] [--prunefs='fs1 fs2...'] + [--output=dbfile] [--netuser=user] [--localuser=user] + [--old-format] [--dbformat] [--version] [--help] + +Report bugs to ." +changeto=/ +old=no +for arg +do + # If we are unable to fork, the back-tick operator will + # fail (and the shell will emit an error message). When + # this happens, we exit with error value 71 (EX_OSERR). + # Alternative candidate - 75, EX_TEMPFAIL. + opt=`echo $arg|sed 's/^\([^=]*\).*/\1/'` || exit 71 + val=`echo $arg|sed 's/^[^=]*=\(.*\)/\1/'` || exit 71 + case "$opt" in + --findoptions) FINDOPTIONS="$val" ;; + --localpaths) SEARCHPATHS="$val" ;; + --netpaths) NETPATHS="$val" ;; + --prunepaths) PRUNEPATHS="$val" ;; + --prunefs) PRUNEFS="$val" ;; + --output) LOCATE_DB="$val" ;; + --netuser) NETUSER="$val" ;; + --localuser) LOCALUSER="$val" ;; + --old-format) old=yes ;; + --changecwd) changeto="$val" ;; + --dbformat) dbformat="$val" ;; + --version) fail=0; echo "$version" || fail=1; exit $fail ;; + --help) fail=0; echo "$usage" || fail=1; exit $fail ;; + *) echo "updatedb: invalid option $opt +$usage" >&2 + exit 1 ;; + esac +done + + + + +case "${dbformat:+yes}_${old}" in + yes_yes) + echo "The --dbformat and --old cannot both be specified." >&2 + exit 1 + ;; + *) + ;; +esac + +if test "$old" = yes || test "$dbformat" = "old" ; then + echo "Warning: future versions of findutils will shortly discontinue support for the old locate database format." >&2 + old=yes + sort="@SORT@" + print_option="-print" + frcode_options="" +else + frcode_options="" + case "$dbformat" in + "") + # Default, use LOCATE02 + ;; + LOCATE02) + ;; + slocate) + frcode_options="$frcode_options -S 1" + ;; + *) + echo "Unsupported locate database format ${dbformat}: Supported formats are:" >&2 + echo "LOCATE02, slocate, old" >&2 + exit 1 + esac + + + if @SORT_SUPPORTS_Z@ + then + sort="@SORT@ -z" + print_option="-print0" + frcode_options="$frcode_options -0" + else + sort="@SORT@" + print_option="-print" + fi +fi + +getuid() { + # format of "id" output is ... + # uid=1(daemon) gid=1(other) + # for `id's that don't understand -u + id | cut -d'(' -f 1 | cut -d'=' -f2 +} + +# figure out if su supports the -s option +select_shell() { + if su "$1" -s $SHELL -c false < /dev/null ; then + # No. + echo "" + else + if su "$1" -s $SHELL -c true < /dev/null ; then + # Yes. + echo "-s $SHELL" + else + # su is unconditionally failing. We won't be able to + # figure out what is wrong, so be conservative. + echo "" + fi + fi +} + + +# You can set these in the environment, or use command-line options, +# to override their defaults: + +# Any global options for find? +: ${FINDOPTIONS=} + +# What shell shoud we use? We should use a POSIX-ish sh. +: ${SHELL="/bin/sh"} + +# Non-network directories to put in the database. +: ${SEARCHPATHS="/"} + +# Network (NFS, AFS, RFS, etc.) directories to put in the database. +: ${NETPATHS=} + +# Directories to not put in the database, which would otherwise be. +: ${PRUNEPATHS="/tmp /usr/tmp /var/tmp /afs /amd /sfs /proc"} + +# Trailing slashes result in regex items that are never matched, which +# is not what the user will expect. Therefore we now reject such +# constructs. +for p in $PRUNEPATHS; do + case "$p" in + /*/) echo "$0: $p: pruned paths should not contain trailing slashes" >&2 + exit 1 + esac +done + +# The same, in the form of a regex that find can use. +test -z "$PRUNEREGEX" && + PRUNEREGEX=`echo $PRUNEPATHS|sed -e 's,^,\\\(^,' -e 's, ,$\\\)\\\|\\\(^,g' -e 's,$,$\\\),'` + +# The database file to build. +: ${LOCATE_DB=@LOCATE_DB@} + +# Directory to hold intermediate files. +if test -d /var/tmp; then + : ${TMPDIR=/var/tmp} +elif test -d /usr/tmp; then + : ${TMPDIR=/usr/tmp} +else + : ${TMPDIR=/tmp} +fi +export TMPDIR + +# The user to search network directories as. +: ${NETUSER=daemon} + +# The directory containing the subprograms. +if test -n "$LIBEXECDIR" ; then + : LIBEXECDIR already set, do nothing +else + : ${LIBEXECDIR=@libexecdir@} +fi + +# The directory containing find. +if test -n "$BINDIR" ; then + : BINDIR already set, do nothing +else + : ${BINDIR=@bindir@} +fi + +# The names of the utilities to run to build the database. +: ${find:=${BINDIR}/@find@} +: ${frcode:=${LIBEXECDIR}/@frcode@} +: ${bigram:=${LIBEXECDIR}/@bigram@} +: ${code:=${LIBEXECDIR}/@code@} + + +checkbinary () { + if test -x "$1" ; then + : ok + else + eval echo "updatedb needs to be able to execute $1, but cannot." >&2 + exit 1 + fi +} + +for binary in $find $frcode $bigram $code +do + checkbinary $binary +done + + +PATH=/bin:/usr/bin:${BINDIR}; export PATH + +: ${PRUNEFS="nfs NFS proc afs proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs sysfs shfs"} + +if test -n "$PRUNEFS"; then +prunefs_exp=`echo $PRUNEFS |sed -e 's/\([^ ][^ ]*\)/-o -fstype \1/g' \ + -e 's/-o //' -e 's/$/ -o/'` +else + prunefs_exp='' +fi + +# Make and code the file list. +# Sort case insensitively for users' convenience. + +rm -f $LOCATE_DB.n +trap 'rm -f $LOCATE_DB.n; exit' HUP TERM + +if test $old = no; then +# LOCATE02 or slocate format +if { +cd "$changeto" +if test -n "$SEARCHPATHS"; then + if [ "$LOCALUSER" != "" ]; then + # : A1 + su $LOCALUSER `select_shell $LOCALUSER` -c \ + "$find $SEARCHPATHS $FINDOPTIONS \ + \\( $prunefs_exp \ + -type d -regex '$PRUNEREGEX' \\) -prune -o $print_option" + else + # : A2 + $find $SEARCHPATHS $FINDOPTIONS \ + \( $prunefs_exp \ + -type d -regex "$PRUNEREGEX" \) -prune -o $print_option + fi +fi + +if test -n "$NETPATHS"; then +myuid=`getuid` +if [ "$myuid" = 0 ]; then + # : A3 + su $NETUSER `select_shell $NETUSER` -c \ + "$find $NETPATHS $FINDOPTIONS \\( -type d -regex '$PRUNEREGEX' -prune \\) -o $print_option" || + exit $? + else + # : A4 + $find $NETPATHS $FINDOPTIONS \( -type d -regex "$PRUNEREGEX" -prune \) -o $print_option || + exit $? + fi +fi +} | $sort -f | $frcode $frcode_options > $LOCATE_DB.n +then + : OK so far + true +else + rv=$? + echo "Failed to generate $LOCATE_DB.n" >&2 + rm -f $LOCATE_DB.n + exit $rv +fi + +# To avoid breaking locate while this script is running, put the +# results in a temp file, then rename it atomically. +if test -s $LOCATE_DB.n; then + rm -f $LOCATE_DB + mv $LOCATE_DB.n $LOCATE_DB + chmod 644 $LOCATE_DB +else + echo "updatedb: new database would be empty" >&2 + rm -f $LOCATE_DB.n +fi + +else # old + +if ! bigrams=`mktemp -t updatedbXXXXXXXXX`; then + echo mktemp failed >&2 + exit 1 +fi + +if ! filelist=`mktemp -t updatedbXXXXXXXXX`; then + echo mktemp failed >&2 + exit 1 +fi + +rm -f $LOCATE_DB.n +trap 'rm -f $bigrams $filelist $LOCATE_DB.n; exit' HUP TERM + +# Alphabetize subdirectories before file entries using tr. James Woods says: +# "to get everything in monotonic collating sequence, to avoid some +# breakage i'll have to think about." +{ +cd "$changeto" +if test -n "$SEARCHPATHS"; then + if [ "$LOCALUSER" != "" ]; then + # : A5 + su $LOCALUSER `select_shell $LOCALUSER` -c \ + "$find $SEARCHPATHS $FINDOPTIONS \ + \( $prunefs_exp \ + -type d -regex '$PRUNEREGEX' \) -prune -o $print_option" || exit $? + else + # : A6 + $find $SEARCHPATHS $FINDOPTIONS \ + \( $prunefs_exp \ + -type d -regex "$PRUNEREGEX" \) -prune -o $print_option || exit $? + fi +fi + +if test -n "$NETPATHS"; then + myuid=`getuid` + if [ "$myuid" = 0 ]; then + # : A7 + su $NETUSER `select_shell $NETUSER` -c \ + "$find $NETPATHS $FINDOPTIONS \\( -type d -regex '$PRUNEREGEX' -prune \\) -o $print_option" || + exit $? + else + # : A8 + $find $NETPATHS $FINDOPTIONS \( -type d -regex "$PRUNEREGEX" -prune \) -o $print_option || + exit $? + fi +fi +} | tr / '\001' | $sort -f | tr '\001' / > $filelist + +# Compute the (at most 128) most common bigrams in the file list. +$bigram $bigram_opts < $filelist | sort | uniq -c | sort -nr | + awk '{ if (NR <= 128) print $2 }' | tr -d '\012' > $bigrams + +# Code the file list. +$code $bigrams < $filelist > $LOCATE_DB.n + +rm -f $bigrams $filelist + +# To reduce the chances of breaking locate while this script is running, +# put the results in a temp file, then rename it atomically. +if test -s $LOCATE_DB.n; then + rm -f $LOCATE_DB + mv $LOCATE_DB.n $LOCATE_DB + chmod 644 $LOCATE_DB +else + echo "updatedb: new database would be empty" >&2 + rm -f $LOCATE_DB.n +fi + +fi + +exit 0 diff --git a/locate/word_io.c b/locate/word_io.c new file mode 100644 index 0000000..abcc234 --- /dev/null +++ b/locate/word_io.c @@ -0,0 +1,176 @@ +/* word_io.c -- word oriented I/O + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include + +#include +#include +#include +#include /* for bool */ +#include +#include + +#include "error.h" +#include "quote.h" +#include "quotearg.h" +#include "locatedb.h" + +#if ENABLE_NLS +# include +# define _(Text) gettext (Text) +#else +# define _(Text) Text +#define textdomain(Domain) +#define bindtextdomain(Package, Directory) +#endif +#ifdef gettext_noop +# define N_(String) gettext_noop (String) +#else +/* We used to use (String) instead of just String, but apparently ISO C + * doesn't allow this (at least, that's what HP said when someone reported + * this as a compiler bug). This is HP case number 1205608192. See + * also http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11250 (which references + * ANSI 3.5.7p14-15). The Intel icc compiler also rejects constructs + * like: static const char buf[] = ("string"); + */ +# define N_(String) String +#endif + + +/* Swap bytes in 32 bit value. This code is taken from glibc-2.3.3. */ +#define bswap_32(x) \ + ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ + (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) + +enum { WORDBYTES=4 }; + +static int +decode_value(const unsigned char data[], + int limit, + GetwordEndianState *endian_state_flag, + const char *filename) +{ + int swapped; + union + { + int ival; /* native representation */ + unsigned char data[WORDBYTES]; + } u; + u.ival = 0; + memcpy(&u.data, data, WORDBYTES); + swapped = bswap_32(u.ival); /* byteswapped */ + + if (*endian_state_flag == GetwordEndianStateInitial) + { + if (u.ival <= limit) + { + if (swapped > limit) + { + /* the native value is inside the limit and the + * swapped value is not. We take this as proof + * that we should be using the ative byte order. + */ + *endian_state_flag = GetwordEndianStateNative; + } + return u.ival; + } + else + { + if (swapped <= limit) + { + /* Aha, now we know we have to byte-swap. */ + error(0, 0, + _("Warning: locate database %s was " + "built with a different byte order"), + quotearg_n_style(0, locale_quoting_style, filename)); + *endian_state_flag = GetwordEndianStateSwab; + return swapped; + } + else + { + /* u.ival > limit and swapped > limit. For the moment, assume + * native ordering. + */ + return u.ival; + } + } + } + else + { + /* We already know the byte order. */ + if (*endian_state_flag == GetwordEndianStateSwab) + return swapped; + else + return u.ival; + } +} + + + +int +getword (FILE *fp, + const char *filename, + size_t minvalue, + size_t maxvalue, + GetwordEndianState *endian_state_flag) +{ + unsigned char data[4]; + size_t bytes_read; + + clearerr(fp); + bytes_read = fread(data, WORDBYTES, 1, fp); + if (bytes_read != 1) + { + const char * quoted_name = quotearg_n_style(0, locale_quoting_style, + filename); + /* Distinguish between a truncated database and an I/O error. + * Either condition is fatal. + */ + if (feof(fp)) + error(1, 0, _("unexpected EOF in %s"), quoted_name); + else + error(1, errno, _("error reading a word from %s"), quoted_name); + abort (); + } + else + { + return decode_value(data, maxvalue, endian_state_flag, filename); + } +} + + +bool +putword (FILE *fp, int word, + GetwordEndianState endian_state_flag) +{ + size_t items_written; + + /* You must decide before calling this function which + * endianness you want to use. + */ + assert (endian_state_flag != GetwordEndianStateInitial); + if (GetwordEndianStateSwab == endian_state_flag) + { + word = bswap_32(word); + } + + items_written = fwrite(&word, sizeof(word), 1, fp); + if (1 == items_written) + return true; + else + return false; +} diff --git a/m4/.cvsignore b/m4/.cvsignore new file mode 100644 index 0000000..282522d --- /dev/null +++ b/m4/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/m4/.gitignore b/m4/.gitignore new file mode 100644 index 0000000..282522d --- /dev/null +++ b/m4/.gitignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/m4/Makefile.am b/m4/Makefile.am new file mode 100644 index 0000000..1b13304 --- /dev/null +++ b/m4/Makefile.am @@ -0,0 +1,3 @@ +EXTRA_DIST = findlib.m4 nullsort.m4 order-bad.bin order-good.bin withfts.m4 + + diff --git a/m4/findlib.m4 b/m4/findlib.m4 new file mode 100644 index 0000000..f491936 --- /dev/null +++ b/m4/findlib.m4 @@ -0,0 +1,69 @@ +# FINDLIB_REPLACE_FUNCS(FUNCTION...) +# ----------------------------- +AC_DEFUN([FINDLIB_REPLACE_FUNCS], +[AC_FOREACH([AC_Func], [$1], [jy_FINDLIBSOURCE(AC_Func.c)])dnl +AC_CHECK_FUNCS([$1], , [_jy_FINDLIBOBJ($ac_func)]) +]) + + + +# jy_FINDLIBSOURCE(FILENAME) +# ---------------------- +# Announce we might need the file `FILENAME'. +m4_define([jy_FINDLIBSOURCE], []) + + + +# jy_FINDLIBOBJ(FILENAME-NOEXT, ACTION-IF-INDIR) +# ------------------------------------------- +# We need `FILENAME-NOEXT.o', save this into `FINDLIBOBJS'. +# We don't use AC_SUBST/2 because it forces an unnecessary eol. +m4_define([_jy_FINDLIBOBJ], +[AS_LITERAL_IF([$1], + [jy_FINDLIBSOURCE([$1.c])], + [$2])dnl +AC_SUBST([FINDLIB@&t@OBJS])dnl +case $FINDLIB@&t@OBJS in + "$1.$ac_objext" | \ + *" $1.$ac_objext" | \ + "$1.$ac_objext "* | \ + *" $1.$ac_objext "* ) ;; + *) FINDLIB@&t@OBJS="$FINDLIB@&t@OBJS $1.$ac_objext" ;; +esac +]) + + + +# jy_FINDLIBOBJ(FILENAME-NOEXT) +# ------------------------- +# We need `FILENAME-NOEXT.o', save this into `FINDLIBOBJS'. +# We don't use AC_SUBST/2 because it forces an unnecessary eol. +m4_define([jy_FINDLIBOBJ], +[_jy_FINDLIBOBJ([$1], + [AC_DIAGNOSE(syntax, + [$0($1): you should use literals])])dnl +]) + + +# _jy_FINDLIBOBJS_NORMALIZE +# --------------------- +# Adapted from autoconf's general.m4. +# Clean up FINDLIBOBJS abd LTFINDLIBOBJS +# Used with AC_CONFIG_COMMANDS_PRE. +AC_DEFUN([_jy_FINDLIBOBJS_NORMALIZE], +[ac_findlibobjs= +ac_ltfindlibobjs= +for ac_i in : $FINDLIB@&t@OBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_findlibobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltfindlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +AC_SUBST([FINDLIB@&t@OBJS], [$ac_findlibobjs]) +AC_SUBST([LTFINDLIBOBJS], [$ac_ltfindlibobjs]) +]) + + +dnl AC_CONFIG_COMMANDS_PRE(_jy_FINDLIBOBJS_NORMALIZE) diff --git a/m4/mkinstalldirs.m4 b/m4/mkinstalldirs.m4 new file mode 100644 index 0000000..1e53ec3 --- /dev/null +++ b/m4/mkinstalldirs.m4 @@ -0,0 +1,40 @@ +dnl Copyright (C) 1995-2003, 2005,2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2003. +# Originally taken from nls.m4 serial 2 (gettext-0.14.3) + +AC_PREREQ(2.50) + +AC_DEFUN([AM_MKINSTALLDIRS], +[ + dnl Tell automake >= 1.10 to complain if mkinstalldirs is missing. + m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([mkinstalldirs])]) + dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly + dnl find the mkinstalldirs script in another subdir but $(top_srcdir). + dnl Try to locate it. + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + case "$ac_aux_dir" in + /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;; + *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;; + esac + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + AC_SUBST(MKINSTALLDIRS) +]) diff --git a/m4/noreturn.m4 b/m4/noreturn.m4 new file mode 100644 index 0000000..b762d89 --- /dev/null +++ b/m4/noreturn.m4 @@ -0,0 +1,33 @@ +dnl Copyright (C) 2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl James Youngman , 2007. + +AC_DEFUN([jy_AC_ATTRIBUTE_NORETURN], +[AC_CACHE_CHECK([for __attribute__ ((__noreturn__)) support], + [jy_cv_cc_attribute_noreturn], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], + [void report_fatal_error(void) __attribute__ ((__noreturn__));])], + [jy_cv_cc_attribute_noreturn=yes], + [jy_cv_cc_attribute_noreturn=no])]) +if test $jy_cv_cc_attribute_noreturn = yes; then + HAVE_ATTRIBUTE_NORETURN=1 +else + HAVE_ATTRIBUTE_NORETURN=0 +fi +AC_SUBST([HAVE_ATTRIBUTE_NORETURN]) +AC_DEFINE_UNQUOTED([HAVE_ATTRIBUTE_NORETURN],[$HAVE_ATTRIBUTE_NORETURN], + [Define to 1 if the compiler supports __attribute__ ((__noreturn__))]) +]) diff --git a/m4/nullsort.m4 b/m4/nullsort.m4 new file mode 100644 index 0000000..e34627b --- /dev/null +++ b/m4/nullsort.m4 @@ -0,0 +1,45 @@ +AC_DEFUN([jy_SORTZ], + [AC_PATH_PROG([SORT], [sort], [sort]) + AC_MSG_CHECKING([if $SORT supports the -z option]) +if test "x$cross_compiling" = xyes +then + # We are cross-compiling, so cannot test the target's "sort". + ac_sort_has_z=false +else + # find out if the sort command has a working -z option. + if $SORT -z -c < "${srcdir:-.}/m4/order-good.bin" 2>/dev/null >/dev/null + then + # sort has a -z option, but we have not yet established that + # sort thinks there is more than one input line there. We have + # to make sort -c do its thing with the input lines in the wrong + # order to determine that (we can't do it in one shot because + # if sort returns nonzero we cant tell that it wasn't just + # complaining about this unknown -z option. + if $SORT -z -c < "${srcdir:-.}/m4/order-bad.bin" 2>/dev/null >/dev/null + then + # sort likes -z but it doesn't seem to make \0 + # a delimiter. + ac_sort_has_z=false + else + ac_sort_has_z=true + fi + else + # Doesn't like the z option. + ac_sort_has_z=false + fi +fi + +if test "x$cross_compiling" = xyes +then + AC_MSG_RESULT([assume no, since we are cross compiling]) + AC_SUBST(SORT_SUPPORTS_Z,[false]) +elif $ac_sort_has_z +then + AC_MSG_RESULT([yes]) + AC_SUBST(SORT_SUPPORTS_Z,[true]) +else + AC_MSG_RESULT([no]) + AC_SUBST(SORT_SUPPORTS_Z,[false]) +fi +]) + diff --git a/m4/order-bad.bin b/m4/order-bad.bin new file mode 100644 index 0000000000000000000000000000000000000000..f264547f74fd80610ad9e53c6205da5af4a2c499 GIT binary patch literal 8 PcwS3MO=Cz*N@f563%>$Z literal 0 HcwPel00001 diff --git a/m4/order-good.bin b/m4/order-good.bin new file mode 100644 index 0000000000000000000000000000000000000000..7773a76cf583ab00e311fda828caf5a3b9bb4c0c GIT binary patch literal 8 PcwS3PN@hq&O=AE63!4H~ literal 0 HcwPel00001 diff --git a/m4/withfts.m4 b/m4/withfts.m4 new file mode 100644 index 0000000..3ee16e5 --- /dev/null +++ b/m4/withfts.m4 @@ -0,0 +1,13 @@ +AC_DEFUN([FIND_WITH_FTS], +[AC_ARG_WITH([fts], +[ --without-fts Use an older mechanism for searching the filesystem, instead of using fts()],[with_fts=$withval],[]) + case $with_fts in + yes|no) ;; + '') with_fts=yes ;; + *) AC_MSG_ERROR([Invalid value for --with-fts: $with_fts]) + esac + AM_CONDITIONAL(WITH_FTS, [[test x"${with_fts-no}" != xno]]) + if test x"${with_fts-no}" != xno ; then + AC_DEFINE(WITH_FTS, 1, [Define if you want to use fts() to do the filesystem search.]) + fi +]) diff --git a/po/.cvsignore b/po/.cvsignore new file mode 100644 index 0000000..7c6f203 --- /dev/null +++ b/po/.cvsignore @@ -0,0 +1,7 @@ +*.gmo +Makefile +Makefile.in +POTFILES +cat-id-tbl.c +stamp-po +remove-potcdate.sed diff --git a/po/.gitignore b/po/.gitignore new file mode 100644 index 0000000..ce44cbb --- /dev/null +++ b/po/.gitignore @@ -0,0 +1,6 @@ +*.gmo +Makefile +Makefile.in +POTFILES +cat-id-tbl.c +stamp-po diff --git a/po/Makefile.in.in b/po/Makefile.in.in new file mode 100644 index 0000000..1f5cc28 --- /dev/null +++ b/po/Makefile.in.in @@ -0,0 +1,384 @@ +# Makefile for PO directory in any package using GNU gettext. +# Copyright (C) 1995-1997, 2000-2005 by Ulrich Drepper +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU General Public +# License but which still want to provide support for the GNU gettext +# functionality. +# Please note that the actual code of GNU gettext is covered by the GNU +# General Public License and is *not* in the public domain. +# +# Origin: gettext-0.14.4 + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ + +SHELL = /bin/sh +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +datadir = @datadir@ +localedir = $(datadir)/locale +gettextsrcdir = $(datadir)/gettext/po + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +mkinstalldirs = $(SHELL) $(MKINSTALLDIRS) + +GMSGFMT = @GMSGFMT@ +MSGFMT = @MSGFMT@ +XGETTEXT = @XGETTEXT@ +MSGMERGE = msgmerge +MSGMERGE_UPDATE = @MSGMERGE@ --update +MSGINIT = msginit +MSGCONV = msgconv +MSGFILTER = msgfilter + +POFILES = @POFILES@ +GMOFILES = @GMOFILES@ +UPDATEPOFILES = @UPDATEPOFILES@ +DUMMYPOFILES = @DUMMYPOFILES@ +DISTFILES.common = Makefile.in.in remove-potcdate.sin \ +$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) +DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ +$(POFILES) $(GMOFILES) \ +$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) + +POTFILES = \ + +CATALOGS = @CATALOGS@ + +# Makevars gets inserted here. (Don't remove this line!) + +.SUFFIXES: +.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update + +.po.mo: + @echo "$(MSGFMT) -c -o $@ $<"; \ + $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ + +.po.gmo: + @lang=`echo $* | sed -e 's,.*/,,'`; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ + cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo + +.sin.sed: + sed -e '/^#/d' $< > t-$@ + mv t-$@ $@ + + +all: all-@USE_NLS@ + +all-yes: stamp-po +all-no: + +# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no +# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because +# we don't want to bother translators with empty POT files). We assume that +# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. +# In this case, stamp-po is a nop (i.e. a phony target). + +# stamp-po is a timestamp denoting the last time at which the CATALOGS have +# been loosely updated. Its purpose is that when a developer or translator +# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, +# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent +# invocations of "make" will do nothing. This timestamp would not be necessary +# if updating the $(CATALOGS) would always touch them; however, the rule for +# $(POFILES) has been designed to not touch files that don't need to be +# changed. +stamp-po: $(srcdir)/$(DOMAIN).pot + test ! -f $(srcdir)/$(DOMAIN).pot || \ + test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) + @test ! -f $(srcdir)/$(DOMAIN).pot || { \ + echo "touch stamp-po" && \ + echo timestamp > stamp-poT && \ + mv stamp-poT stamp-po; \ + } + +# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', +# otherwise packages like GCC can not be built if only parts of the source +# have been downloaded. + +# This target rebuilds $(DOMAIN).pot; it is an expensive operation. +# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. +$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed + if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ + msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ + else \ + msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ + fi; \ + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --msgid-bugs-address="$$msgid_bugs_address" + test ! -f $(DOMAIN).po || { \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ + sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ + if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ + else \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + else \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + } + +# This rule has no dependencies: we don't need to update $(DOMAIN).pot at +# every "make" invocation, only create it when it is missing. +# Only "make $(DOMAIN).pot-update" or "make dist" will force an update. +$(srcdir)/$(DOMAIN).pot: + $(MAKE) $(DOMAIN).pot-update + +# This target rebuilds a PO file if $(DOMAIN).pot has changed. +# Note that a PO file is not touched if it doesn't need to be changed. +$(POFILES): $(srcdir)/$(DOMAIN).pot + @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ + if test -f "$(srcdir)/$${lang}.po"; then \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ + cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \ + else \ + $(MAKE) $${lang}.po-create; \ + fi + + +install: install-exec install-data +install-exec: +install-data: install-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ + for file in $(DISTFILES.common) Makevars.template; do \ + $(INSTALL_DATA) $(srcdir)/$$file \ + $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + for file in Makevars; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +install-data-no: all +install-data-yes: all + $(mkinstalldirs) $(DESTDIR)$(datadir) + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkinstalldirs) $(DESTDIR)$$dir; \ + if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ + $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ + echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ + fi; \ + done; \ + done + +install-strip: install + +installdirs: installdirs-exec installdirs-data +installdirs-exec: +installdirs-data: installdirs-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ + else \ + : ; \ + fi +installdirs-data-no: +installdirs-data-yes: + $(mkinstalldirs) $(DESTDIR)$(datadir) + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkinstalldirs) $(DESTDIR)$$dir; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + fi; \ + done; \ + done + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: uninstall-exec uninstall-data +uninstall-exec: +uninstall-data: uninstall-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + for file in $(DISTFILES.common) Makevars.template; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +uninstall-data-no: +uninstall-data-yes: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + done; \ + done + +check: all + +info dvi ps pdf html tags TAGS ctags CTAGS ID: + +mostlyclean: + rm -f remove-potcdate.sed + rm -f stamp-poT + rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po + rm -fr *.o + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES *.mo + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f stamp-po $(GMOFILES) + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: + $(MAKE) update-po + @$(MAKE) dist2 +# This is a separate target because 'update-po' must be executed before. +dist2: stamp-po $(DISTFILES) + dists="$(DISTFILES)"; \ + if test "$(PACKAGE)" = "gettext-tools"; then \ + dists="$$dists Makevars.template"; \ + fi; \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + dists="$$dists $(DOMAIN).pot stamp-po"; \ + fi; \ + if test -f $(srcdir)/ChangeLog; then \ + dists="$$dists ChangeLog"; \ + fi; \ + for i in 0 1 2 3 4 5 6 7 8 9; do \ + if test -f $(srcdir)/ChangeLog.$$i; then \ + dists="$$dists ChangeLog.$$i"; \ + fi; \ + done; \ + if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ + for file in $$dists; do \ + if test -f $$file; then \ + cp -p $$file $(distdir) || exit 1; \ + else \ + cp -p $(srcdir)/$$file $(distdir) || exit 1; \ + fi; \ + done + +update-po: Makefile + $(MAKE) $(DOMAIN).pot-update + test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) + $(MAKE) update-gmo + +# General rule for creating PO files. + +.nop.po-create: + @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ + echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ + exit 1 + +# General rule for updating PO files. + +.nop.po-update: + @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ + if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ + cd $(srcdir); \ + if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "msgmerge for $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +$(DUMMYPOFILES): + +update-gmo: Makefile $(GMOFILES) + @: + +Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ + $(SHELL) ./config.status + +force: + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/po/Makevars b/po/Makevars new file mode 100644 index 0000000..8ac3f44 --- /dev/null +++ b/po/Makevars @@ -0,0 +1,41 @@ +# Makefile variables for PO directory in any package using GNU gettext. + +# Usually the message domain is the same as the package name. +DOMAIN = $(PACKAGE) + +# These two variables depend on the location of this directory. +subdir = po +top_builddir = .. + +# These options get passed to xgettext. +XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --from-code=UTF-8 + +# This is the copyright holder that gets inserted into the header of the +# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding +# package. (Note that the msgstr strings, extracted from the package's +# sources, belong to the copyright holder of the package.) Translators are +# expected to transfer the copyright for their translations to this person +# or entity, or to disclaim their copyright. The empty string stands for +# the public domain; in this case the translators are expected to disclaim +# their copyright. +COPYRIGHT_HOLDER = Free Software Foundation, Inc. + +# This is the email address or URL to which the translators shall report +# bugs in the untranslated strings: +# - Strings which are not entire sentences, see the maintainer guidelines +# in the GNU gettext documentation, section 'Preparing Strings'. +# - Strings which use unclear terms or require additional context to be +# understood. +# - Strings which make invalid assumptions about notation of date, time or +# money. +# - Pluralisation problems. +# - Incorrect English spelling. +# - Incorrect formatting. +# It can be your email address, or a mailing list address where translators +# can write to without being subscribed, or the URL of a web page through +# which the translators can contact you. +MSGID_BUGS_ADDRESS = bug-findutils@gnu.org + +# This is the list of locale categories, beyond LC_MESSAGES, for which the +# message catalogs shall be used. It is usually empty. +EXTRA_LOCALE_CATEGORIES = diff --git a/po/Makevars.template b/po/Makevars.template new file mode 100644 index 0000000..32692ab --- /dev/null +++ b/po/Makevars.template @@ -0,0 +1,41 @@ +# Makefile variables for PO directory in any package using GNU gettext. + +# Usually the message domain is the same as the package name. +DOMAIN = $(PACKAGE) + +# These two variables depend on the location of this directory. +subdir = po +top_builddir = .. + +# These options get passed to xgettext. +XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ + +# This is the copyright holder that gets inserted into the header of the +# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding +# package. (Note that the msgstr strings, extracted from the package's +# sources, belong to the copyright holder of the package.) Translators are +# expected to transfer the copyright for their translations to this person +# or entity, or to disclaim their copyright. The empty string stands for +# the public domain; in this case the translators are expected to disclaim +# their copyright. +COPYRIGHT_HOLDER = Free Software Foundation, Inc. + +# This is the email address or URL to which the translators shall report +# bugs in the untranslated strings: +# - Strings which are not entire sentences, see the maintainer guidelines +# in the GNU gettext documentation, section 'Preparing Strings'. +# - Strings which use unclear terms or require additional context to be +# understood. +# - Strings which make invalid assumptions about notation of date, time or +# money. +# - Pluralisation problems. +# - Incorrect English spelling. +# - Incorrect formatting. +# It can be your email address, or a mailing list address where translators +# can write to without being subscribed, or the URL of a web page through +# which the translators can contact you. +MSGID_BUGS_ADDRESS = + +# This is the list of locale categories, beyond LC_MESSAGES, for which the +# message catalogs shall be used. It is usually empty. +EXTRA_LOCALE_CATEGORIES = diff --git a/po/POTFILES.in b/po/POTFILES.in new file mode 100644 index 0000000..0afb2c7 --- /dev/null +++ b/po/POTFILES.in @@ -0,0 +1,40 @@ +# List of source files containing translatable strings. +# Copyright (C) 2000, 2007 Free Software Foundation, Inc. + +# Copying and distribution of this file, with or without +# modification, are permitted provided the copyright notice +# and this notice are preserved. + +# Common library files +gnulib/lib/argmatch.c +gnulib/lib/closein.c +gnulib/lib/closeout.c +gnulib/lib/error.c +gnulib/lib/getdate.y +gnulib/lib/getopt.c +gnulib/lib/human.c +gnulib/lib/openat-die.c +gnulib/lib/quotearg.c +gnulib/lib/regcomp.c +gnulib/lib/rpmatch.c +gnulib/lib/xalloc-die.c +gnulib/lib/xstrtol-error.c + +#Package source files +find/find.c +find/fstype.c +find/ftsfind.c +find/parser.c +find/pred.c +find/tree.c +find/util.c +lib/buildcmd.c +lib/dircallback.c +lib/findutils-version.c +lib/listfile.c +lib/regextype.c +locate/code.c +locate/frcode.c +locate/locate.c +locate/word_io.c +xargs/xargs.c diff --git a/po/Rules-quot b/po/Rules-quot new file mode 100644 index 0000000..9c2a995 --- /dev/null +++ b/po/Rules-quot @@ -0,0 +1,47 @@ +# Special Makefile rules for English message catalogs with quotation marks. + +DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot + +.SUFFIXES: .insert-header .po-update-en + +en@quot.po-create: + $(MAKE) en@quot.po-update +en@boldquot.po-create: + $(MAKE) en@boldquot.po-update + +en@quot.po-update: en@quot.po-update-en +en@boldquot.po-update: en@boldquot.po-update-en + +.insert-header.po-update-en: + @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ + if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + ll=`echo $$lang | sed -e 's/@.*//'`; \ + LC_ALL=C; export LC_ALL; \ + cd $(srcdir); \ + if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "creation of $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +en@quot.insert-header: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header + +en@boldquot.insert-header: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header + +mostlyclean: mostlyclean-quot +mostlyclean-quot: + rm -f *.insert-header diff --git a/po/be.po b/po/be.po new file mode 100644 index 0000000..ddabd4e --- /dev/null +++ b/po/be.po @@ -0,0 +1,1292 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2003 Free Software Foundation, Inc. +# Ales Nyakhaychyk , 2003. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.1.7\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2003-11-04 05:21+0200\n" +"Last-Translator: Ales Nyakhaychyk \n" +"Language-Team: Belarusian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.0.2\n" + +#: gnulib/lib/argmatch.c:133 +#, fuzzy, c-format +msgid "invalid argument %s for %s" +msgstr "нерэчаісны довад %s для \"%s\" " + +#: gnulib/lib/argmatch.c:134 +#, fuzzy, c-format +msgid "ambiguous argument %s for %s" +msgstr "неадназначны довад %s для \"%s\"" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Рэчаісныя довады:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Невядомая сыстэмная памылка" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: выбар \"%s\" ёсьць неадназначны\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: выбар \"--%s\" не дазваляе довад\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: выбар \"%c%s\" не дазваляе довад\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: выбар \"%s\" патрабуе довад\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: нераспазнаны выбар \"--%s\"\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: нераспазнаны выбар \"%c%s\"\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: недапушчальны выбар -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: нерэчаісны выбар -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: выбар патрабуе довад -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: выбар \"-W %s\" зьяўляецца неадназначным\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: выбар \"-W %s\" не дазваляе довад\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "немагчыма атрымаць бягучую тэчку" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "\"" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "\"" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Пасьпяхова" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "Няма супадзеньняў" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Нерэчаісны сталы выраз" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "нерэчаісны знак параўнаньня" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "нерэчаісная назва клясы знака" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: gnulib/lib/regcomp.c:149 +#, fuzzy +msgid "Invalid back reference" +msgstr "Нерэчаісны сталы выраз" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "[ ці [^ несупадаюць" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "( ці \\( несупадаюць" + +#: gnulib/lib/regcomp.c:158 +#, fuzzy +msgid "Unmatched \\{" +msgstr "( ці \\( несупадаюць" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "нерэчаісны зьмест \\{\\}" + +#: gnulib/lib/regcomp.c:164 +#, fuzzy +msgid "Invalid range end" +msgstr "Нерэчаісны сталы выраз" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "памяць вычарпаная" + +#: gnulib/lib/regcomp.c:170 +#, fuzzy +msgid "Invalid preceding regular expression" +msgstr "Нерэчаісны сталы выраз" + +#: gnulib/lib/regcomp.c:173 +#, fuzzy +msgid "Premature end of regular expression" +msgstr "Нерэчаісны сталы выраз" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "сталы выраз занадта вялікі" + +#: gnulib/lib/regcomp.c:179 +#, fuzzy +msgid "Unmatched ) or \\)" +msgstr "( ці \\( несупадаюць" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "адсутнічае папярэдні сталы выраз" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[тТ]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[нН]" + +#: gnulib/lib/xalloc-die.c:34 +#, fuzzy +msgid "memory exhausted" +msgstr "памяць вычарпаная" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "нерэчаісны довад \"%s\" да \"%s\"" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "нерэчаісны довад \"%s\" да \"%s\"" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "сьпіс довадаў занадта вялікі" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "немагчыма атрымаць бягучую тэчку" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "немагчыма атрымаць бягучую тэчку" + +#: find/find.c:384 +#, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "" + +#: find/find.c:394 +#, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "" + +#: find/find.c:490 +#, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:527 +#, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "невядома" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +#, fuzzy +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"бягучая тэчка зьяўляецца дапомным шляхам; дапомным выразам ёсьць -print\n" +"выраз можа складацца з:\n" +"дзейнікаў (у парадку памяншэньня; -and маецца на ўвазе, калі іншыя " +"незаданыя):\n" +" ( ВЫРАЗ ) ! ВЫРАЗ -not ВЫРАЗ ВЫРАЗ1 -a ВЫРАЗ2 ВЫРАЗ1 -and ВЫРАЗ2\n" + +#: find/parser.c:1064 +#, fuzzy +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"бягучая тэчка зьяўляецца дапомным шляхам; дапомным выразам ёсьць -print\n" +"выраз можа складацца з:\n" +"дзейнікаў (у парадку памяншэньня; -and маецца на ўвазе, калі іншыя " +"незаданыя):\n" +" ( ВЫРАЗ ) ! ВЫРАЗ -not ВЫРАЗ ВЫРАЗ1 -a ВЫРАЗ2 ВЫРАЗ1 -and ВЫРАЗ2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" + +#: find/parser.c:1073 +#, fuzzy +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +" -cnewer ФАЙЛ -ctime N -empty -false -fstype ВІД -gid N -group НАЗВА\n" +" -ilname УЗОР -iname УЗОР -inum N -ipath УЗОР -iregex УЗОР\n" +" -links N -lname УЗОР -mmin N -mtime N -name УЗОР -newer ФАЙЛ\n" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path УЗОР -perm [+-]РЭЖЫМ -regex УЗОР\n" +" -size N[bckw] -true -type [bcdpfls] -uid N -used N -user НАЗВА\n" +" -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "" + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "нерэчаісны рэжым \"%s\"" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "нерэчаісны null-довад да -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "нерэчаісны від -size \"%c\"" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "нерэчаісны довад \"%s\" да \"%s\"" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "нерэчаісны довад %s для \"%s\" " + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "увага: нераспазнаная службовая пасьлядоўнасьць \"\\%c\"" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "увага: нераспазнанае прадпісаньне фармату \"%%%c\"" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "асяродзьдзе занадта вялікае для exec" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "немагчыма нарадзіць працэс" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "памылка чаканьня %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s завершаны сыгналам %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "нерэчаісны выраз" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "" + +#: find/tree.c:121 +#, fuzzy +msgid "invalid expression; you have too many ')'" +msgstr "нерэчаісны выраз" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "нерэчаісны выраз" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "" + +#: find/tree.c:231 +#, fuzzy, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "нерэчаісны выраз" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "шлях мусіць папярэднічаць выразу" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "нерэчаісны выказьнік \"%s\"" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "нерэчаісны выказьнік \"%s\"" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "нерэчаісны довад \"%s\" да \"%s\"" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "прапушчаны довад да \"%s\"" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "нерэчаісны выраз" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "нерэчаісны выказьнік \"%s\"" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Выкарыстаньне: %s [шлях...] [выраз]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Выкарыстаньне: %s [шлях...] [выраз]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "увага: нераспазнаная службовая пасьлядоўнасьць \"\\%c\"" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "загад занадта доўгі" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "сьпіс довадаў занадта вялікі" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU find вэрсыі %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, fuzzy, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "Выкарыстаньне: %s most_common_bigrams < list > coded_list\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +#, fuzzy +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Паведамляйце пра памылкі на ." + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "дзён" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "нерэчаісны довад \"%s\" да \"%s\"" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "нерэчаісны довад \"%s\" да \"%s\"" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "увага: база даньняў \"%s\" большая за %d %s" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "нерэчаісны выказьнік \"%s\"" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "памылка чаканьня %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "асяродзьдзе занадта вялікае для exec" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "двайныя" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "адзінарныя" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "сьпіс довадаў занадта доўгі" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: спынена сыгналам %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: пярэрвана сыгналам %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: нерэчаіснае значэньне для выбара -%c\n" + +#: xargs/xargs.c:1274 +#, fuzzy, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: значэньне для выбара -%c мусіць быць >= %ld\n" + +#: xargs/xargs.c:1288 +#, fuzzy, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: значэньне для выбара -%c мусіць быць < %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Выкарыстаньне: %s [-0prtx] [-e[eof-str]] [-i[replace-str]] [-l[max-lines]]\n" +" [-n max-args] [-s max-chars] [-P max-procs] [--null] [--eof[=eof-" +"str]]\n" +" [--replace[=replace-str]] [--max-lines[=max-lines]] [--interactive]\n" +" [--max-chars=max-chars] [--verbose] [--exit] [--max-procs=max-procs]\n" +" [--max-args=max-args] [--no-run-if-empty] [--version] [--help]\n" +" [загад [пачатковыя довады]]\n" + +#~ msgid "block size" +#~ msgstr "памер блёку" + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find вэрсыі %s\n" + +#, fuzzy +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU find вэрсыі %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate вэрсыі %s\n" + +#, fuzzy +#~ msgid "argument to --limit" +#~ msgstr "сьпіс довадаў занадта доўгі" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs вэрсыі %s\n" + +#, fuzzy +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "дзеяньняў: -exec ЗАГАД ; -fprint ФАЙЛ -fprint0 ФАЙЛ -fprintf ФАЙЛ ФАРМАТ\n" +#~ " -ok ЗАГАД ; -print -print0 -printf ФАРМАТ -prune -ls\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "Сьпіс выказьнікаў:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "віртуальная памяць вычарпаная" + +#~ msgid "inserting %s\n" +#~ msgstr "устаўка %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " від: %s %s " + +#~ msgid "left:\n" +#~ msgstr "левы:\n" + +#~ msgid "right:\n" +#~ msgstr "правы:\n" + +#~ msgid "%s changed during execution of %s" +#~ msgstr "%s зьменены цягам часу выкананьня %s" + +#~ msgid "%s/.. changed during execution of %s" +#~ msgstr "%s/.. зьменены цягам часу выкананьня %s" + +#~ msgid "error in %s: %s" +#~ msgstr "памылка ў %s: %s" + +#~ msgid "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "options (always true): -daystart -depth -follow --help\n" +#~ " -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev\n" +#~ "tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +#~ msgstr "" +#~ " ВЫРАЗ1 -o ВЫРАЗ2 ВЫРАЗ1 -or ВЫРАЗ2 ВЫРАЗ1 , ВЫРАЗ2\n" +#~ "выбараў (заўсёды ісьціна): -daystart -depth -follow --help\n" +#~ " -maxdepth УЗРОЎНІ -mindepth УЗРОЎНІ -mount -noleaf --version -xdev\n" +#~ "праверак (N можа быць +N ці -N альбо N): -amin N -anewer ФАЙЛ -atime N -" +#~ "cmin N\n" + +#~ msgid "" +#~ "Usage: %s [-d path | --database=path] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] pattern...\n" +#~ msgstr "" +#~ "Выкарыстаньне: %s [-d шлях | --database=шлях] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] узор...\n" + +#~ msgid "unmatched %s quote" +#~ msgstr "несупадаюць %s двукосьсі" diff --git a/po/bg.po b/po/bg.po new file mode 100644 index 0000000..85ad1c0 --- /dev/null +++ b/po/bg.po @@ -0,0 +1,1386 @@ +# Translation of findutils to Bulgarian +# Copyright (C) 2006 Free Software Foundation, Inc. +# This file is distributed under the same license as the findutils package. +# Anton Zinoviev , 2006. +# +# Look at the CHECK string. +# +# This file should be sent to translation@iro.umontreal.ca with the +# following subject line: TP-Robot findutils-VERSION.bg.po +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.3.7\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2007-06-25 14:40+0300\n" +"Last-Translator: Anton Zinoviev \n" +"Language-Team: Bulgarian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "недопустим аргумент %s за %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "двусмислен аргумент %s за %s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Допустими аргументи са:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "грешка при запис" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Непозната системна грешка" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: опцията „%s“ е двусмислена\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: опцията „--%s“ не допуска аргумент\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: опцията „%c%s“ не допуска аргумент\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: опцията „%s“ изисква аргумент\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: непозната опция „--%s“\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: непозната опция „%c%s“\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: неправилна опция -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: неправилна опция -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: опцията изисква аргумент -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: опцията „-W %s“ е двусмислена\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: опцията „-W %s“ не допуска аргумент\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "не може да се установи текущият каталог" + +#: gnulib/lib/openat-die.c:46 +#, fuzzy +msgid "failed to return to initial working directory" +msgstr "Неуспешна смяна на текущия каталог" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "„" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "“" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "" + +#: gnulib/lib/regcomp.c:137 +#, fuzzy +msgid "Invalid regular expression" +msgstr "неправилен израз" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: gnulib/lib/regcomp.c:164 +#, fuzzy +msgid "Invalid range end" +msgstr "Недопустим аргумент %s за -used" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "" + +#: gnulib/lib/regcomp.c:170 +#, fuzzy +msgid "Invalid preceding regular expression" +msgstr "неправилен израз" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "" + +# Клавишът О (латинско) генерира "Д" според подредбата по БДС +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[дДoOyY]" + +# Клавишът K (латинско) генерира "Н" според подредбата по БДС +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[нНkKnN]" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "неправилен аргумент „%s“ за „%s“" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "неправилен аргумент „%s“ за „%s“" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "реда с аргументи е твърде дълъг" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "не може да се установи текущият каталог" + +#: find/find.c:204 +msgid "cannot stat current directory" +msgstr "не може да се прочетат атрибутите на текущия каталог" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "Внимание: файловата система %s бе размонтирана неотдавна." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "Внимание: файловата система %s бе монтирана неотдавна." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s е изменен по време на изпълнението на %s (стар номер на устройство %ld, " +"нов номер на устройство %ld, типът на файловата система е %s) [ref %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s е изменен по време на изпълнението на %s (стар номер на i-възел %ld, " +"нов номер на i-възел %ld, типът на файловата система е %s) [ref %ld]" + +#: find/find.c:992 +#, fuzzy, c-format +msgid "Failed to safely change directory into %s" +msgstr "Неуспешна смяна на текущия каталог" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" +"Символната връзка „%s“ е част от цикъл в йерархията на каталозите; соченият " +"каталог вече е бил посещаван." + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" +"Открит бе цикъл във файловата система; „%s“ има същия номер на устройство и " +"i-възел като каталога, който е %d %s." + +#: find/find.c:1108 +#, fuzzy +msgid "level higher in the file system hierarchy" +msgstr "ниво по-високо във йерархията на файловата система" + +#: find/find.c:1109 +#, fuzzy +msgid "levels higher in the file system hierarchy" +msgstr "нива по-високо в йерархията на файловата система" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "внимание: символната връзка %s не се следва" + +#: find/find.c:1398 +#, fuzzy, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" +"ВНИМАНИЕ: Броят твърди връзки за %s е погрешен (прочетен е st_nlink=%d, но " +"вече има повече от %d подкаталози). Това може да се дължи на програмен " +"дефект в драйвера на използваната файлова система. Автоматично се включва " +"опцията „-noleaf“ на find. В предходните резултати може и да са били " +"пропуснати по погрешка някои каталози." + +#: find/fstype.c:250 +msgid "unknown" +msgstr "непознат" + +#: find/ftsfind.c:298 +#, fuzzy, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" +"Открит бе цикъл във файловата система; „%s“ има същия номер на устройство и " +"i-възел като каталога, който е %d %s." + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "Внимание: изглежда, че файлът %s има режим 0000" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"внимание: задали сте опцията „%s“ след неопционния аргумент %s, макар че не " +"е позиционна (опцията %s влияе както на тестовете, описани преди нея, така и " +"на тестовете след нея). Моля, задавайте опциите преди всички други " +"аргументи.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"внимание: опцията „-d“ е остаряла; моля, вместо нея използвайте „-depth“ тъй " +"като тази опция е според стандарта POSIX." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" +"%s не е име на съществуваща група и не изглежда като номер на група, защото " +"има неочакван суфикс %s" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "%s не е име на съществуваща група" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "аргументът на -group е празен, а трябва да бъде име на група" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"\n" +"по подразбиране пътят е текущият каталог; изразът по подразбиране е „-" +"print“\n" +"изразът се състои от оператори, опции, тестове и действия:\n" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"оператори (в намаляващ приоритет; при липса на оператор се подразбира -" +"and):\n" +" ( ИЗРАЗ ) ! ИЗРАЗ -not ИЗРАЗ ИЗРАЗ1 -a ИЗРАЗ2 ИЗРАЗ1 -and " +"ИЗРАЗ2\n" +" ИЗРАЗ1 -o ИЗРАЗ2 ИЗРАЗ1 -or ИЗРАЗ2 ИЗРАЗ1 , ИЗРАЗ2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +"позиционни опции (винаги са истина): -daystart -follow -regextype\n" +"\n" +"нормални опции (винаги са истина, задават се преди другите изрази):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +"тестове (N може да бъде +N, -N или N): -amin N -anewer ФАЙЛ -atime N -cmin " +"N\n" +" -cnewer ФАЙЛ -ctime N -empty -false -fstype ТИП -gid N -group ИМЕ\n" +" -ilname ОБРАЗЕЦ -iname ОБРАЗЕЦ -inum N -iwholename ОБРАЗЕЦ -iregex " +"ОБРАЗЕЦ\n" +" -links N -lname ОБРАЗЕЦ -mmin N -mtime N -name ОБРАЗЕЦ -newer ФАЙЛ" + +#: find/parser.c:1078 +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path ОБРАЗЕЦ -perm [+-]РЕЖИМ -regex ОБРАЗЕЦ\n" +" -readable -writable -executable\n" +" -wholename ОБРАЗЕЦ -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user ИМЕ -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" +"actions: -delete -print0 -printf ФОРМАТ -fprintf ФАЙЛ ФОРМАТ -print \n" +" -fprint0 ФАЙЛ -fprint ФАЙЛ -ls -fls ФАЙЛ -prune -quit\n" +" -exec КОМАНДА ; -exec КОМАНДА {} + -ok КОМАНДА ;\n" +" -execdir КОМАНДА ; -execdir КОМАНДА {} + -okdir КОМАНДА ;\n" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"Докладвайте при откриване на програмни дефекти и следете напредъка на\n" +"поправянето им чрез страницата за докладване на програмни дефекти на\n" +"findutils на http://savannah.gnu.org/ или (ако нямате достъп до уеб)\n" +"чрез електронно писмо до . За грешки в\n" +"българския превод съобщавайте на ." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "проверката на библиотечната функция fnmatch() за правилност пропадна. " + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" +"внимание: Файловите имена на Юникс обикновено не съдържат наклонени черти " +"(макар че файловите пътеки обикновено съдържат такива). Това означава, че " +"при вашата операционна система „%s %s“ по всяка вероятност винаги ще се " +"изчислява като лъжа. Тестът „-wholename“ би могъл да ви се стори по-полезен " +"или може би тестът „-samefile“. Или пък ако е инсталирана версията на grep " +"на ГНУ, може да използвате „find ... -print0 | grep -FzZ %s“." + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" +"Очаква се положително цяло десетично число като аргумент на %s, а не %s" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "Тази система не дава начин да се намери времето на раждане на файл." + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "Не е ясно как %s може да се интерпретира като дата или време" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "Не може да се получи времето на раждане на файла %s" + +#: find/parser.c:1788 +#, c-format +msgid "invalid mode %s" +msgstr "неправилен режим %s" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" +"внимание: посочили сте образец за режим за достъп %s, който е еквивалентен " +"на /000. Смисълът на -perm /000 бе променен да бъде съгласуван с -perm -" +"000, т.е. докато в миналото на него не пасваше нито един файл, в момента му " +"пасват всички файлове." + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "недопустим празен аргумент на -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "неправилен тип „%c“ на -size" + +#: find/parser.c:2058 +#, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "неправилен аргумент „%s%c“ за -size" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" +"Опцията -show-control-chars приема единствен аргумент, който трябва да бъде " +"„literal“ или „safe“" + +#: find/parser.c:2348 +#, c-format +msgid "Invalid argument %s to -used" +msgstr "Недопустим аргумент %s за -used" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "Разрешени свойства:" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "Аргументите на -type трябва да съдържат само една буква" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "Непознат аргумент на -type: %c" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "внимание: непозната обратно наклонена черта „\\%c“" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "грешка: %s в края на форматен низ" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "внимание: непозната форматна директива „%%%c“" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "грешка: форматната директива „%%%c“ е запазена за бъдеща употреба" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" +"Текущият каталог е включен в променливата от обкръжението PATH, което е " +"несигурно при използване на действието %s на find. Моля, премахнете текущия " +"каталог от $PATH (т.е. премахнете „.“ или началните или крайни двоеточия)" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" +"Относителната пътека %s е включна в променливата от обкръжението PATH, което " +"е несигурно при използване на действието %s на find. Моля, премахнете този " +"елемент от $PATH" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" +"Не може да използвате {} при името на команда за -execdir и -okdir, тъй като " +"това създава проблем със сигурността." + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "С -exec%s ... + е позволено само едно използване на {}" + +#: find/parser.c:3066 +msgid "The environment is too large for exec()." +msgstr "Обкръжението е твърде голямо за exec()." + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "аритметично препълване при опит да се пресметне краят на днес" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "стандартна грешка" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "стандартен изход" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "Внимание: не може да се намери времето на раждане на файла %s" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "Не може да се затвори стандартният вход" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "Неуспешна смяна на текущия каталог" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "не може да се създаде нов процес с fork" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "изчакване на грешка за %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s бе прекратен със сигнал %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "неправилен израз" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" +"неправилен израз; използвали сте двуместният оператор „%s“ с нищо преди него." + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "между „%s“ и „)“ се очакваше израз" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "след „%s“ се очаква израз" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "неправилен израз; има твърде много „)“" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" +"неправилен израз; очакваше се някъде да се срещне затваряща скоба „)“, но " +"такава не бе открита. Вероятно след „%s“ има нужда от допълнителен предикат." + +#: find/tree.c:149 +msgid "invalid expression; empty parentheses are not allowed." +msgstr "неправилен израз; не се позволяват празни скоби." + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" +"неправилен израз; очакваше се някъде да се срещне затваряща скоба „)“, но " +"такава не бе открита." + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "Опа! Неправилен тип на израза!" + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "Опа! Неправилен тип на израза (%d)!" + +#: find/tree.c:1228 +#, c-format +msgid "paths must precede expression: %s" +msgstr "пътищата трябва да предхождат израза: %s" + +#: find/tree.c:1237 +#, c-format +msgid "unknown predicate `%s'" +msgstr "непознат предикат „%s“" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "неправилен предикат „%s“" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "неправилен аргумент „%s“ за „%s“" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "липсващ аргумент за „%s“" + +#: find/tree.c:1344 +msgid "you have too many ')'" +msgstr "има твърде много „)“" + +#: find/tree.c:1349 +#, c-format +msgid "unexpected extra predicate '%s'" +msgstr "неочакван допълнителен предикат „%s“" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "неочакван допълнителен предикат" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "Опа! Неправилно вмъкване по подразбиране на оператор „И“!" + +#: find/util.c:157 +#, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Използване: %s [-H] [-L] [-P] [-Oниво] [-D " + +#: find/util.c:159 +#, c-format +msgid "] [path...] [expression]\n" +msgstr "] [път...] [израз]\n" + +#: find/util.c:748 +#, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "Пренебрегва се непознатият флаг за програмно тестване %s" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "Празен аргумент за опцията -D." + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "Опцията -O трябва непосредствено да се следва от десетично цяло число." + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "Моля, задайте десетично цяло число непосредствено след -O" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "Нреправилно ниво за оптимизация %s" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" +"Нивото за оптимизация %lu е твърде високо. Ако желаете да намирате " +"файловете много бързо, обмислете да използвате locate на ГНУ." + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"Променливата от обкръжението FIND_BLOCK_SIZE не се поддържа. Единственото " +"нещо, което влияе на размера на блока, е променливата POSIXLY_CORRECT" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" + +#: lib/buildcmd.c:293 +#, fuzzy +msgid "argument list too long" +msgstr "реда с аргументи е твърде дълъг" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "Компилиран с използването на gnulib на ГНУ, версия %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Използване: %s [--version | --help]\n" +"или %s най-чести_биграми < файлов-списък > база-данни-на-locate\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Докладвайте за грешки на .\n" +"За грешки в българския превод на .\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +#, fuzzy +msgid "Failed to write to standard output" +msgstr "стандартен изход" + +#: locate/locate.c:150 +msgid "days" +msgstr "дена" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "Аргументът на опцията --max-database-age не трябва да бъде празен" + +#: locate/locate.c:213 locate/locate.c:220 +#, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "недопустим аргумент %s за опцията --max-database-age" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" +"базата данни на locate (%s) съдържа файлово име, по-дълго от това, с което " +"locate може да работи" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "базата данни %s на locate е повредена или грешна" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "Размер на базата данни на locate: %s байта\n" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "Пасващи файлови имена: %s " + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "Всички файлови имена: %s " + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "със съвкупна дължина %s байта" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" +"\n" +"\tот които %s съдържат интервали и/или табулации, " + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" +"\n" +"\t%s съдържат знаци за нов ред, " + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" +"\n" +"\tи %s съдържат знаци и вдигнат старши бит.\n" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" +"Някои файлови имена може да са били филтрирани, поради което не може да се " +"пресметне степента на компресия.\n" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "Степен на компресия %4.2f%% (по-голямото число е по-добре)\n" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "Степен на компресия: неопределена\n" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" +"базата данни на locate (%s) изглежда от тип slocate, но има ниво на " +"сигурност %c, което в момента не се поддържа от GNU findutils" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" +"%s е база данни от тип slocate. Поддръжката за такъв тип е от скоро и е " +"възможно да има проблеми." + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" +"%s е база данни от тип slocate с неподдържано ниво на сигурност %d; пропуска " +"се." + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" +"Посочили сте опцията -E, но тя не може да се използва при база данни тип " +"slocate с ненулево ниво на сигурност. Няма да бъдат генерирани резултати от " +"тази база данни.\n" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "%s е база данни тип slocate. Включва се опцията „-e“." + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" +"Старият формат на базата данни %s на locate е твърде къс, за да бъде валиден" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "Форматът на базата данни %s е %s.\n" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "Базата данни е с кодиране на машинните думи тип little-endian.\n" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "Базата данни е с кодиране на машинните думи тип big-endian.\n" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "Типа на кодиране на машинните думи в базата данни не е ясен.\n" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Използване: %s [-d път | --database=път] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=ТИП]\n" +" [--max-database-age D] [-version] [--help]\n" +" образец...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "не може да се анулират груповите привилегии" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "не може да се анулират привилегиите на потребител (seguid)" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "Привилегиите не може да се анулират напълно" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "не може да се анулират привилегиите за група (setgid)" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" +"внимание: базата данни на locate може да се чете от стандартния вход само " +"веднъж." + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "" +"внимание: базата данни %s е по-стара от %d %s (точната възраст е %.1f %s)" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "неочакван допълнителен предикат „%s“" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "изчакване на грешка за %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" +"Неправилна поредица с обратно наклонена черта %s в описанието на входния " +"разделител." + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" +"Неправилна поредица с обратно наклонена черта %s в описанието на входния " +"разделител; стойностите на знаците не може да превишават %lx." + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" +"Неправилна поредица с обратно наклонена черта %s в описанието на входния " +"разделител; стойностите на знаците не може да превишават %lo." + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" +"Неправилна поредица с обратно наклонена черта %s в описанието на входния " +"разделител; крайните знаци %s не са познати." + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" +"Неправилно описание на входния разделител %s: разделителят трябва да бъде " +"или единичен знак, или поредица с обратно наклонена черта „\\“." + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "обкръжението е твърде голямо за exec" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" +"внимание: стойността %ld за опцията -s е твърде голяма, вместо нея се " +"използва %ld" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "Не може да се отвори входният файл %s" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "Променливите на обкръжението заемат %lu байта\n" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" +"Горна граница на дължината на аргументите според POSIX при тази система: %" +"lu\n" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" +"Най-малка долна граница на дължината на ргументите при всички системи според " +"POSIX: %lu\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "Максимална дължина на командата, която може да се използва: %ld\n" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Размер на командния буфер, който действително се използва: %lu\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" +"\n" +"Сега изпълнението на xargs ще продължи, като ще бъде направен опит да се " +"четат командите. Ако това не е каквото искате да се случи, моля въведете " +"управляващия код за край на файл (Control-D).\n" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" +"Внимание: %s ще се изпълни поне веднъж. Ако не искате това да се случва, " +"натиснете управляващия символ за прекъсване (Control-C).\n" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"%s кавичка без съответна втора кавичка; по подразбиране кавичките са " +"специални за xargs, освен ако използвате опцията -0" + +# CHECK: да се провери използва ли се другаде, освен в xargs/xargs.c +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "Двойна" + +# CHECK: да се провери използва ли се другаде, освен в xargs/xargs.c +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "Единична" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" +"внимание: от входа бе прочетен нулев символ (NUL). Той не може да бъде " +"предаден в списъка на аргументите. Може би ще искате да използвате опцията " +"--null option." + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "реда с аргументи е твърде дълъг" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "грешка при очакване на дъщерен процес" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: завърши с код 255; прекратяване" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: спрян със сигнал %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: прекратен със сигнал %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: неправилно число за опцията -%c\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: стойността на опцията -%c трябва да бъде не по-малка от %ld\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: стойността на опцията -%c трябва да бъде по-малка от < %ld\n" + +#: xargs/xargs.c:1306 +#, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Използване: %s [-0prtx] [--interactive] [--null] [-d|--" +"delimiter=разделител]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=низ-за-край-на-файла]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=брой-редове]]\n" +" [-I replace-str] [-i[низ-за-замяна]] [--replace[=низ-за-замяна]]\n" +" [-n макс-брой-аргументи] [--max-args=макс-брой-аргументи]\n" +" [-s макс-брой-знаци] [--max-chars=макс-брой-знаци]\n" +" [-P макс-брой-процеси] [--max-procs=макс-брой-процеси] [--show-" +"limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=файл]\n" +" [--version] [--help] [команда [начални-аргументи]]\n" + +#~ msgid "block size" +#~ msgstr "блоковият размер" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "внимание: предикатът -ipath е остарял; моля, вместо него използвайте -" +#~ "iwholename." + +#~ msgid "GNU find version %s\n" +#~ msgstr "find на ГНУ, версия %s\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "findutils на ГНУ, версия %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "locate на ГНУ, версия %s\n" + +#~ msgid "argument to --limit" +#~ msgstr "аргумент на --limit" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "xargs на ГНУ, версия %s\n" + +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "Опа! Неправилен тип на израза в mark_stat!" + +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "Опа! Неправилен тип на израза в mark_type!" + +#~ msgid "old" +#~ msgstr "стар" + +#~ msgid "Reducing arg_max (%ld) to arg_size (%ld)\n" +#~ msgstr "Стойността на arg_max (%ld) се намалява до arg_size (%ld)\n" diff --git a/po/boldquot.sed b/po/boldquot.sed new file mode 100644 index 0000000..4b937aa --- /dev/null +++ b/po/boldquot.sed @@ -0,0 +1,10 @@ +s/"\([^"]*\)"/“\1”/g +s/`\([^`']*\)'/‘\1’/g +s/ '\([^`']*\)' / ‘\1’ /g +s/ '\([^`']*\)'$/ ‘\1’/g +s/^'\([^`']*\)' /‘\1’ /g +s/“”/""/g +s/“/“/g +s/”/”/g +s/‘/‘/g +s/’/’/g diff --git a/po/ca.po b/po/ca.po new file mode 100644 index 0000000..6a11912 --- /dev/null +++ b/po/ca.po @@ -0,0 +1,1418 @@ +# Catalan translation of GNU fileutils. +# Copyright © 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +# Jordi Mallach , 2002, 2003, 2004, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.2.27\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2006-05-20 14:54+0200\n" +"Last-Translator: Jordi Mallach \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "l'argument %s no és vàlid per a %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "l'argument %s és ambigu per a %s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Els arguments vàlids són:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "S'ha produït un error desconegut del sistema" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: l'opció «%s» és ambigu\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: l'opció «--%s» no accepta cap argument\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: l'opció «%c%s» no accepta cap argument\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: l'opció «%s» requereix un argument\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "" +"%s: opció «--%s» no reconeguda\n" +"\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: opció «%c%s» no reconeguda\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: opció il·legal -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: opció no vàlida -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: l'opció requereix un argument -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: l'opció «-W %s» és ambigua\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: l'opció «-W %s» no accepta cap argument\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "no es pot obtenir el directori actual" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "«" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "»" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Èxit" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "No hi ha cap coincidència" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Expressió regular no vàlida" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Caràcter de seqüència invàlid" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Caràcter de nom de clase no vàlid" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Barra invertida final" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Referència cap enrere no vàlida" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "[ o [^ no emparellat" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "( o \\( no emparellat" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "\\{ no emparellat" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Contingut no vàlid de \\{\\}" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Final de rang no vàlid" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Memòria exhaurida" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Expressió regular precedent no vàlida" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Final prematur de la expressió regular" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Expressió regular massa gran" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr ") o \\) no emparellat" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "No hi ha cap expressió regular prèvia" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[sS]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "memòria exhaurida" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "l'argument «%s» no és vàlid per a «%s»" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "l'argument «%s» no és vàlid per a «%s»" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "llista d'arguments massa llarga" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "no es pot obtenir el directori actual" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "no es pot obtenir el directori actual" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "Avís: el sistema de fitxers %s ha estat desmuntat fa poc." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "Avís: el sistema de fitxers %s ha estat muntat fa poc." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s ha canviat durant l'execució de %s (el número de dispositiu vell era %" +"ld, el número del nou dispositiu és %ld, el tipus de sistema de fitxers és %" +"s) [ref %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s ha canviat durant l'execució de %s (el número del node-i vell era %ld, " +"el número del node-i nou és %ld, el tipus de sistema de fitxers és %s) [ref %" +"ld]" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, fuzzy, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" +"L'enllaç simbòlic «%s» és part d'un bucle a la jerarquia del directori. Ja " +"hem visitat el directori al qual apunta." + +#: find/find.c:1104 +#, fuzzy, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" +"S'ha detectat un bucle al sistema de fitxers; «%s» té el mateix número de " +"dispositiu i node d'idenficació que un directori que és %d %s." + +#: find/find.c:1108 +#, fuzzy +msgid "level higher in the file system hierarchy" +msgstr "nivell més alt a la jerarquia del sistema de fitxers" + +#: find/find.c:1109 +#, fuzzy +msgid "levels higher in the file system hierarchy" +msgstr "nivells més alt a la jerarquia del sistema de fitxers" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "avís: no es seguirà l'enllaç simbòlic %s" + +#: find/find.c:1398 +#, fuzzy, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" +"AVÍS: el compte d'enllaços durs és incorrecte per a %s: això pot ser un " +"error al vostre controlador del sistema de fitxers. S'està habilitant " +"automàticament l'opció -noleaf. Els resultats anteriors poden no haver " +"inclós directoris que s'haurien d'haver cercat." + +#: find/fstype.c:250 +msgid "unknown" +msgstr "desconegut" + +#: find/ftsfind.c:298 +#, fuzzy, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" +"S'ha detectat un bucle al sistema de fitxers; «%s» té el mateix número de " +"dispositiu i node d'idenficació que un directori que és %d %s." + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"avís: he especificat l'opció %s després d'un argument no-opció %s, però les " +"opcions no són posicionals (%s afecta a les comprovacions especificades " +"abans d'ella com també aquelles especificades després d'ella). Si us plau, " +"especifiqueu les opcions abans d'altres arguments.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"avís: l'opció -d està desaconsellada; si us plau, utilitzeu -depth en el seu " +"lloc, ja que aquesta és una funcionalitat que compleix amb POSIX." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"\n" +"el camí per defecte és el directori actual; l'expressió per defecte és -" +"print\n" +"l'expressió pot consistir d'operadors, opcions, avaluacions i accions:\n" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"operadors (prioritat decreixent; -and és implícit quan no es donen altres):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +"opcions posicionals (sempre vertaderes): -daystart -follow -regextype\n" +"opcions normals (sempre vertaderes, especificades abans d'altres " +"expressions):\n" +" -depth -help -maxdepth NIVELLS -mindepth NIVELLS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +"avaluacions (N pot ser +N o -N o N): -amin N -anewer FITXER -atime N -cmin " +"N\n" +" -cnewer FITXER -ctime N -empty -false -fstype TIPUS -gid N -group NOM\n" +" -ilname PATRÓ -iname PATRÓ -inum N -iwholename PATRÓ -iregex PATRÓ\n" +" -links N -lname PATRÓ -mmin N -mtime N -name PATRÓ -newer FITXER" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path PATRÓ -perm [+-]MODE -regex PATRÓ\n" +" -wholename PATRÓ -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NOM -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" +"accions: -delete -print0 -printf FORMAT -fprintf FORMAT FITXER -print \n" +" -fprint0 FITXER -fprint FITXER -ls -fls FITXER -prune -quit\n" +" -exec ORDRE ; -exec ORDRE {} + -ok ORDRE ;\n" +" -execdir ORDRE ; -execdir ORDRE {} + -okdir ORDRE ;\n" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"Informeu (i feu un seguiment del procés de solució) dels errors a través de " +"la\n" +"pàgina d'informes d'error de findutils en http://savannah.gnu.org/ o, si no\n" +"teniu accés a la web, enviant correu a ." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "" +"la comprovació de sanitat de la funció fnmatch() de la biblioteca ha fallat." + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" +"avís: els noms de fitxers de Unix no contenen barres (però sí els camins). " +"Això vol dir que «%s %s» probablement sempre avaluarà com a fals en aquest " +"sistema. És possible que la comprovació «-wholename» siga més útil, o potser " +"«-samefile». Alternativament, si esteu utilitzant GNU grep, podeu utilitzar " +"«find ... -print0 | grep -FzZ %s»." + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, fuzzy, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "No s'ha pogut obrir el fitxer d'entrada «%s»" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "el mode «%s» no és vàlid" + +#: find/parser.c:1807 +#, fuzzy, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" +"avís: heu especificat un patró de mode %s que és equivalent a 000. El " +"significat de -perm /000 canviarà prompte per a que siga consistent amb -" +"perm -000; això vol dir, de moment no concorda amb cap fitxer, però prompte " +"canviarà per a que concorde amb tots." + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "l'argument nul no és vàlid per a -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "el tipus de -size «%c» no vàlid" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "l'argument «%s» no és vàlid per a «%s»" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "l'argument %s no és vàlid per a %s" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "Funcionalitats habilitades: " + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "avís: seqüència d'escapament «\\%c» no reconegut" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "avís: directiva de format «%%%c» no reconeguda" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" +"El directori actual està inclós a la variable d'entorn PATH, el qual és " +"insegur en combinació amb l'acció %s de find. Elimineu el directori actual " +"del vostre $PATH (és a dir, elimineu «.» o els dos punts del principi o " +"final)" + +#: find/parser.c:2921 +#, fuzzy, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" +"El directori actual està inclós a la variable d'entorn PATH, el qual és " +"insegur en combinació amb l'acció %s de find. Elimineu el directori actual " +"del vostre $PATH (és a dir, elimineu «.» o els dos punts del principi o " +"final)" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" +"No pdeu utilitzar {} dins del nom de la utilitat per a -execdir i -okdir, ja " +"que això és un problema de seguretat potencial." + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "Només es suporta una instància de {} amb -exec%s ... +" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "l'entorn és massa gran per a l'execució" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, fuzzy, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "No s'ha pogut obrir el fitxer d'entrada «%s»" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ?" + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "no es pot fer «fork»" + +# Suggerències? jm +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "error a l'esperar al procés %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s finalitzat pel senyal %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "expressió no vàlida" + +#: find/tree.c:99 +#, fuzzy, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" +"l'expressió no és vàlida; heu utilitzat un operador binari sense res davant " +"d'ell." + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, fuzzy, c-format +msgid "expected an expression after '%s'" +msgstr "s'ha trobat un predicat extra no esperat" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "l'expressió no és vàlida; teniu massa «)»" + +#: find/tree.c:143 +#, fuzzy, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" +"l'expressió no és vàlida; s'esperava un «)» en algun lloc però no s'ha " +"trobat cap." + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "l'expressió no és vàlida; teniu massa «)»" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" +"l'expressió no és vàlida; s'esperava un «)» en algun lloc però no s'ha " +"trobat cap." + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "ep -- el tipus d'expressió no és vàlid!" + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "ep -- el tipus d'expressió (%d) no és vàlid!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "els camins han de precedir la expressió" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "el predicat «%s» no és vàlid" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "el predicat «%s» no és vàlid" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "l'argument «%s» no és vàlid per a «%s»" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "manca un argument per a «%s»" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "l'expressió no és vàlida; teniu massa «)»" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "s'ha trobat un predicat extra no esperat" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "s'ha trobat un predicat extra no esperat" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "oops -- inserció per defecte d'«and» no vàlida!" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Forma d'ús: %s [-H] [-L] [-P] [camí...] [expressió]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Forma d'ús: %s [camí...] [expressió]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "avís: seqüència d'escapament «\\%c» no reconegut" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"La variable d'entorn FIND_BLOCK_SIZE no està suportada, l'única cosa que " +"afecta a la mida dels blocs és la variable d'entorn POSIXLY_CORRECT" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "ordre massa llarga" + +# Açò vol dir que de tots els arguments, només un no cap, no? jm +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "un argument no cap en el límit de mida de la llista d'arguments" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "llista d'arguments massa llarga" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU findutils versió %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Forma d'ús: %s [--version | --help]\n" +" %s biagrames_més_comuns < llista-fitxers > base-de-dades-locate\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Informeu dels errors a .\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "dies" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "l'argument «%s» no és vàlid per a «%s»" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "l'argument «%s» no és vàlid per a «%s»" + +#: locate/locate.c:472 +#, fuzzy, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" +"avís: el camí de la base de dades de locate «%s» té dos punts al principi, i " +"això no és un nom de base de dades vàlid" + +#: locate/locate.c:607 +#, fuzzy, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "la base de dades de locate «%s» és corrupta o invàlida" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "Mida de la base de dades de locate: %s octets\n" + +#: locate/locate.c:899 +#, fuzzy, c-format +msgid "Matching Filenames: %s " +msgstr "Noms de fitxers: %s" + +#: locate/locate.c:900 +#, fuzzy, c-format +msgid "All Filenames: %s " +msgstr "Noms de fitxers: %s" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "amb una longitud acumulada de %s octets" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" +"\n" +"\tdels quals %s contenen espais, " + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" +"\n" +"\t%s contenen caràcters de retorn de carro, " + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" +"\n" +"\ti %s contenen caràcters amb el bit alt establert.\n" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, fuzzy, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "El ràtio de compressió és %4.2f%%\n" + +#: locate/locate.c:941 +#, fuzzy, c-format +msgid "Compression ratio is undefined\n" +msgstr "El ràtio de compressió és %4.2f%%\n" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, fuzzy, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "la base de dades de locate «%s» és corrupta o invàlida" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "La base de dades %s és en el format %s.\n" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, fuzzy, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Forma d'ús: %s [-d camí | --database=camí] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename]\n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --" +"count]\n" +" [-P | -H | --nofollow] [-L |--follow] [-m | --mmap] [-s | --" +"stdio]\n" +" [-A | --all] [-p | --print] [-r | --regex] [--regextype=TIPUS]\n" +" [--version] [--help]\n" +" patró...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" +"avís: la base de dades de locate només es pot llegir una vegada des de " +"l'entrada estàndard." + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "avís: la base de dades «%s» té més de %d %s" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "s'ha trobat un predicat extra no esperat" + +# Suggerències? jm +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "error a l'esperar al procés %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" +"La seqüència d'escapament %s és il·legal en una especificació de delimitació " +"d'entrada." + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" +"La seqüència d'escapament %s és il·legal en una especificació de delimitació " +"d'entrada; els valors dels caràcters no han d'excedir %lx." + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" +"La seqüència d'escapament %s és il·legal en una especificació de delimitació " +"d'entrada; els valors dels caràcters no han d'excedir %lo." + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" +"La seqüència d'escapament %s és il·legal en una especificació de delimitació " +"d'entrada; no es reconeixen el caràcters finals %s." + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" +"La seqüència d'escapament %s és il·legal en una especificació de delimitació " +"d'entrada: el delimitador ha de ser un únic caràcter o una seqüència " +"d'escapament que comence amb \\." + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "l'entorn és massa gran per a l'execució" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, fuzzy, c-format +msgid "Cannot open input file %s" +msgstr "No s'ha pogut obrir el fitxer d'entrada «%s»" + +#: xargs/xargs.c:688 +#, fuzzy, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "Les vostres variables d'entorn utilitzen %ld octets\n" + +#: xargs/xargs.c:691 +#, fuzzy, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" +"límits inferior i superior POSIX per a la mida dels arguments: %ld, %ld\n" + +#: xargs/xargs.c:694 +#, fuzzy, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" +"límits inferior i superior POSIX per a la mida dels arguments: %ld, %ld\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "La mida màxima de l'ordre que podem utilitzar: %ld\n" + +#: xargs/xargs.c:701 +#, fuzzy, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "La mida de la memòria intermèdia que s'està utilitzant: %ld\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"s'ha trobat una cometa %s no emparellada. Per defecte, les cometes són " +"especials per a xargs a no ser que s'utilitze l'opció -O" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "doble" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "simple" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "línia d'arguments massa llarga" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "error a l'esperar al procés fill" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: ha acabat amb estat 255; avortant" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: interromput pel senyal %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: terminat pel senyal %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: número no vàlid per a l'opció -%c\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: el valor per a l'opció -%c ha de ser >= %ld\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: el valor per a l'opció -%c ha de ser < %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Forma d'ús: %s [-0prtx] [--interactive] [--null] [-d|--deliminter=delim]\n" +" [-E cadena-eof] [-e[cadena-eof]] [--eof=[cadena-eof]]\n" +" [-L màx-línies] [-l[màx-línies] [--max-lines[=màx-línies]]\n" +" [-I cadena-de-reemplaçament] [-i[cadena-de-reemplaçament]]\n" +" [--replace=[cadena-de-reemplaçament]]\n" +" [-n màx-arguments] [--max-args=màx-arguments]\n" +" [-s màx-caràcters] [--max-chars=màx-caràcters]\n" +" [-P màx-processos] [--max-procs=màx-processos]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=fitxer]\n" +" [--version] [--help] [ordre [arguments-inicials]]\n" + +#~ msgid "block size" +#~ msgstr "mida del bloc" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "avís: el predicat -ipath està desaconsellat; utilitzeu -iwholename en el " +#~ "seu lloc." + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find versió %s\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU findutils versió %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate versió %s\n" + +#~ msgid "argument to --limit" +#~ msgstr "argument per a --limit" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs versió %s\n" + +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "ep -- el tipus d'expressió no és vàlid!" + +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "ep -- el tipus d'expressió no és vàlid!" + +#~ msgid "old" +#~ msgstr "vella" + +#, fuzzy +#~ msgid "Reducing arg_max (%lu) to arg_size (%lu)\n" +#~ msgstr "S'està reduint arg_max (%ld) a arg_size (%ld)\n" + +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "accions: -exec ORDRE ; -fprint FITXER -fprint0 FITXER -fprintf FITXER " +#~ "FORMAT\n" +#~ " -fls FITXER -ok ORDRE ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" + +# "Llista de predicats?" jm +#~ msgid "Predicate List:\n" +#~ msgstr "Llista de predicats:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "Arbre d'avaluació\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Arbre d'avaluació optimitzat:\n" + +#~ msgid "Optimized command line:\n" +#~ msgstr "Línia d'ordres optimitzada:\n" + +# Igual que la gent d'es@li.org, ací està el dubte de si ficar +# "memòria exhaurida", llevant el "virtual", ja que en UNIX no +# hi ha diferència de cara a l'usuari. De moment ho deixe com +# està en l'original, però tenen raó. jm +#~ msgid "virtual memory exhausted" +#~ msgstr "memòria virtual exhaurida" + +#~ msgid "inserting %s\n" +#~ msgstr "s'està inserint %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " tipus: %s %s " + +#~ msgid "left:\n" +#~ msgstr "esquerra:\n" + +#~ msgid "right:\n" +#~ msgstr "dereta:\n" + +#~ msgid "[stat called here] " +#~ msgstr "[s'ha cridat a stat aquí] " + +#~ msgid "[type needed here] " +#~ msgstr "[es necessita el tipus aquí] " + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Arbre d'avaluació normalitzat:\n" + +#~ msgid "error in %s: %s" +#~ msgstr "error en %s: %s" + +#~ msgid "" +#~ "warning: locate database path `%s' contains a trailing colon, which is " +#~ "not a valid database name" +#~ msgstr "" +#~ "avís: el camí de la base de dades de locate «%s» conté dos punts al " +#~ "final, i això no és un nom de base de dades vàlid" + +#~ msgid "%s changed during execution of %s" +#~ msgstr "%s ha canviat durant l'execució de %s" + +#~ msgid "%s/.. changed during execution of %s" +#~ msgstr "%s/.. ha canviat durant l'execució de %s" + +#~ msgid "unmatched %s quote" +#~ msgstr "cometa %s no emparellada" diff --git a/po/da.po b/po/da.po new file mode 100644 index 0000000..da5ba65 --- /dev/null +++ b/po/da.po @@ -0,0 +1,1383 @@ +# Danish translation of GNU findutils. +# Copyright (C) 2000, 03, 04, 05 Free Software Foundation, Inc. +# Ole Laursen , 2000, 03, 04, 05. +# +# Konventioner: +# +# positional -> positionsafhængig +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.2.24\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2005-08-01 18:25+0200\n" +"Last-Translator: Ole Laursen \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "ugyldig parameter %s til %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "tvetydig parameter %s til %s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Gyldige parametre er:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Ukendt systemfejl" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: tilvalget '%s' er tvetydigt\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: tilvalget '--%s' må ikke have en parameter\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: tilvalget '%c%s' må ikke have en parameter\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: tilvalget '%s' skal have en parameter\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: ukendt tilvalg '--%s'\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: ukendt tilvalg '%c%s'\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: ugyldigt tilvalg - %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: ugyldigt tilvalg - %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: tilvalget skal have en parameter - %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: tilvalget '-W %s' er tvetydigt\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: tilvalget '-W %s' skal ikke have en parameter\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "kan ikke hente det aktuelle katalog" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "'" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "'" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Succes" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "Intet passende fundet" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Ugyldigt regulært udtryk" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Ugyldigt sammenligningstegn" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Ugyldigt tegnklassenavn" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Afsluttende omvendt skråstreg" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Ugyldig tilbagereference" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Uafbalanceret [ eller [^" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Uafbalanceret ( eller \\(" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Uafbalanceret \\{" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Indholdet af \\{\\} er ugyldigt" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Ugyldig intervalafslutning" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Løbet tør for hukommelse" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Forudgående regulært udtryk er ugyldigt" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "For tidlig afslutning på det regulære udtryk" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Det regulære udtryk er for stort" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Uafbalanceret ) eller \\)" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "Intet foregående regulært udtryk" + +# tillad både 'j' eller 'J' såvel som 'y' eller 'Y' til ja/nej-spørgsmål +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[yYjJ]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +#, fuzzy +msgid "memory exhausted" +msgstr "Løbet tør for hukommelse" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "ugyldig parameter '%s' til '%s'" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "ugyldig parameter '%s' til '%s'" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "parameterliste for lang" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "kan ikke hente det aktuelle katalog" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "kan ikke hente det aktuelle katalog" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "Advarsel: filsystemet %s er blevet afmonteret for nylig." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "Advarsel: filsystemet %s er blevet monteret for nylig." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s ændrede sig under kørsel af %s (tidligere enhedsnummer %ld, nyt " +"enhedsnummer %ld, filsystemtype er %s) [ref %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s ændrede sig under kørsel af %s (tidligere inode-nummer %ld, nyt inode-" +"nummer %ld, filsystemtype er %s) [ref %ld]" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, fuzzy, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" +"Symbolsk kæde '%s' er del af en løkke i kataloghierarkiet; det katalog som " +"den peger på, er allerede blevet besøgt." + +#: find/find.c:1104 +#, fuzzy, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" +"Filsystemsløkke fundet; '%s' har det samme enhedsnummer og indekseringsknude " +"som et katalog hvilket er %d %s." + +#: find/find.c:1108 +#, fuzzy +msgid "level higher in the file system hierarchy" +msgstr "niveau højere i filsystemshierarkiet" + +#: find/find.c:1109 +#, fuzzy +msgid "levels higher in the file system hierarchy" +msgstr "niveauer højere i filsystemshierarkiet" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "advarsel: kunne ikke følge det symbolske link %s" + +#: find/find.c:1398 +#, fuzzy, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" +"ADVARSEL: Antallet af hårde kæder for %s er forkert: dette kan være en fejl " +"i styringsprogram til filsystemet. Slår automatisk find's tilvalg -noleaf " +"til. Tidligere resultater kan have mislykket at medtage kataloger som skulle " +"have været gennemsøgt." + +#: find/fstype.c:250 +msgid "unknown" +msgstr "ukendt" + +#: find/ftsfind.c:298 +#, fuzzy, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" +"Filsystemsløkke fundet; '%s' har det samme enhedsnummer og indekseringsknude " +"som et katalog hvilket er %d %s." + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"advarsel: du har angivet tilvalget %s efter parameteren %s som ikke er et " +"tilvalg, men tilvalg er ikke positionsafhængige (tilvalget %s påvirker både " +"test angivet før og efter det); angiv venligst tilvalg før andre parametre.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"advarsel: tilvalget -d er forældet; benyt -depth i stedet som er i " +"overenstemmelse med POSIX." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"\n" +"hvis ikke andet angivet er stien det aktuelle katalog og udtrykket -print\n" +"udtryk kan bestå af: operatorer, tilvalg, test og handlinger:\n" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"operatorer (i aftagende prioritet, udeladelse medfører -and):\n" +" ( UDTR ) ! UDTR -not UDTR UDTR1 -a UDTR2 UDTR1 -and UDTR2\n" +" UDTR1 -o UDTR2 UDTR1 -or UDTR2 UDTR1 , UDTR2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +"positionsafhængige tilvalg (altid sande): -daystart -follow -regextype\n" +"\n" +"normale tilvalg (altid sande, angives før andre udtryk): -depth\n" +" -depth --help -maxdepth NIVEAUER -mindepth NIVEAUER -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +"test (N kan være +N eller -N eller N): -amin N -anewer FIL -atime N -cmin N\n" +" -cnewer FIL -ctime N -empty -false -fstype TYPE -gid N -group NAVN\n" +" -ilname MØNSTER -iname MØNSTER -inum N -iwholename MØNSTER -iregex " +"MØNSTER\n" +" -links N -lname MØNSTER -mmin N -mtime N -name MØNSTER -newer FIL" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path MØNSTER -perm [+-]RETTIGHEDER -regex MØNSTER\n" +" -wholename MØNSTER -size N[bckwMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAVN -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" +"handlinger: -delete -print0 -printf FORMAT -fprint FIL FORMAT -print \n" +" -fprint0 FIL -fprint FIL -ls -fls FIL -prune -quit\n" +" -exec KOMMANDO ; -exec KOMMANDO {} + -ok KOMMANDO ;\n" +" -execdir KOMMANDO ; -execdir KOMMANDO {} + -okdir KOMMANDO ;\n" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"Rapportér (og følg fremgangen på) fejl via findutils' fejlrapporteringsside\n" +"på http://savannah.gnu.org/ eller, hvis du ikke kan tilgå denne, ved\n" +"at sende et brev til ." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "fornuftighedstjek af biblioteksfunktionen fnmatch() mislykkedes." + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" +"advarsel: Unix-filnavne indeholder som regel ikke skråstreger (selvom stier " +"gør). Det betyder at '%s %s' sandsynligvis vil være falsk altid på dette " +"system. Muligvis vil testen '-wholename' eller måske '-samefile' være mere " +"brugbar. Alternativt kan du hvis du bruger GNU grep, benytte 'find ... -" +"print0 | grep -FzZ %s'." + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, fuzzy, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "Kan ikke åbne inddatafilen '%s'" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "ugyldig tilstand '%s'" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "ugyldig tom parameter til -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "ugyldig -size type '%c'" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "ugyldig parameter '%s' til '%s'" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "ugyldig parameter %s til %s" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "Faciliteter aktiveret: " + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "advarsel: ukendt undvigetegn '\\%c'" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "advarsel: ukendt formatteringsdirektiv '%%%c'" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" +"Det aktuelle katalog er medtaget i miljøvariablen PATH hvilket er usikkert " +"når det kombineres med handlingen %s til find. Fjern venligst det aktuelle " +"katalog fra din $PATH (dvs. fjern \".\" eller begyndende og afsluttende " +"koloner)" + +#: find/parser.c:2921 +#, fuzzy, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" +"Det aktuelle katalog er medtaget i miljøvariablen PATH hvilket er usikkert " +"når det kombineres med handlingen %s til find. Fjern venligst det aktuelle " +"katalog fra din $PATH (dvs. fjern \".\" eller begyndende og afsluttende " +"koloner)" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" +"Det kan ikke bruge {} i programnavnet for -execdir og -okdir fordi der er et " +"potentielt sikkerhedsproblem." + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "Kun en forekomst af {} er understøttet med -exec%s ... +" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "miljø for stort til at eksekvere" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, fuzzy, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "Kan ikke åbne inddatafilen '%s'" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +# der er plads nok at tage af +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "kan ikke fraspalte en ny proces" + +# ditto, ingen grund til kryptiskhed +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "fejl i forbindelse med at vente på %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s afsluttet af signal %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "ugyldigt udtryk" + +#: find/tree.c:99 +#, fuzzy, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "ugyldigt udtryk; binær operator uden noget foran" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, fuzzy, c-format +msgid "expected an expression after '%s'" +msgstr "uventet ekstra udsagn" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "ugyldigt udtryk; for mange ')'" + +#: find/tree.c:143 +#, fuzzy, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "ugyldigt udtryk; ')' var forventet, men blev ikke fundet" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "ugyldigt udtryk; for mange ')'" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "ugyldigt udtryk; ')' var forventet, men blev ikke fundet" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "ups - ugyldig udtrykstype!" + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "ups - ugyldig udtrykstype (%d)!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "stier skal stå før udtrykket" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "ugyldigt udsagn '%s'" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "ugyldigt udsagn '%s'" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "ugyldig parameter '%s' til '%s'" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "manglende parameter til '%s'" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "ugyldigt udtryk; for mange ')'" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "uventet ekstra udsagn" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "uventet ekstra udsagn" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "ups - ugyldig automatisk indsættelse af 'and'!" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Brug: %s [-H] [-L] [-P] [sti...] [udtryk]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Brug: %s [sti...] [udtryk]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "advarsel: ukendt undvigetegn '\\%c'" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"Miljøvariablen FIND_BLOCK_SIZE er ikke understøttet, det eneste der påvirker " +"blokstørrelsen er miljøvariablen POSIXLY_CORRECT" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "kommando for lang" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "kan ikke indpasse enkelt parameter inden for parameterlistestørrelsen" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "parameterliste for lang" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU findutils version %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Brug: %s [--version | --help]\n" +"eller %s mest-brugte-bigrammer < liste > locate-database\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Rapportér fejl til (oversættelsesfejl til " +").\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "dage" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "ugyldig parameter '%s' til '%s'" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "ugyldig parameter '%s' til '%s'" + +#: locate/locate.c:472 +#, fuzzy, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" +"advarsel: locate-databasestien '%s' starter med et kolon hvilket ikke er et " +"gyldigt databasenavn" + +#: locate/locate.c:607 +#, fuzzy, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "locate-databasen '%s' er ødelagt eller ugyldig" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "Locate-databasestørrelse: %s byte\n" + +#: locate/locate.c:899 +#, fuzzy, c-format +msgid "Matching Filenames: %s " +msgstr "Filnavne: %s " + +#: locate/locate.c:900 +#, fuzzy, c-format +msgid "All Filenames: %s " +msgstr "Filnavne: %s " + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "men en kumulativ længde på %s byte" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" +"\n" +"\taf hvilke %s indeholder mellemrum, " + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" +"\n" +"\t%s indeholder linjeskift, " + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" +"\n" +"\tog %s indeholder tegn med den højeste bit sat.\n" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, fuzzy, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "Komprimeringsforhold %4.2f%%\n" + +#: locate/locate.c:941 +#, fuzzy, c-format +msgid "Compression ratio is undefined\n" +msgstr "Komprimeringsforhold %4.2f%%\n" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, fuzzy, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "locate-databasen '%s' er ødelagt eller ugyldig" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "Database %s er i formatet %s.\n" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, fuzzy, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Brug: %s [-d STI | --database=STI] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename]\n" +" [-l N | --limit=N] [-S | --statistics] [-0 | --null] [-c | --count]\\n" +"\"\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --stdio ]" +"\\n\"\n" +" [-A | --all] [-p | --print] [-r | -regex] [--regextype=TYPE]\n" +" [--version] [--help]\n" +" MØNSTER...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "advarsel: locate-databasen kan kun læses fra standard-ind en gang." + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "advarsel: databasen '%s' er mere end %d %s gammel" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "uventet ekstra udsagn" + +# ditto, ingen grund til kryptiskhed +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "fejl i forbindelse med at vente på %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "miljø for stort til at eksekvere" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, fuzzy, c-format +msgid "Cannot open input file %s" +msgstr "Kan ikke åbne inddatafilen '%s'" + +#: xargs/xargs.c:688 +#, fuzzy, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "Din miljøvariabel optager %ld byte\n" + +#: xargs/xargs.c:691 +#, fuzzy, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "POSIX nedre og øvre grænser på parameterlængde: %ld, %ld\n" + +#: xargs/xargs.c:694 +#, fuzzy, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "POSIX nedre og øvre grænser på parameterlængde: %ld, %ld\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "Maksimal længde af kommando der faktisk kunne bruges: %ld\n" + +#: xargs/xargs.c:701 +#, fuzzy, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Størrelsen af det kommandomellemlager som faktisk bruges: %ld\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"uafbalanceret citationstegn %s; som standard er citationstegn specielle for " +"xargs medmindre du bruger tilvalget -0" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "dobbelt" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "enkelt" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "parameterlinje for lang" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "fejl i forbindelse med at vente på afkomproces" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: stoppede med status 255; afbryder" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: standset af signal %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: afsluttet af signal %d" + +# omvendt ordstilling for at undgå sammensætningsproblem +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: ugyldig værdi til tilvalget -%c\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: værdien for tilvalget -%c skal være >= %ld\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: værdien for tilvalget -%c skal være < %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Brug: %s [-0prtx] [-e[eof-str]] [-i[erstatnings-str]] [-l[maks-linjer]]\n" +" [-n maks-param] [-s maks-tegn] [-P maks-proc] [--null] [--eof[=eof-" +"str]]\n" +" [--replace[=erstatningsstreng]] [--max-lines[=maks-linjer]] [--" +"interactive]\n" +" [--max-chars=maks-tegn] [--verbose] [--exit] [--max-procs=maks-" +"processer]\n" +" [--max-args=maks-parametre] [--no-run-if-empty] [--arg-file=fil]\n" +" [--version] [--help] [kommando [startparametre]]\n" + +#~ msgid "block size" +#~ msgstr "blokstørrelse" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "advarsel: udsagnet -ipath er forældet; brug venligst -iwholename i stedet." + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find version %s\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU findutils version %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate version %s\n" + +#~ msgid "argument to --limit" +#~ msgstr "parameter til --limit" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs version %s\n" + +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "ups - ugyldig udtrykstype i mark_stat!" + +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "ups - ugyldig udtrykstype i mark_type!" + +#~ msgid "old" +#~ msgstr "gammel" + +#, fuzzy +#~ msgid "Reducing arg_max (%lu) to arg_size (%lu)\n" +#~ msgstr "Reducerer arg_max (%ld) til arg_size (%ld)\n" + +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "handlinger: -exec KOMMANDO ; -fprint FIL -fprint0 FIL -fprintf FIL " +#~ "FORMAT\n" +#~ " -fls FIL -ok KOMMANDO ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "Liste over udsagn:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "Evalueringstræ:\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Optimeret evalueringstræ:\n" + +#~ msgid "Optimized command line:\n" +#~ msgstr "Optimeret kommandolinje:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "løbet tør for virtuel hukommelse" + +#~ msgid "inserting %s\n" +#~ msgstr "indsætter %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " type: %s %s " + +#~ msgid "left:\n" +#~ msgstr "venstre:\n" + +#~ msgid "right:\n" +#~ msgstr "højre:\n" + +#~ msgid "[stat called here] " +#~ msgstr "[stat kaldt her]" + +#~ msgid "[type needed here] " +#~ msgstr "[type påkrævet her]" + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Normaliseret evalueringstræ\n" + +#~ msgid "error in %s: %s" +#~ msgstr "fejl i %s: %s" + +#~ msgid "" +#~ "warning: locate database path `%s' contains a trailing colon, which is " +#~ "not a valid database name" +#~ msgstr "" +#~ "advarsel: locate-databasestien '%s' slutter med et kolon hvilket ikke er " +#~ "et gyldigt databasenavn" + +#~ msgid "%s changed during execution of %s" +#~ msgstr "%s ændret under kørsel af %s" + +#~ msgid "%s/.. changed during execution of %s" +#~ msgstr "%s/.. ændret under kørsel af %s" diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000..a63a6a7 --- /dev/null +++ b/po/de.po @@ -0,0 +1,1310 @@ +# German language file for the GNU findutils +# Copyright (C) 1996 Free Software Foundation, Inc. +# Nils Naumann , 1996, 2000, 2001, 2003. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.1.20\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2003-11-07 21:54+0100\n" +"Last-Translator: Nils Naumann \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "Ungültiges Argument %s für \"%s\"." + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "Mehrdeutiges Argument %s für \"%s\"." + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Gültige Argumente sind:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Unbekannter Systemfehler." + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: Die Option \"%s\" ist mehrdeutig.\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: Die Option \"--%s\" erlaubt kein Argument.\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: Die Option \"%c%s\" erlaubt kein Argument.\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: Die Option \"%s\" erfordert ein Argument.\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: Unerkannte Option \"--%s\".\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: Unerkannte Option \"%c%s\".\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: Unerlaubte Option -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: Ungültige Option -- %c.\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: Die Option erfordert ein Argument -- %c.\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: Die Option \"-W %s\" ist mehrdeutig.\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: Die Option \"-W %s\" gestattet kein Argument.\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "Kann nicht in das aktuelle Verzeichnis wechseln." + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "\"" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "\"" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Erfolg" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "Kein Treffer" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Ungültiger regulärer Ausdruck." + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Ungültiges Vergleichszeichen." + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Ungültiger Zeichenklassenname." + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Angehängter umgekehrter Schrägstrich." + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Ungültiger Rückbezug." + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Nicht korrespondierende [ oder [^." + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Nicht korrespondierende ( oder \\(." + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Nicht korrespondierende \\{." + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Ungültiger Inhalt von \\{\\}" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Ungültiges Bereichsende." + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Der Arbeitsspeicher ist erschöpft." + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Der vorhergehende reguläre Ausdruck ist ungültig." + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Der reguläre Ausdruck ist unfertig." + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Der reguläre Ausdruck ist zu lang." + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Fehlendes korrespondierendes ) oder \\)." + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "Es fehlt ein vorhergehender regulärer Ausdruck." + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[yY]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "Der Arbeitsspeicher ist erschöpft." + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "Ungültiges Argument \"%s\" für \"%s\"." + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "Ungültiges Argument \"%s\" für \"%s\"." + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "Die Argumentliste ist zu lang." + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "Kann nicht in das aktuelle Verzeichnis wechseln." + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "Kann nicht in das aktuelle Verzeichnis wechseln." + +#: find/find.c:384 +#, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "" + +#: find/find.c:394 +#, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "" + +#: find/find.c:490 +#, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:527 +#, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "unbekannt" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +#, fuzzy +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"Das aktuelle Arbeitsverzeichnis und der Ausdruck \"-print\" werden " +"vorgegeben.\n" +"Der Syntax des Ausdruckes ist:\n" +"Operatoren (Im abnehmenden Vorrang, kein Operator bedeutet \"-and\".):\n" +" ( AUSDR ) ! AUSDR -not AUSDR AUSDR1 -a AUSDR2 AUSDR1 -and AUSDR2\n" + +#: find/parser.c:1064 +#, fuzzy +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"Das aktuelle Arbeitsverzeichnis und der Ausdruck \"-print\" werden " +"vorgegeben.\n" +"Der Syntax des Ausdruckes ist:\n" +"Operatoren (Im abnehmenden Vorrang, kein Operator bedeutet \"-and\".):\n" +" ( AUSDR ) ! AUSDR -not AUSDR AUSDR1 -a AUSDR2 AUSDR1 -and AUSDR2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" + +#: find/parser.c:1073 +#, fuzzy +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +" -cnewer DATEI -ctime N -empty -false -fstype TYP -gid N -group NAME\n" +" -ilname SUCHMUSTER -iname SUCHMUSTER -inum N -ipath SUCHMUSTER \n" +" -iregex SUCHMUSTER -links N -lname SUCHMUSTER -mmin N -mtime N \n" +" -name SUCHMUSTER -newer DATEI\n" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path SUCHMUSTER -perm [+-]MODUS -regex SUCHMUSTER\n" +" -size N[bckw] -true -type [bcdpfls] -uid N -used N -user NAME\n" +" -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "" + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "Ungültiger Modus \"%s\"." + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "\"-size\" erfordert ein Argument." + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "Ungültige Einheit \"%c\" für \"-size\"." + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "Ungültiges Argument \"%s\" für \"%s\"." + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "Ungültiges Argument %s für \"%s\"." + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "Warnung: Unerkanntes Fluchtsymbol \"\\%c\"." + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "Warnung: Unerkannte Formatanweisung \"%%%c\"." + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "Der Umgebungsspeicher ist für \"exec\" nicht ausreichend." + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "Kann keinen neuen Prozeß starten." + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "Fehler beim Warten auf das Prozeßende von %s." + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "Der Prozeß %s wurde durch das Signal %d abgebrochen." + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "Ungültiger Ausdruck." + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "" + +#: find/tree.c:121 +#, fuzzy +msgid "invalid expression; you have too many ')'" +msgstr "Ungültiger Ausdruck." + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "Ungültiger Ausdruck." + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "Oops -- ungültiger Ausdruckstyp!" + +#: find/tree.c:231 +#, fuzzy, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "Oops -- ungültiger Ausdruckstyp!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "Der Pfad muß vor dem Suchkriterium stehen." + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "ungültige Option `%s'" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "ungültige Option `%s'" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "Ungültiges Argument \"%s\" für \"%s\"." + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "Fehlendes Argument für \"%s\"." + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "Ungültiger Ausdruck." + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "ungültige Option `%s'" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "Oops -- Das automatische Einfügen von \"-and\" ist ungültig!" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Aufruf: %s [Pfad...] [Suchkriterium]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Aufruf: %s [Pfad...] [Suchkriterium]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "Warnung: Unerkanntes Fluchtsymbol \"\\%c\"." + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "Das Kommando ist zu lang." + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "Kann ein Argument nicht innerhalb der Argumentliste einfügen." + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "Die Argumentliste ist zu lang." + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU find Version %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, fuzzy, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Aufruf: %s häufigste_gemeinsame_Buchstabenpaare < Liste > " +"komprimierte_Liste\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +#, fuzzy +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Fehler bitte an melden.\n" +"Für die deutsche Übersetzung ist die Mailingliste zuständig." + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "Tage" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "Ungültiges Argument \"%s\" für \"%s\"." + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "Ungültiges Argument \"%s\" für \"%s\"." + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "Warnung: Die Datenbank `%s' ist älter als %d %s." + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "ungültige Option `%s'" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "Fehler beim Warten auf das Prozeßende von %s." + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "Der Umgebungsspeicher ist für \"exec\" nicht ausreichend." + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "doppelte" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "einfache" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "Die Argumentzeile ist zu lang." + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "Fehler beim Warten auf das Ende des Kindsprozesses." + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "Prozeß %s mit Rückgabewert 255 beendet. Abbruch!" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "Prozeß %s wurde durch das Signal %d angehalten." + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "Prozeß %s wurde durch das Signal %d abgebrochen." + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: Ungültiger Wert für die \"-%c\" Option.\n" + +#: xargs/xargs.c:1274 +#, fuzzy, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: Der Wert für die \"-%c\" Option muß größer als %ld sein.\n" + +#: xargs/xargs.c:1288 +#, fuzzy, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: Der Wert für die \"-%c\" Option muß kleiner als %ld sein.\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Aufruf: %s [-0prtx] [-e[Dateiendezeichen]] [-i[Ersatzzeichen]]\n" +" [-l[Zeilenanzahl]] [-n Argumentanzahl] [-s Zeichenanzahl]\n" +" [-P Prozessanzahl] [--null] [--eof[=Dateiendezeichenkette]]\n" +" [--replace[=Ersatzzeichenkette]] [--max-lines[=Zeilenanzahl]]\n" +" [--interactive] [--max-chars=Zeichenanzahl] [--verbose] [--exit]\n" +" [--max-procs=Prozeßanzahl] [--max-args=Argumentanzahl]\n" +" [--no-run-if-empty] [--version] [--help] [Kommando " +"[Anfangsargumente]]\n" + +#~ msgid "block size" +#~ msgstr "Blockgröße" + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find Version %s\n" + +#, fuzzy +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU find Version %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate Version %s\n" + +#, fuzzy +#~ msgid "argument to --limit" +#~ msgstr "Die Argumentzeile ist zu lang." + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs Version %s\n" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "Oops -- ungültiger Ausdruckstyp!" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "Oops -- ungültiger Ausdruckstyp!" + +#, fuzzy +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "Aktionen: -exec KOMMANDO ; -fprint DATEI -fprint0 DATEI -fprintf DATEI " +#~ "FORMAT\n" +#~ " -ok KOMMANDO ; -print -print0 -printf FORMAT -prune -ls\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "Optionsliste:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "Auswertbaum:\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Optimierter Auswertbaum:\n" + +#, fuzzy +#~ msgid "Optimized command line:\n" +#~ msgstr "Optimierter Auswertbaum:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "Der virtuelle Arbeitsspeicher ist erschöpft." + +#~ msgid "inserting %s\n" +#~ msgstr "Füge %s ein.\n" + +#~ msgid " type: %s %s " +#~ msgstr " Typ: %s %s " + +#~ msgid "left:\n" +#~ msgstr "links:\n" + +#~ msgid "right:\n" +#~ msgstr "rechts:\n" + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Normalisierter Auswertbaum:\n" + +#~ msgid "%s changed during execution of %s" +#~ msgstr "%s wurde während des Ausführens von %s geändert." + +#~ msgid "%s/.. changed during execution of %s" +#~ msgstr "%s/.. wurde während des Ausführens von %s geändert." + +#~ msgid "error in %s: %s" +#~ msgstr "Fehler in %s: %s." + +#~ msgid "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "options (always true): -daystart -depth -follow --help\n" +#~ " -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev\n" +#~ "tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +#~ msgstr "" +#~ " AUSDR1 -o AUSDR2 AUSDR1 -or AUSDR2 AUSDR1 , AUSDR2\n" +#~ "Optionen (immer wahr): -daystart -depth -follow --help\n" +#~ " -maxdepth EBENEN -mindepth EBENEN -mount -noleaf --version -xdev\n" +#~ "Tests (N kann +N, -N oder N sein): -amin N -anewer File -atime N -cmin N\n" + +#~ msgid "" +#~ "Usage: %s [-d path | --database=path] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] pattern...\n" +#~ msgstr "" +#~ "Aufruf: %s [-d Pfad | --database=Pfad] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] Suchmuster...\n" + +#~ msgid "unmatched %s quote" +#~ msgstr "Fehlendes korrespondierendes %s Anführungszeichen." diff --git a/po/el.po b/po/el.po new file mode 100644 index 0000000..ca51599 --- /dev/null +++ b/po/el.po @@ -0,0 +1,1337 @@ +# translation of findutils-4.2.6.po to Greek +# This file is distributed under the same license as the findutils-4.2.6 package. +# Copyright (C) 2004 Free Software Foundation, Inc. +# Lefteris Dimitroulakis , 2004, 2005. +msgid "" +msgstr "" +"Project-Id-Version: findutils-4.2.6\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2005-01-02 13:54+0200\n" +"Last-Translator: Lefteris Dimitroulakis \n" +"Language-Team: Greek \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.3.1\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "Το όρισμα %s δεν είναι έγκυρο για την %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "Το όρισμα %s είναι ασαφές για την %s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Έγκυρα ορίσματα είναι:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Αγνωστο σφάλμα συστήματος" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: η επιλογή «%s» είναι ασαφής\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: η επιλογή «--%s» δεν επιτρέπει όρισμα\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: η επιλογή «%c%s» δεν επιτρέπει όρισμα\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: η επιλογή «%s» απαιτεί όρισμα\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: μη αναγνωριζόμενη επιλογή «--%s»\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: μη αναγνωριζόμενη επιλογή «%c%s»\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: παράτυπη επιλογή -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: άκυρη επιλογή -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: η επιλογή απαιτεί όρισμα -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: η επιλογή «-W %s» είναι ασαφής\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: η επιλογή «-W %s» δεν επιτρέπει όρισμα\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "Δεν μπορώ να βρώ τον τρέχοντα κατάλογο" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "«" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "»" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Επιτυχία" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "Δεν υπάρχει ταίριασμα" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Άκυρη κανονική έκφραση" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Άκυρος χαρακτήρας διαταξινόμησης" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Άκυρο όνομα κλάσεως χαρακτήρα" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Αντιπλαγία στο τέλος" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Άκυρη παραπομπή προς τα πίσω" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Δε βρέθηκε [ ή [^" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Δε βρέθηκε ( ή \\(" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Δε βρέθηκε \\{" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Το περιεχόμενο του \\{\\} είναι άκυρο" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Ακυρο τέλος περιοχής" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Μνήμη εξαντλημένη" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Η προηγούμενη κανονική έκφραση είναι άκυρη" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Πρόωρο τέλος κανονικής έκφρασης" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Πολύ μεγάλη κανονική έκφραση" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Δε βρέθηκε ) ή \\)" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "Δεν προηγήθηκε κανονική έκφραση" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[yY]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +#, fuzzy +msgid "memory exhausted" +msgstr "Μνήμη εξαντλημένη" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "Το όρισμα «%s» για την «%s» είναι άκυρο" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "Το όρισμα «%s» για την «%s» είναι άκυρο" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "λίστα ορισμάτων πολύ μεγάλη" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "Δεν μπορώ να βρώ τον τρέχοντα κατάλογο" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "Δεν μπορώ να βρώ τον τρέχοντα κατάλογο" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "Το σύστημα αρχείων %s αποπροσαρτήθηκε πρόσφατα." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "Το σύστημα αρχείων %s έχει προσφάτως προσαρτηθεί." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s άλλαξε κατά την εκτέλεση του %s (old device number %ld, new device " +"number %ld, filesystem type is %s) [ref %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s άλλαξε κατά την εκτέλεση του %s (παλαιός αριθμός inode %ld, νέος " +"αριθμός inode %ld, ο τύπος συστήματος αρχείων είναι %s) [ref %ld]" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "άγνωστο" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"προειδοποίηση: έχεις ορίσει την επιλογή %s μετά το non-option όρισμα %s, " +"αλλά η θέση έχει σημασία στις επιλογές (%s επιρρεάζει τα τεστ που ορίζονται " +"τόσο πριν όσο και μετά). Παρακαλώ καθόρισε επιλογές πριν από άλλα " +"ορίσματα.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"προειδοποίηση: η επιλογή -d έχει καταργηθεί, στη θέση της δώσε -depth που " +"συμφωνεί με το POSIX." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +#, fuzzy +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"προεπιλεγμένη διαδρομή είναι ο τρέχων κατάλογος,\n" +"προεπιλεγμένη έκφραση είναι η -print\n" +"η έκφραση μπορεί ν' αποτελείται από:\n" +"τελεστές (μειούμενης προτεραιότητας,\n" +"ο -and υπονοείται όταν δεν δείνονται άλλοι):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2" + +#: find/parser.c:1064 +#, fuzzy +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"προεπιλεγμένη διαδρομή είναι ο τρέχων κατάλογος,\n" +"προεπιλεγμένη έκφραση είναι η -print\n" +"η έκφραση μπορεί ν' αποτελείται από:\n" +"τελεστές (μειούμενης προτεραιότητας,\n" +"ο -and υπονοείται όταν δεν δείνονται άλλοι):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2" + +#: find/parser.c:1068 +#, fuzzy +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +" EXPR1 -o EXPR2 EXPR1 -ή EXPR2 EXPR1 , EXPR2\n" +"επιλογές θέσεως (πάντοτε αληθής): -daystart -follow\n" +"κανονικές επιλογές (πάντοτε αληθής, οριζόμενη πριν από άλλες εκφράσεις): -" +"depth\n" +" --help -maxdepth ΕΠΙΠΕΔΑ -mindepth ΕΠΙΠΕΔΑ -mount -noleaf --version -" +"xdev\n" +" -ignore_readdir_race -noignore_readdir_race\n" +"tests (N μπορεί νάναι +N ή -N ή N): -amin N -anewer ΑΡΧΕΙΟ -atime N -cmin N" + +#: find/parser.c:1073 +#, fuzzy +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +" -cnewer ΑΡΧΕΙΟ -ctime N -empty -false -fstype ΤΥΠΟΣ -gid N -group " +"ΟΝΟΜΑ\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer ΑΡΧΕΙΟ" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user ΟΝΟΜΑ -xtype [bcdpfls]" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"Αναφορές για σφάλματα (and track progress on fixing)\n" +"μέσω της σελίδας findutils bug-reporting\n" +"στο http://savannah.gnu.org/ ή, αν δεν έχεις πρόσβαση στο web,\n" +"αποστέλοντας μήνυμα στη διεύθυνση ." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "η συνάρτηση βιβλιοθήκης fnmatch(), δεν πέρασε τον έλεγχο ακεραιότητος." + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "άκυρη κατάσταση «%s»" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "το όρισμα null είναι άκυρο για την επιλογή -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "Ο τύπος «%c» για την επιλογή -size είναι άκυρος" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "Το όρισμα «%s» για την «%s» είναι άκυρο" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "Το όρισμα %s δεν είναι έγκυρο για την %s" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "προειδοποίηση: μη αναγνωριζόμενη ακολουθία διαφυγής «\\%c»" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "προειδοποίηση: άγνωστη οδηγία μορφοποίησης «%%%c»" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "το περιβάλλον είναι πολύ μεγάλο γιά την εκτέλεση" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "Δεν μπορώ να κλωνοποιήσω" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "σφάλμα περιμένοντας γιά %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s τερματίστηκε από το σήμα %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "άκυρη έκφραση" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, fuzzy, c-format +msgid "expected an expression after '%s'" +msgstr "μη αναμενόμενο extra κατηγόρημα" + +#: find/tree.c:121 +#, fuzzy +msgid "invalid expression; you have too many ')'" +msgstr "άκυρη έκφραση" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "άκυρη έκφραση" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "oops -- άκυρος τύπος έκφρασης!" + +#: find/tree.c:231 +#, fuzzy, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "oops -- άκυρος τύπος έκφρασης!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "οι διαδρομές πρέπει να προηγούνται των εκφράσεων" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "το κατηγόρημα «%s» είναι άκυρο" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "το κατηγόρημα «%s» είναι άκυρο" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "Το όρισμα «%s» για την «%s» είναι άκυρο" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "Το όρισμα για την «%s» απουσιάζει" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "άκυρη έκφραση" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "μη αναμενόμενο extra κατηγόρημα" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "μη αναμενόμενο extra κατηγόρημα" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "oops -- η παρεμβολή της προεπιλεγμένης παραμέτρου «and» είναι άκυρη!" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Χρήση: %s [-H] [-L] [-P] [διαδρομή...] έκφραση]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Χρήση: %s [διαδρομή...] [έκφραση]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "προειδοποίηση: μη αναγνωριζόμενη ακολουθία διαφυγής «\\%c»" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"Η μεταβλητή περιβάλλοντος FIND_BLOCK_SIZE δεν υποστηρίζεται, αυτό που " +"επιρρεάζει το μέγεθος μπλοκ είναι η μεταβλητή περιβάλλοντος POSIXLY_CORRECT" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "διαταγή πολύ μεγάλη" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" +"δεν μπορώ να περιλάβω μοναδικό όρισμα μέσα\n" +"στο περιορισμένο μέγεθος της λίστας ορισμάτων" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "λίστα ορισμάτων πολύ μεγάλη" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU findutils έκδοση %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Χρήση: %s [--version | --help]\n" +"ή %s most_common_bigrams < file-list > locate-database\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Αναφορά σφαλμάτων στην .\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "μέρες" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "Το όρισμα «%s» για την «%s» είναι άκυρο" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "Το όρισμα «%s» για την «%s» είναι άκυρο" + +#: locate/locate.c:472 +#, fuzzy, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" +"προειδοποίη: η διαδρομή «%s» της βάσεως δεδομένων locate περιέχει στην αρχή " +"της της ένα δίστιγμο που δεν αποτελεί έγκυρο όνομα της βάσεως" + +#: locate/locate.c:607 +#, fuzzy, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "η βάση δεδομένων locate «%s» δεν είναι έγκυρη ή έχει υποστεί αλλοίωση" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, fuzzy, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "η βάση δεδομένων locate «%s» δεν είναι έγκυρη ή έχει υποστεί αλλοίωση" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, fuzzy, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Χρήση: %s [-d διαδρομή | --database=διαδρομή] [-e | --existing]\n" +" [-i | --ignore-case] [--wholepath] [--basename] [--limit=N | -l N]\n" +" [--version] [--help] pattern...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "προειδοποίηση: η βάση δεδομένων «%s» είναι περισσότερο από %d %s παλιά" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "μη αναμενόμενο extra κατηγόρημα" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "σφάλμα περιμένοντας γιά %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "το περιβάλλον είναι πολύ μεγάλο γιά την εκτέλεση" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "" + +#: xargs/xargs.c:688 +#, fuzzy, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "Οι μεταβλητές περιβάλλοντος καταλαμβάνουν %ld bytes\n" + +#: xargs/xargs.c:691 +#, fuzzy, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "Άνω και κάτω όριο κατά POSIX για μήκος ορίσματος: %ld, %ld\n" + +#: xargs/xargs.c:694 +#, fuzzy, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "Άνω και κάτω όριο κατά POSIX για μήκος ορίσματος: %ld, %ld\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "Μέγιστο μήκος εντολής που θα μπορούσαμε να χρησιμοποιήσουμε: %ld\n" + +#: xargs/xargs.c:701 +#, fuzzy, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Μέγεθος του buffer εντολών που χρησιμοποιούμε: %ld\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"unmatched %s quote; εκ προεπιλογής τα εισαγωγικά έχουν ειδική σημασία για το " +"xargs εκτός κι αν χρησιμοπείτε την επιλογή -0." + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "διπλά" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "μονά" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "γραμμή ορισμάτων πολύ μεγάλη" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "σφάλμα αναμένοντας τη θυγατρική διεργασία" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: τερματίστηκε με ένδειξη 255, απότομο σταμάτημα" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: σταμάτησε από το σήμα %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: τερματίστηκε από το σήμα %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: άκυρος αριθμός γιά την επιλογή -%c\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s:η τιμή για την επιλογή -%c πρέπει να είναι >= %ld\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: η τιμή για την επιλογή -%c πρέπει να είναι < %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Χρήση: %s [-0prtx] [-e[eof-str]] [-i[replace-str]] [-l[max-lines]]\n" +" [-n max-args] [-s max-chars] [-P max-procs] [--null] [--eof[=eof-" +"str]]\n" +" [--replace[=replace-str]] [--max-lines[=max-lines]] [--interactive]\n" +" [--max-chars=max-chars] [--verbose] [--exit] [--max-procs=max-procs]\n" +" [--max-args=max-args] [--no-run-if-empty] [--version] [--help]\n" +" [command [initial-arguments]]\n" + +#~ msgid "block size" +#~ msgstr "μέγεθος μπλόκ" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "προειδοποίηση: το κατηγόρημα -ipath είναι υπό κατάργηση· παρακαλώ " +#~ "χρησιμοποείστε στη θέση του το -iwholename." + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find έκδοση %s\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU findutils έκδοση %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate έκδοση %s\n" + +#~ msgid "argument to --limit" +#~ msgstr "όρισμα επιλογής --limit" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs έκδοση %s\n" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "oops -- άκυρος τύπος έκφρασης!" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "oops -- άκυρος τύπος έκφρασης!" + +#, fuzzy +#~ msgid "Reducing arg_max (%lu) to arg_size (%lu)\n" +#~ msgstr "Μείωση του arg_max (%ld) σε arg_size (%ld)\n" + +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "ενέργειες: -exec ΕΝΤΟΛΗ ; -fprint ΑΡΧΕΙΟ -fprint0 ΑΡΧΕΙΟ -fprintf ΑΡΧΕΙΟ " +#~ "ΜΟΡΦΗ\n" +#~ " -fls ΑΡΧΕΙΟ -ok ΕΝΤΟΛΗ ; -print -print0 -printf ΜΟΡΦΗ -prune -ls -" +#~ "delete\n" +#~ " -quit\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "Λίστα κατηγορημάτων:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "Δέντρο αξιολόγησης:\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Βελτιστοποιημένο δέντρο αξιολόγησης:\n" + +#, fuzzy +#~ msgid "Optimized command line:\n" +#~ msgstr "Βελτιστοποιημένο δέντρο αξιολόγησης:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "η εικονική μνήμη εξαντλήθηκε" + +#~ msgid "inserting %s\n" +#~ msgstr "παρεμβολή του %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " τύπος: %s %s " + +#~ msgid "left:\n" +#~ msgstr "αριστερό:\n" + +#~ msgid "right:\n" +#~ msgstr "δεξιό:\n" + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Κανονικοποιημένο δέντρο αξιολόγησης:\n" + +#~ msgid "error in %s: %s" +#~ msgstr "σφάλμα στο %s: %s" + +#~ msgid "" +#~ "warning: locate database path `%s' contains a trailing colon, which is " +#~ "not a valid database name" +#~ msgstr "" +#~ "προειδοποίη: η διαδρομή «%s» της βάσεως δεδομένων locate περιέχει στο " +#~ "τέλος της ένα δίστιγμο που δεν αποτελεί έγκυρο όνομα της βάσεως" diff --git a/po/en@boldquot.header b/po/en@boldquot.header new file mode 100644 index 0000000..fedb6a0 --- /dev/null +++ b/po/en@boldquot.header @@ -0,0 +1,25 @@ +# All this catalog "translates" are quotation characters. +# The msgids must be ASCII and therefore cannot contain real quotation +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) +# and double quote (0x22). These substitutes look strange; see +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html +# +# This catalog translates grave accent (0x60) and apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019). +# It also translates pairs of apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019) +# and pairs of quotation mark (0x22) to +# left double quotation mark (U+201C) and right double quotation mark (U+201D). +# +# When output to an UTF-8 terminal, the quotation characters appear perfectly. +# When output to an ISO-8859-1 terminal, the single quotation marks are +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to +# grave/acute accent (by libiconv), and the double quotation marks are +# transliterated to 0x22. +# When output to an ASCII terminal, the single quotation marks are +# transliterated to apostrophes, and the double quotation marks are +# transliterated to 0x22. +# +# This catalog furthermore displays the text between the quotation marks in +# bold face, assuming the VT100/XTerm escape sequences. +# diff --git a/po/en@quot.header b/po/en@quot.header new file mode 100644 index 0000000..a9647fc --- /dev/null +++ b/po/en@quot.header @@ -0,0 +1,22 @@ +# All this catalog "translates" are quotation characters. +# The msgids must be ASCII and therefore cannot contain real quotation +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) +# and double quote (0x22). These substitutes look strange; see +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html +# +# This catalog translates grave accent (0x60) and apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019). +# It also translates pairs of apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019) +# and pairs of quotation mark (0x22) to +# left double quotation mark (U+201C) and right double quotation mark (U+201D). +# +# When output to an UTF-8 terminal, the quotation characters appear perfectly. +# When output to an ISO-8859-1 terminal, the single quotation marks are +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to +# grave/acute accent (by libiconv), and the double quotation marks are +# transliterated to 0x22. +# When output to an ASCII terminal, the single quotation marks are +# transliterated to apostrophes, and the double quotation marks are +# transliterated to 0x22. +# diff --git a/po/eo.po b/po/eo.po new file mode 100644 index 0000000..7d0844c --- /dev/null +++ b/po/eo.po @@ -0,0 +1,1312 @@ +# Esperanto translations for findutils messages +# Copyright (C) 2002, 2004 Free Software Foundation, Inc. +# D. Dale Gulledge , 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.1.20\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2004-01-04 15:27-0500\n" +"Last-Translator: D. Dale Gulledge \n" +"Language-Team: Esperanto \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-3\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "malvalida argumento %s por %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "plursenca argumento %s por %s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Validaj argumentoj estas:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Nekonata sistemeraro" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: opcio `%s' estas plursenca\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: opcio `--%s' ne permesas argumenton\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: opcio `%c%s' ne permesas argumenton\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: opcio `%s' postulas argumenton\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: nerekonata opcio `--%s'\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: nerekonata opcio `%c%s'\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: malpermesata opcio -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: malvalida opcio -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: opcio postulas argumenton -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: opcio `-W %s' estas plursenca\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: opcio `-W %s' malpermesas argumenton\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "ne povas preni aktualan dosierujon" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "`" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "'" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Sukceso" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "Neniu kongrua¼o" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Malvalida regula esprimo" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Malvalida ordiza signo" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Malvalida signoklasnomo" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Sekvanta retroklino" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Malvalida retroreferenco" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Senpara [ aý [^" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Senpara ( aý \\(" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Senpara \\{" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Malvalida enhava¼o de \\{\\}" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Malvalida intervalofino" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Memoro elæerpita" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Malvalida antaýa regulesprimo" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Tro frua fino de regulesprimo" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Regulesprimo tro granda" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Senpara ) aý \\)" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "Neniu antaýa regulesprimo" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[jJ]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "memoro elæerpita" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "malvalida argumento `%s'por `%s'" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "malvalida argumento `%s'por `%s'" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "argumentlisto tro longa" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "ne povas preni aktualan dosierujon" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "ne povas preni aktualan dosierujon" + +#: find/find.c:384 +#, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "" + +#: find/find.c:394 +#, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "" + +#: find/find.c:490 +#, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:527 +#, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "nekonata" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +#, fuzzy +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"defaýlta pado estas la aktuala dosierujo; defaýlta esprimo estas -print\n" +"esprimo povas konsisti de:\n" +"operatoroj (en ordo de malpliiøanta antaýeco; -and estas implicita kie " +"neniuj\n" +"aliaj estas donitaj):\n" +" ( ESPR ) ! ESPR -not ESPR ESPR1 -a ESPR2 ESPR1 -and ESPR2\n" + +#: find/parser.c:1064 +#, fuzzy +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"defaýlta pado estas la aktuala dosierujo; defaýlta esprimo estas -print\n" +"esprimo povas konsisti de:\n" +"operatoroj (en ordo de malpliiøanta antaýeco; -and estas implicita kie " +"neniuj\n" +"aliaj estas donitaj):\n" +" ( ESPR ) ! ESPR -not ESPR ESPR1 -a ESPR2 ESPR1 -and ESPR2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" + +#: find/parser.c:1073 +#, fuzzy +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +" -cnewer DOSIERO -ctime N -empty -false -fstype SPECO -gid N -group " +"NOMO\n" +" -ilname ÞABLONO -iname ÞABLONO -inum N -ipath ÞABLONO -iregex ÞABLONO\n" +" -links N -lname ÞABLONO -mmin N -mtime N -name ÞABLONO -newer DOSIERO\n" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path ÞABLONO -perm [+-]REØIMO -regex ÞABLONO\n" +" -size N[bckw] -true -type [bcdpfls] -uid N -used N -user NOMO\n" +" -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "" + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "malvalida reøimo `%s'" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "malvalida senvalora argumento por -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "malvalida -size speco `%c'" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "malvalida argumento `%s'por `%s'" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "malvalida argumento %s por %s" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "averto: nerekonata eskapsigno `\\%c'" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "averto: nerekonata formatdirektivo `%%%c'" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "medio estas tro granda por exec" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "ne povas forki" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "eraro atendante por %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s æesigita per signalo %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "malvalida esprimo" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "" + +#: find/tree.c:121 +#, fuzzy +msgid "invalid expression; you have too many ')'" +msgstr "malvalida esprimo" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "malvalida esprimo" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "up -- malvalida esprimospeco!" + +#: find/tree.c:231 +#, fuzzy, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "up -- malvalida esprimospeco!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "padoj devas esti antaý ol esprimo" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "malvalida predikato `%s'" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "malvalida predikato `%s'" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "malvalida argumento `%s'por `%s'" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "mankas argumento por `%s'" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "malvalida esprimo" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "malvalida predikato `%s'" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "up -- malvalida defaýlta enþovado de ``and'' (kaj)!" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Uzado: %s [pado...] [esprimo]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Uzado: %s [pado...] [esprimo]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "averto: nerekonata eskapsigno `\\%c'" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "ordono tro longa" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "argumentlista grandecolimo estas tro malgranda por eæ sola argumento" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "argumentlisto tro longa" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU find versio %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, fuzzy, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "Uzado: %s plej_oftaj_dusigna¼oj < listo > kodita_listo\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +#, fuzzy +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Raportu cimoj al (bonvolu angle)." + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "tagoj" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "malvalida argumento `%s'por `%s'" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "malvalida argumento `%s'por `%s'" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "averto: datumbazo `%s'estas pli aøa ol %d %s" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "malvalida predikato `%s'" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "eraro atendante por %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "medio estas tro granda por exec" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "duobla" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "unuobla" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "argumentlinio tro longa" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "eraro atendante ida proceso" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: finis kun stato 255; æesanta" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: haltigita per signalo %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: æesigita per signalo %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: malvalida nombro por -%c opcio\n" + +#: xargs/xargs.c:1274 +#, fuzzy, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: valoro de -%c opcio devas esti >= %ld\n" + +#: xargs/xargs.c:1288 +#, fuzzy, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: valoro de -%c opcio devas esti < %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Uzado: %s [-0prtx] [-e[dosierfina-æeno]] [-i[anstataýa-æeno]]\n" +" [-l[maksimumo-da-linioj]] [-n maksimumo-da-argumentoj]\n" +" [-s maksimumo-da-signoj] [-P maksimumo-da-procesoj] [--null]\n" +" [--eof[=dosierfina-æeno]] [--replace[=anstataýa-æeno]]\n" +" [--max-lines[=maksimumo-da-linioj]] [--interactive]\n" +" [--max-chars=maksimumo-da-signoj] [--verbose] [--exit]\n" +" [--max-procs=maksimumo-da-procesoj] [--max-args=maksimumo-da-" +"argumentoj]\n" +" [--no-run-if-empty] [--version] [--help] [ordono [komencaj-" +"argumentoj]]\n" + +#~ msgid "block size" +#~ msgstr "blokgrandeco" + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find versio %s\n" + +#, fuzzy +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU find versio %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate versio %s\n" + +#, fuzzy +#~ msgid "argument to --limit" +#~ msgstr "argumentlinio tro longa" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs versio %s\n" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "up -- malvalida esprimospeco!" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "up -- malvalida esprimospeco!" + +#, fuzzy +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "agoj: -exec ORDONO ; -fprint DOSIERO -fprint0 DOSIERO -fprintf DOSIERO " +#~ "FORMATO\n" +#~ " -ok ORDONO ; -print -print0 -printf FORMATO -prune -ls\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "Predikatolisto:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "Arbo de Elvalorado:\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Optimumigita Arbo de Elvalorado:\n" + +#, fuzzy +#~ msgid "Optimized command line:\n" +#~ msgstr "Optimumigita Arbo de Elvalorado:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "virtuala memoro elæerpita" + +#~ msgid "inserting %s\n" +#~ msgstr "enþovas %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " speco: %s %s " + +#~ msgid "left:\n" +#~ msgstr "maldekstre:\n" + +#~ msgid "right:\n" +#~ msgstr "dekstre:\n" + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Nomigita Arbo de Elvalorado:\n" + +#~ msgid "%s changed during execution of %s" +#~ msgstr "%s þanøis dum plumumado de %s" + +#~ msgid "%s/.. changed during execution of %s" +#~ msgstr "%s/.. þanøis dum plumumado de %s" + +#~ msgid "error in %s: %s" +#~ msgstr "eraro en %s: %s" + +#~ msgid "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "options (always true): -daystart -depth -follow --help\n" +#~ " -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev\n" +#~ "tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +#~ msgstr "" +#~ " ESPR1 -o ESPR2 ESPR1 -or ESPR2 ESPR1 , ESPR2\n" +#~ "opcioj (æiam vera): -daystart -depth -follow --help\n" +#~ " -maxdepth NIVELOJ -mindepth NIVELOJ -mount -noleaf --version -xdev\n" +#~ "provoj (N povas esti +N aý -N aý N): -amin N -anewer DOSIERO -atime N -" +#~ "cmin N\n" + +#~ msgid "" +#~ "Usage: %s [-d path | --database=path] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] pattern...\n" +#~ msgstr "" +#~ "Uzado: %s [-d pado | --database=pado] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] þablono...\n" + +#~ msgid "unmatched %s quote" +#~ msgstr "senpara %s citilo" diff --git a/po/es.po b/po/es.po new file mode 100644 index 0000000..4c1aae5 --- /dev/null +++ b/po/es.po @@ -0,0 +1,1657 @@ +# Mensajes en español para GNU findutils. +# Copyright (C) 1996, 2001, 2004 Free Software Foundation, Inc. +# Iñaky Pérez González , 1996. +# Santiago Vila Doncel , 2001, 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: GNU findutils 4.2.6\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2004-12-23 16:57+0100\n" +"Last-Translator: Santiago Vila Doncel \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "argumento %s inválido para %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "argumento %s ambiguo para %s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Los argumentos válidos son:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Error del sistema desconocido" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: la opción `%s' es ambigua\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: la opción `--%s' no admite ningún argumento\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: la opción `%c%s' no admite ningún argumento\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: la opción `%s' necesita un argumento\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: opción no reconocida `--%s'\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: opción no reconocida `%c%s'\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: opción ilegal -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: opción inválida -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: la opción necesita un argumento -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: la opción `-W %s' es ambigua\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: la opción `-W %s' no admite ningún argumento\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "no se puede obtener el directorio actual" + +#: gnulib/lib/openat-die.c:46 +#, fuzzy +msgid "failed to return to initial working directory" +msgstr "no se puede volver al directorio de partida" + +# No ha habido ninguna queja en coreutils, pongamos aquí también los +# símbolos de cita tradicionales en español. +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "«" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "»" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Éxito" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "No hay ninguna coincidencia" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Expresión regular inválida" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Carácter de secuencia inválido" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Nombre de clase de caracteres inválido" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Barra invertida final" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Referencia hacia atrás inválida" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "[ o [^ desemparejado" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "( o \\( desemparejado" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "\\{ desemparejada" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Contenido de \\{\\} inválido" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Final de rango inválido" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Memoria agotada" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Expresión regular precedente inválida" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Fin prematuro de la expresión regular" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Expresión regular demasiado grande" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr ") o \\) desemparejado" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "No hay ninguna expresión regular anterior" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[sS]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +#, fuzzy +msgid "memory exhausted" +msgstr "Memoria agotada" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "argumento `%s' inválido para la opción `%s'" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "argumento `%s' inválido para la opción `%s'" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "lista de argumentos demasiado larga" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "no se puede obtener el directorio actual" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "no se puede obtener el directorio actual" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "El sistema de ficheros %s ha sido desmontado recientemente." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "El sistema de ficheros %s ha sido montado recientemente." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s ha cambiado durante la ejecución de %s (número de dispositivo antiguo %" +"ld,\n" +"número de dispositivo nuevo %ld, el tipo de sistema de ficheros es %s [ref %" +"ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s ha cambiado durante la ejecución de %s (número de nodo-i antiguo %ld,\n" +"número de nodo-i nuevo %ld, tipo de sistema de ficheros %s) [ref %ld]" + +#: find/find.c:992 +#, fuzzy, c-format +msgid "Failed to safely change directory into %s" +msgstr "no se puede volver al directorio de partida" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "desconocido" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"atención: ha especificado la opción %s después de un argumento %s que no\n" +"es una opción, pero las opciones no son de posición (%s afecta tanto a\n" +"las evaluaciones especificadas antes de él como a las especificadas\n" +"después). Por favor especifique las opciones antes de otros argumentos.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"atención: la opción -d está obsoleta; por favor utilice -depth en su lugar,\n" +"ya que se trata de una característica que cumple con POSIX." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +# sugerencia: si no se dan -> si no hay otros. sv +# +# No, aquí creo que no vale, ya que es "si no das operadores", esto +# es, si no das ninguno, no que no haya otros. Se refiere al caso +# de que no se dé un operador entre dos `sentencias' (además claro +# de que sólo se puede dar uno). +# +# Bueno, el plural ("others") del original tiene un sentido "respectivo", +# Quiere decir que si en cada sitio donde puedes poner un operador o no +# ponerlo, no pones uno que sea distinto de -and, se supone -and. +# Obviamente para poner otro que no sea -and tienes que poner alguno... +# La única diferencia, yo creo, es que según el original, si pones -and, +# no le hace caso, y toma el operador por defecto, que vuelve a ser -and +# ¡Mira que son retorcidos! :-) sv +# +# Bueno, déjalo así si quieres, pero fíjate en lo soso que queda el "dan", +# queda a mil kilómetros de la palabra "operadores" (me refiero a lo lejos +# que están el verbo y el objeto directo, me suena un poco rarillo). +# Parece que es "si no se dan de tortas". sv +# +# Sugerencia: "se supone -and si no se da ningún operador" +# o mejor "si no se da ninguno". sv +# +# Lo dejo así. ipg +#: find/parser.c:1061 +#, fuzzy +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"la ruta de acceso por defecto es el directorio actual; la expresión por\n" +"defecto es -print\n" +"la expresión puede ser:\n" +"operadores (prioridad decreciente; se supone -and si no se dan):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2" + +# sugerencia: si no se dan -> si no hay otros. sv +# +# No, aquí creo que no vale, ya que es "si no das operadores", esto +# es, si no das ninguno, no que no haya otros. Se refiere al caso +# de que no se dé un operador entre dos `sentencias' (además claro +# de que sólo se puede dar uno). +# +# Bueno, el plural ("others") del original tiene un sentido "respectivo", +# Quiere decir que si en cada sitio donde puedes poner un operador o no +# ponerlo, no pones uno que sea distinto de -and, se supone -and. +# Obviamente para poner otro que no sea -and tienes que poner alguno... +# La única diferencia, yo creo, es que según el original, si pones -and, +# no le hace caso, y toma el operador por defecto, que vuelve a ser -and +# ¡Mira que son retorcidos! :-) sv +# +# Bueno, déjalo así si quieres, pero fíjate en lo soso que queda el "dan", +# queda a mil kilómetros de la palabra "operadores" (me refiero a lo lejos +# que están el verbo y el objeto directo, me suena un poco rarillo). +# Parece que es "si no se dan de tortas". sv +# +# Sugerencia: "se supone -and si no se da ningún operador" +# o mejor "si no se da ninguno". sv +# +# Lo dejo así. ipg +#: find/parser.c:1064 +#, fuzzy +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"la ruta de acceso por defecto es el directorio actual; la expresión por\n" +"defecto es -print\n" +"la expresión puede ser:\n" +"operadores (prioridad decreciente; se supone -and si no se dan):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2" + +#: find/parser.c:1068 +#, fuzzy +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +"opciones de posición (siempre verdaderas): -daystart -follow\n" +"opciones normales (siempre verdaderas, se ponen después de otras " +"expresiones):\n" +" -depth --help -maxdepth NIVELES -mindepth NIVELES -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +"evaluaciones (N puede ser +N, -N o N): -amin N -anewer FICHERO -atime N\n" +" -cmin N" + +# FIXME: ¿Cómo traducir pattern? Plantilla queda de pena; he dejado EXPR-REG, +# a ver si cuela. IPG +# Consulto mi "Libro gordo de Petete metido a hacker" (uséase, mi madre) +# y dice que ella en todos los libros de UNIX ha visto que se le llama +# expresión regular, y que le parece el término más adecuado (cosa +# que a mí también). Me inclino por su experiencia (que para algo es +# una telekita que lleva desarrollando en UN*X desde que lo inventaron) +# y usaré esta traducción, hasta que salga una que parezca mejor. IPG +# +# También me han sugerido `patrón', pero prefiero EXPR-REG. IPG +# +#: find/parser.c:1073 +#, fuzzy +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +" -cnewer FICHERO -ctime N -empty -false -fstype TIPO -gid N\n" +" -group NOMBRE -ilname EXPR-REG -iname EXPR-REG -inum N\n" +" -iwholename EXPR-REG -iregex EXPR-REG -links N -lname EXPR-REG\n" +" -mmin N -mtime N -name EXPR-REG -newer FICHERO" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path EXPR-REG -perm [+-]MODO -regex EXPR-REG\n" +" -wholename EXPR-REG -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NOMBRE -xtype [bcdpfls]" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"Informe sobre bichos (y siga el progreso de su corrección) a través de la\n" +"página de comunicación de bichos en http://savannah.gnu.org/ o bien, si no\n" +"tiene acceso a web, enviando un mensaje a ." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "" +"la comprobación de adecuación de la función de biblioteca fnmatch() falló." + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "modo inválido `%s'" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +# Nota: No es que no se haya dado el argumento requerido a la opción -size, +# sino que se ha dado un argumento nulo, que es distinto. +# Para ver la sutil diferencia, poner LANG=C y comparar esto: +# +# find . -size +# +# con esto otro: +# +# find . -size "" +# +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "argumento nulo inválido para la opción -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "tipo dado a -size inválido `%c'" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "argumento `%s' inválido para la opción `%s'" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "argumento %s inválido para %s" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "atención: secuencia de escape `\\%c' no reconocida" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "atención: directiva de formato `%%%c' no reconocida" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "el entorno es demasiado grande para exec" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +#, fuzzy +msgid "Failed to change directory" +msgstr "no se puede volver al directorio de partida" + +# FIXME: ¿¿¿??? ¡¡¿¿Y cómo leches traduzco yo esto??!! IPG +# Después de que me hayan llamado de todo por intentar traducir +# una llamada al sistema ;) sigo pensando que este mensaje es +# más claro e informativo que el original (de hecho, es un +# pelín más largo y no exige saber tanto UNIX ...) IPG +# +# Esto me parece muy muy muy largo. +# Sugerencia: "No se puede ejecutar fork". sv +# E insisto: Si no eres experto en programación Unix lo mismo te da +# "duplicar un proceso" que "fork". +# De hecho, yo todavía no sé lo que es (ninguna de las dos cosas). sv +# +# ¡¡Otia!! Eso es grave ... fork() es la llamada al sistema que se usa +# para duplicar un programa en dos idénticos, pero con distinto PID. +# Una vez que vuelve, en el padre devuelve el PID del hijo, y en el +# hijo, cero. El hijo entonces lo detecta y una de dos, o sigue, o +# ejecuta otro programa con exec() (que solapa todo el espacio del +# proceso con el del nuevo programa). Prefiero dejar la explicación +# larga, en beneficio de gente como tú :) ipg +# +# Vale, pues ahora te digo: +# +# 1. Nada de lo anterior es evidente con la simple vista de +# la frase "se duplica el proceso". +# 2. Ahora que ya me lo has explicado, lo mismo me da que me pongas +# exclusivamente lo de fork() a que me pongas la larga parrafada que +# tienes en este momento. sv +# +# ¿Ves por qué no me acaba de gustar? sv +# +# Nota: Jim Meyering tenía en fileutils un mensaje parecido a este, que al +# final conseguimos (Ulises y yo) que lo cambiara por +# msgid "fork system call failed" +# que yo traduje así: +# msgstr "falló la llamada al sistema `fork'" +# ¿Qué te parece? +# +# Al fin y al cabo es la coletilla que tengo yo al final de mi +# comentario, ¿no? Me parece lo mismo, má o meno, pero por no meternos +# en darle caña y acabar ya esto de una vez :) ... +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "falló la llamada al sistema `fork()'" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "error esperando al proceso %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s terminado por la señal %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "expresión inválida" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, fuzzy, c-format +msgid "expected an expression after '%s'" +msgstr "predicado extra inesperado" + +#: find/tree.c:121 +#, fuzzy +msgid "invalid expression; you have too many ')'" +msgstr "expresión inválida" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "expresión inválida" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +# Creo que la traducción ideal de oops sería ¡huy! sv +# Y si no: ¿A algún español le has visto que diga "oops"? +# +# Si :) Todas las mañanas en el espejo. De todas maneras, +# `¡huy!' creo que no expresa exactamente el `indicar que +# parece que hay un problema' ... yo creo que quedaría +# mejor `oh, oh' (Rainman ... :). ipg +# +# Pero si después del huy te dicen que la expresión no es válida, está +# claro que había un problema... +# Ya, pero puestos, casi podríamos buscar una expresión común para +# los `oops' +# Pon `oh, oh', si crees que es lo apropiado. +# Lo decía más que nada por no dejarlo en inglés siendo el español +# tan rico y variado para las interjecciones. +# (Y me consta que tú sabes bastante de esto :-) +# ¡¡Carajo!! ¿yo?. Voy a dejar `oh, oh', y si a la gente le gusta +# (a mí me parece coñero), lo dejamos, y si no, ponemos `huy'. ipg +# Vale. sv +# +# Aquí también tengo pensado hacer publicidad ;-) sv +# +# Aparte de lo anterior. Si vas a dejar "oh, oh", ¿no sería mejor +# ponerlo sin tantas exclamaciones? (no me pegan) +# +# Ok. ipg +# +# Pero yo decía al revés... (como en el original). +# Lo cambio. sv +# E incluso si te parece, no ponemos ninguna exclamación en ninguno +# de los dos sitios. +# (Donde menos me pegan es en el "oh, oh", parece cosa de Papá Noel...). sv +# +# Será por las fechas ... ;) ok, claudico. ipg +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "oh, oh -- ¡tipo de expresión inválido!" + +# Creo que la traducción ideal de oops sería ¡huy! sv +# Y si no: ¿A algún español le has visto que diga "oops"? +# +# Si :) Todas las mañanas en el espejo. De todas maneras, +# `¡huy!' creo que no expresa exactamente el `indicar que +# parece que hay un problema' ... yo creo que quedaría +# mejor `oh, oh' (Rainman ... :). ipg +# +# Pero si después del huy te dicen que la expresión no es válida, está +# claro que había un problema... +# Ya, pero puestos, casi podríamos buscar una expresión común para +# los `oops' +# Pon `oh, oh', si crees que es lo apropiado. +# Lo decía más que nada por no dejarlo en inglés siendo el español +# tan rico y variado para las interjecciones. +# (Y me consta que tú sabes bastante de esto :-) +# ¡¡Carajo!! ¿yo?. Voy a dejar `oh, oh', y si a la gente le gusta +# (a mí me parece coñero), lo dejamos, y si no, ponemos `huy'. ipg +# Vale. sv +# +# Aquí también tengo pensado hacer publicidad ;-) sv +# +# Aparte de lo anterior. Si vas a dejar "oh, oh", ¿no sería mejor +# ponerlo sin tantas exclamaciones? (no me pegan) +# +# Ok. ipg +# +# Pero yo decía al revés... (como en el original). +# Lo cambio. sv +# E incluso si te parece, no ponemos ninguna exclamación en ninguno +# de los dos sitios. +# (Donde menos me pegan es en el "oh, oh", parece cosa de Papá Noel...). sv +# +# Será por las fechas ... ;) ok, claudico. ipg +#: find/tree.c:231 +#, fuzzy, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "oh, oh -- ¡tipo de expresión inválido!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "Las rutas-de-acceso deben preceder la expresión" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "predicado inválido `%s'" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "predicado inválido `%s'" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "argumento `%s' inválido para la opción `%s'" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "falta el argumento de `%s'" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "expresión inválida" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "predicado extra inesperado" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "predicado extra inesperado" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "oh, oh -- ¡inserción por defecto de `and' inválida!" + +# ¿Cómo traducir "path"? Me inclino por ahora por camino, pero quizá sería +# más mejor que bueno poner directorio o algo así. IPG +# ¡Olé! Gracias a tos los de es@li.org que me habeis dado "ruta de acceso". +# No se qué significado tendría mi vida sin vuestra ayuda ;), snif ... :~) +# IPG +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Modo de empleo: %s [-H] [-L] [-P] [ruta-de-acceso...] [expresión]\n" + +# ¿Cómo traducir "path"? Me inclino por ahora por camino, pero quizá sería +# más mejor que bueno poner directorio o algo así. IPG +# ¡Olé! Gracias a tos los de es@li.org que me habeis dado "ruta de acceso". +# No se qué significado tendría mi vida sin vuestra ayuda ;), snif ... :~) +# IPG +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Modo de empleo: %s [ruta-de-acceso...] [expresión]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "atención: secuencia de escape `\\%c' no reconocida" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"La variable de entorno FIND_BLOCK_SIZE no está soportada, lo único que\n" +"afecta al tamaño del bloque es la variable de entorno POSIXLY_CORRECT" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "orden demasiado larga" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" +"Un argumento no cabe dentro del tamaño límite de la lista de argumentos" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "lista de argumentos demasiado larga" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU findutils versión %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Modo de empleo: %s [--version | --help]\n" +"o bien %s bigramas_más_comunes < lista-de-ficheros > base-de-datos-de-" +"locate\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Comunicar bichos a .\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "días" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "argumento `%s' inválido para la opción `%s'" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "argumento `%s' inválido para la opción `%s'" + +#: locate/locate.c:472 +#, fuzzy, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" +"atención: la ruta de acceso de la base de datos de locate `%s' comienza\n" +"por dos puntos, no es un nombre válido de base de datos" + +#: locate/locate.c:607 +#, fuzzy, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "la base de datos de locate `%s' está corrupta o es inválida" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, fuzzy, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "la base de datos de locate `%s' está corrupta o es inválida" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, fuzzy, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Modo de empleo: %s [-d ruta-de-acceso | --database=ruta-de-acceso]\n" +" [-e | --existing] [-i | --ignore-case] [--wholepath] [--basename]\n" +" [--limit=N | -l N] [--version] [--help] expr-reg...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "atención: la base de datos `%s' tiene una antigüedad de más de %d %s" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "predicado extra inesperado" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "error esperando al proceso %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "el entorno es demasiado grande para exec" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "" + +#: xargs/xargs.c:688 +#, fuzzy, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "Las variables de entorno ocupan %ld bytes\n" + +#: xargs/xargs.c:691 +#, fuzzy, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" +"Límites POSIX inferior y superior sobre la longitud del argumento: %ld, %ld\n" + +#: xargs/xargs.c:694 +#, fuzzy, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" +"Límites POSIX inferior y superior sobre la longitud del argumento: %ld, %ld\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "Máxima longitud de orden que se podría usar realmente: %ld\n" + +#: xargs/xargs.c:701 +#, fuzzy, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Tamaño del búfer de órdenes que se está usando realmente: %ld\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"comilla %s desemparejada; por omisión las comillas son especiales para " +"xargs\n" +"a menos que utilice la opción -0" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "doble" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "simple" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "línea de argumentos demasiado larga" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "error esperando al proceso hijo" + +# Pregunta (no es por crear polémica): ¿"status" o "estado"? sv +# +# "Estado", aunque también existe "status". ¿Dejamos "status"? ipg +# +# No sé, si se refiere a lo que en MS-DOG se llama ERRORLEVEL, +# y al resultado numérico que devuelve el main() del proceso, la +# pregunta sería: ¿cómo se le llama a eso en español? sv +# +# Creo que podríamos dejar `status', ya que existe en castellano, +# (Nota: Ver http://www.anaya.es/dict por ejemplo). +# y expresa un estado de actividad, siendo más preciso que `estado' +# (¡ahora, que el/la que lo confunda con el Estado Español, es pa +# matal-le! :). ipg +# +# Me quedo con la duda de cómo se llama eso en español. +# Esperemos que lo vea otro. sv +# +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: acabó con status 255; abortando" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: interrumpido por la señal %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: terminado por la señal %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: número inválido para la opción -%c\n" + +# Me he tomado la libertad de poner mayor o igual que en lugar de >= ... +# queda mucho mejor. Si a alguien no le gusta, que me lo diga ;). IPG +# Me parece acertado y lo digo :-) sv +# falen ... :) ... ipg +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: el valor para la opción -%c debería ser mayor o igual que %ld\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: el valor para la opción -%c debería ser menor que %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Modo de empleo: %s [-0prtx] [-e[cadena-eof]] [-i[cadena-de-reemplazo]]\n" +" [-l[máx-líneas]] [-n máx-argumentos] [-s máx-caracteres]\n" +" [-P máx-procesos] [--null] [--eof[=cadena-eof]]\n" +" [--replace[=cadena-de-reemplazo]] [--max-lines[=máx-líneas]]\n" +" [--interactive] [--max-chars=máx-caracteres] [--verbose] [--exit]\n" +" [--max-procs=máx-procesos] [--max-args=máx-argumentos]\n" +" [--no-run-if-empty] [--version] [--help]\n" +" [orden [argumentos-iniciales]]\n" + +#~ msgid "block size" +#~ msgstr "tamaño del bloque" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "atención: el predicado -ipath está obsoleto; por favor use -iwholename " +#~ "en\n" +#~ "su lugar" + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find versión %s\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU findutils versión %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate versión %s\n" + +#~ msgid "argument to --limit" +#~ msgstr "argumento para --limit" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs versión %s\n" + +# Creo que la traducción ideal de oops sería ¡huy! sv +# Y si no: ¿A algún español le has visto que diga "oops"? +# +# Si :) Todas las mañanas en el espejo. De todas maneras, +# `¡huy!' creo que no expresa exactamente el `indicar que +# parece que hay un problema' ... yo creo que quedaría +# mejor `oh, oh' (Rainman ... :). ipg +# +# Pero si después del huy te dicen que la expresión no es válida, está +# claro que había un problema... +# Ya, pero puestos, casi podríamos buscar una expresión común para +# los `oops' +# Pon `oh, oh', si crees que es lo apropiado. +# Lo decía más que nada por no dejarlo en inglés siendo el español +# tan rico y variado para las interjecciones. +# (Y me consta que tú sabes bastante de esto :-) +# ¡¡Carajo!! ¿yo?. Voy a dejar `oh, oh', y si a la gente le gusta +# (a mí me parece coñero), lo dejamos, y si no, ponemos `huy'. ipg +# Vale. sv +# +# Aquí también tengo pensado hacer publicidad ;-) sv +# +# Aparte de lo anterior. Si vas a dejar "oh, oh", ¿no sería mejor +# ponerlo sin tantas exclamaciones? (no me pegan) +# +# Ok. ipg +# +# Pero yo decía al revés... (como en el original). +# Lo cambio. sv +# E incluso si te parece, no ponemos ninguna exclamación en ninguno +# de los dos sitios. +# (Donde menos me pegan es en el "oh, oh", parece cosa de Papá Noel...). sv +# +# Será por las fechas ... ;) ok, claudico. ipg +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "oh, oh -- ¡tipo de expresión inválido!" + +# Creo que la traducción ideal de oops sería ¡huy! sv +# Y si no: ¿A algún español le has visto que diga "oops"? +# +# Si :) Todas las mañanas en el espejo. De todas maneras, +# `¡huy!' creo que no expresa exactamente el `indicar que +# parece que hay un problema' ... yo creo que quedaría +# mejor `oh, oh' (Rainman ... :). ipg +# +# Pero si después del huy te dicen que la expresión no es válida, está +# claro que había un problema... +# Ya, pero puestos, casi podríamos buscar una expresión común para +# los `oops' +# Pon `oh, oh', si crees que es lo apropiado. +# Lo decía más que nada por no dejarlo en inglés siendo el español +# tan rico y variado para las interjecciones. +# (Y me consta que tú sabes bastante de esto :-) +# ¡¡Carajo!! ¿yo?. Voy a dejar `oh, oh', y si a la gente le gusta +# (a mí me parece coñero), lo dejamos, y si no, ponemos `huy'. ipg +# Vale. sv +# +# Aquí también tengo pensado hacer publicidad ;-) sv +# +# Aparte de lo anterior. Si vas a dejar "oh, oh", ¿no sería mejor +# ponerlo sin tantas exclamaciones? (no me pegan) +# +# Ok. ipg +# +# Pero yo decía al revés... (como en el original). +# Lo cambio. sv +# E incluso si te parece, no ponemos ninguna exclamación en ninguno +# de los dos sitios. +# (Donde menos me pegan es en el "oh, oh", parece cosa de Papá Noel...). sv +# +# Será por las fechas ... ;) ok, claudico. ipg +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "oh, oh -- ¡tipo de expresión inválido!" + +#, fuzzy +#~ msgid "Reducing arg_max (%lu) to arg_size (%lu)\n" +#~ msgstr "Se reduce arg_max (%ld) a arg_size (%ld)\n" + +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "acciones: -exec ORDEN ; -fprint FICHERO -fprint0 FICHERO\n" +#~ " -fprintf FICHERO FORMATO -fls FICHERO -ok ORDEN ;\n" +#~ " -print -print0 -printf FORMATO -prune -ls -delete -quit\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "Lista Predicado:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "Árbol de Evaluación:\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Árbol de Evaluación Optimizado:\n" + +#, fuzzy +#~ msgid "Optimized command line:\n" +#~ msgstr "Árbol de Evaluación Optimizado:\n" + +# Propongo eliminar la palabra virtual. En un sistema GNU, la memoria virtual +# y la otra son la misma cosa, desde el punto de vista de las aplicaciones +# no se distinguen una de otra. Quedaría más corto, más sencillo y más bonito. +# Y además Javier Romañach (hello) está de acuerdo conmigo. sv +# Y a mí me apoya Richard Stallman };) (qui malo soy :) +# Fuera coñas ... sí, estoy de acuerdo ipg +# +# En cualquier caso, me gustaría saber por qué en GNU se empeñan en poner +# siempre "virtual". Parece como si hacerlo así estuviera el mensaje +# más orientado al usuario final [ quitando el virtual el mensaje estaría +# escrito desde el punto de vista de la aplicación (para la cual, todos +# los malloc()'s son iguales ante la ley...) ] +# +# No estoy completamente convencido de qué deberíamos hacer. +# De hecho, esto contradice mis principios (la fidelidad ante todo). +# (Creo que tendré que revisar mis principios...). sv +# +# Sí ... a fondo :) ipg +# +# FIXME: Preguntar a Richard Stallman por qué se empeña en usar la +# palabra virtual. sv +#~ msgid "virtual memory exhausted" +#~ msgstr "memoria agotada" + +#~ msgid "inserting %s\n" +#~ msgstr "insertando %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " tipo: %s %s " + +#~ msgid "left:\n" +#~ msgstr "izquierda:\n" + +#~ msgid "right:\n" +#~ msgstr "derecha:\n" + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Árbol de Evaluación Normalizado:\n" + +#~ msgid "error in %s: %s" +#~ msgstr "error en %s: %s" + +#~ msgid "" +#~ "warning: locate database path `%s' contains a trailing colon, which is " +#~ "not a valid database name" +#~ msgstr "" +#~ "atención: la ruta de acceso de la base de datos de locate `%s'\n" +#~ "contiene dos puntos al final, no es un nombre válido de base de datos" + +#~ msgid "%s changed during execution of %s" +#~ msgstr "%s cambió durante la ejecución de %s" + +#~ msgid "%s/.. changed during execution of %s" +#~ msgstr "%s/.. cambió durante la ejecución de %s" + +#~ msgid "unmatched %s quote" +#~ msgstr "comilla %s desemparejada" + +#~ msgid "cannot open current directory" +#~ msgstr "no se puede abrir el directorio actual" + +#~ msgid "wait got pid %d, expected pid %d" +#~ msgstr "wait obtuvo el pid %d, y se esperaba un pid %d" + +#~ msgid "%s stopped by signal %d" +#~ msgstr "%s interrumpido por la señal %d" diff --git a/po/et.po b/po/et.po new file mode 100644 index 0000000..aa20f85 --- /dev/null +++ b/po/et.po @@ -0,0 +1,1318 @@ +# Estonian translations for findutils +# Copyright (C) 2000 Free Software Foundation, Inc. +# Toomas Soome , 2006. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.3.1\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2006-11-11 12:42+0200\n" +"Last-Translator: Toomas Soome \n" +"Language-Team: Estonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-15\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "vigane argument %s (%s)" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "segane argument %s (%s)" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Lubatud argumendid on:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Tundmatu süsteemi viga" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: võti `%s' on segane\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: võti `--%s' ei luba argumenti\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: võti `%c%s' ei luba argumenti\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: võti `%s' nõuab argumenti\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: tundmatu võti `--%s'\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: tundmatu võti `%c%s'\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: lubamatu võti -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: vigane võti -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: võti nõuab argumenti -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: võti `-W %s' on segane\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: võti `-W %s' ei luba argumenti\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "ei õnnestu leida jooksvat kataloogi" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "`" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "'" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "" + +#: gnulib/lib/regcomp.c:137 +#, fuzzy +msgid "Invalid regular expression" +msgstr "vigane avaldis" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: gnulib/lib/regcomp.c:164 +#, fuzzy +msgid "Invalid range end" +msgstr "vigane argument %s (%s)" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "" + +#: gnulib/lib/regcomp.c:170 +#, fuzzy +msgid "Invalid preceding regular expression" +msgstr "vigane avaldis" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[jJ]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[eE]" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "vigane argument `%s' predikaadil `%s'" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "vigane argument `%s' predikaadil `%s'" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "argumendi rida on liiga pikk" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "ei õnnestu leida jooksvat kataloogi" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "ei õnnestu leida jooksvat kataloogi" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "Hoiatus: failisüsteem %s on just lahti haagitud." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "Hoiatus: failisüsteem %s on just haagitud." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s muutus %s töö ajal (vana seadme number %ld, uus seadme number %ld, " +"failisüsteemi tüüp on %s) [viit %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s muutus %s töö ajal (vana i-kirje number %ld, uus i-kirje number %ld, " +"failisüsteemi tüüp on %s) [viit %ld]" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, fuzzy, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" +"Nimeviide `%s' on osa tsüklist kataloogipuus; me oleme juba külastanad " +"kataloogi, millele see viitab." + +#: find/find.c:1104 +#, fuzzy, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" +"Failisüsteemis on tuvastatud tsükkel; `%s' omab sama seadme ja i-kirje " +"numbreid kui kataloog %d %s." + +#: find/find.c:1108 +#, fuzzy +msgid "level higher in the file system hierarchy" +msgstr "samm kõrgemal failisüsteemi puus" + +#: find/find.c:1109 +#, fuzzy +msgid "levels higher in the file system hierarchy" +msgstr "sammu kõrgemal failisüsteemi puus" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "hoiatus: ei järgi nimeviidet %s" + +#: find/find.c:1398 +#, fuzzy, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" +"HOIATUS: %s viidete arv on vale: see võib olla viga teie failisüsteemi " +"draiveris. Kasutan automaatselt find'i -noleaf võtit. Varasemad tulemused " +"ei pruugi sisaldada kõiki katalooge." + +#: find/fstype.c:250 +msgid "unknown" +msgstr "tundmatu" + +#: find/ftsfind.c:298 +#, fuzzy, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" +"Failisüsteemis on tuvastatud tsükkel; `%s' omab sama seadme ja i-kirje " +"numbreid kui kataloog %d %s." + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"hoiatus: te olete kasutanud võtit %s peale mitte-võtit %s, aga võtmed ei ole " +"positsioonilised (%s mõjutab eelnevalt ja järgnevalt määratud teste). Palun " +"andke võtmed enne muid argumente.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"hoiatus: võti -d on aegunud; kasutage palun võtit -depth, viimane on POSIX-" +"ühilduv." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"\n" +"vaikimisi tee on jooksev kataloog; vaikimisi avaldis on -print\n" +"avaldis võib koosneda: operaatorid, võtmed, testid ja tegevused:\n" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"operaatorid (kahanevas eelistusjärjekorras; kui muid pole, on operaator -" +"and):\n" +" ( AVALD ) ! AVALD -not AVALD AVALD1 -a AVALD2 AVALD1 -and AVALD2\n" +" AVALD1 -o AVALD2 AVALD1 -or AVALD2 AVALD1 , AVALD2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +"positsioonilised võtmed (alati tõesed): -daystart -follow -regextype\n" +"tavalised võtmed (alati tõesed, kasutatakse muude avaldiste ees):\n" +" -depth --help -maxdepth TASE -mindepth TASE -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +"testid (N võib olla +N või -N või N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FAIL -ctime N -empty -false -fstype TÜÜP -gid N -group NIMI\n" +" -ilname MUSTER -iname MUSTER -inum N -iwholename MUSTER -iregex " +"MUSTER\n" +" -links N -lname MUSTER -mmin N -mtime N -name MUSTER -newer FAIL" + +#: find/parser.c:1078 +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path MUSTER -perm [+-]MOOD -regex MUSTER\n" +" -readable -writable -executable\n" +" -wholename MUSTER -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NIMI -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" +"tegevused: -delete -print0 -printf VORMING -fprintf FAILI VORMING -print \n" +" -fprint0 FAIL -fprint FAIL -ls -fls FAIL -prune -quit\n" +" -exec KÄSKLUS ; -exec KÄSKLUS {} + -ok KÄSKLUS ;\n" +" -execdir KÄSKLUS ; -execdir KÄSKLUS {} + -okdir KÄSKLUS ;\n" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"Vigadest teatage (ja protsessi saab jälgida) findutils vea raporti lehel\n" +"http://savannah.gnu.org/ vï kui teil puudub juurdepääs veebile, saates\n" +"emaili aadressil ." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "funktsiooni fnmatch() korrektsuse kontroll ebaõnnestus." + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" +"hoiatus: failinimed Unixis ei sisalda tavaliselt kaldkriipse (kuigi teed " +"sisaldavad). See tähendab et '%s %s' saab ilmselt selles süsteemis kogu aeg " +"väärtuse 'false'. Tõenäoliselt on '-wholename' või siis '-samefile' test " +"märksa kasulikum. Alternatiivina, kui te kasutate GNU grep, võiks proovida " +"'find ... -print0 | grep -FzZ %s'." + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, fuzzy, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "Ei õnnestu avada sisendfaili `%s'" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "vigane mood `%s'" + +#: find/parser.c:1807 +#, fuzzy, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" +"hoiatus: te määrasite moodi mustri %s, mis on sama kui 000. -perm /000 " +"tähendus muudetakse varsti, et oleks kooskõlas -perm -000; see tähendab, " +"praegu selline muster ei leia ühtegi faili, aga hakkab leidma kõiki faile. " + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "vigane tühi argument -size predikaadile" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "vigane tüüp `%c' -size predikaadile" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "vigane argument `%s' predikaadil `%s'" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "Võti -show-control-chars vajab argumenti 'literal' või 'safe'" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "vigane argument %s (%s)" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "Lubatud omadused: " + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "hoiatus: tundmatu paojada `\\%c'" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "hoiatus: tundmatu formaadidirektiiv `%%%c'" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" +"Keskkonnamuutuja PATH sisaldab jooksvat kataloogi, mis on find tegevuse %s " +"korral ebaturvaline. Palun eemaldage jooksev kataloog PATH muutujast " +"(eemaldage \".\" või algavad või lõpetavad koolonid)" + +#: find/parser.c:2921 +#, fuzzy, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" +"Keskkonnamuutuja PATH sisaldab jooksvat kataloogi, mis on find tegevuse %s " +"korral ebaturvaline. Palun eemaldage jooksev kataloog PATH muutujast " +"(eemaldage \".\" või algavad või lõpetavad koolonid)" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" +"Võtmetega -execdir ja -okdir ei ole lubatud programmi nimes kasutada {}, " +"kuna see võib olla turvarisk." + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "Predikaadiga -exec%s ... + on lubatud kasutada ainult ühte {} paari" + +#: find/parser.c:3066 +msgid "The environment is too large for exec()." +msgstr "exec() funktsioonile antud keskkond on liiga suur." + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, fuzzy, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "Ei õnnestu avada sisendfaili `%s'" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "fork ebaõnnestus" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "viga %s oodates" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s katkestati signaaliga %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "vigane avaldis" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" +"vigane avaldis; te olete kasutanud binaarset operaatorit '%s', aga tema ees " +"ei ole midagi." + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "'%s' ja ')' vahel peab olema avaldis" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "'%s' järel oodati avaldist" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "vigane avaldis; liiga palju ')'" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" +"vigane avaldis; eeldasin leida sümbolit ')', aga see puudub. Võibolla tuleb " +"lisada '%s' järele predikaat" + +#: find/tree.c:149 +msgid "invalid expression; empty parentheses are not allowed." +msgstr "vigane avaldis; tühjad sulud pole lubatud." + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "vigane avaldis: eeldasin leida sümbolit ')', aga see puudub." + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "oops -- vigane avaldise tüüp!" + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "oops -- vigane avaldise tüüp (%d)!" + +#: find/tree.c:1228 +#, c-format +msgid "paths must precede expression: %s" +msgstr "teed peavad olema enne avaldist: %s" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "vigane predikaat `%s'" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "vigane predikaat `%s'" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "vigane argument `%s' predikaadil `%s'" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "`%s' nõuab argumenti" + +#: find/tree.c:1344 +msgid "you have too many ')'" +msgstr "liiga palju ')'" + +#: find/tree.c:1349 +#, c-format +msgid "unexpected extra predicate '%s'" +msgstr "ootamatu täiendav predikaat '%s'" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "ootamatu täiendav predikaat" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "oops -- vigane konjunktsioonioperaatori lisamine!" + +#: find/util.c:157 +#, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Kasuta: %s [-H] [-L] [-P] [-Otase] [-D " + +#: find/util.c:159 +#, c-format +msgid "] [path...] [expression]\n" +msgstr "] [tee...] [avaldis]\n" + +#: find/util.c:748 +#, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "Ignoreerin tundmatut silumise võtit %s" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "Võtmel -D puudub argument." + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "Võtme -O järel peab olema numbriline argument" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "Palun kirjutage võtme -O järel number" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "Vigane optimeerimise tase %s" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" +"Optimiseerimise tase %lu on liiga kõrge. Kui soovite leida faile väga " +"kiiresti, kasutage GNU locate programmi." + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"Keskkonnamuutujat FIND_BLOCK_SIZE ei toetata, bloki suurust mõjutab ainult " +"keskkonna muutuja POSIXLY_CORRECT" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" + +#: lib/buildcmd.c:293 +#, fuzzy +msgid "argument list too long" +msgstr "argumendi rida on liiga pikk" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU findutils versioon %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Kasuta: %s [--version | --help]\n" +"või %s enamus_bigram_koode < faili-loend > locate-andmebaas\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Vigadest teatage aadressil .\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "päeva" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "vigane argument `%s' predikaadil `%s'" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "vigane argument `%s' predikaadil `%s'" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, fuzzy, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "locate andmebaas `%s' on katki" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "Locate andmebaasi maht: %s baiti\n" + +#: locate/locate.c:899 +#, fuzzy, c-format +msgid "Matching Filenames: %s " +msgstr "Failinimed: %s " + +#: locate/locate.c:900 +#, fuzzy, c-format +msgid "All Filenames: %s " +msgstr "Failinimed: %s " + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "kogumahuga %s baiti" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" +"\n" +"\tmillest %s sisaldab tühemikke, " + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" +"\n" +"\t%s sisaldab reavahetuse sümboleid, " + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" +"\n" +"\tja %s sisaldab sümboleid, milles on kõrgeim bitt seatud.\n" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, fuzzy, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "Tihenduse suhe %4.2f%%\n" + +#: locate/locate.c:941 +#, fuzzy, c-format +msgid "Compression ratio is undefined\n" +msgstr "Tihenduse suhe %4.2f%%\n" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, fuzzy, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "locate andmebaas `%s' on katki" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "Andmebaas %s kasutab %s vormingut.\n" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, fuzzy, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Kasuta: %s [-d tee | --database=tee] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename]\n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TÜÜP]\n" +" [--version] [--help]\n" +" muster...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "hoiatus: locate andmebaasi saab standardsisendist ainult korra lugeda." + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "hoiatus: andmebaas `%s' on rohkem, kui %d %s vana" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "ootamatu täiendav predikaat '%s'" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "viga %s oodates" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "Sisendi eraldaja määrangus on vigane paojada %s." + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" +"Sisendi eraldaja määrangus on vigane paojada %s; sümboli väärtus ei või " +"ületada %lx." + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" +"Sisendi eraldaja määrangus on vigane paojada %s; sümboli väärtus ei või " +"ületada %lo." + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" +"Sisendi eraldaja määrangus on vigane paojada %s; lõpetavad sümbolid %s on " +"tundmatud." + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" +"Vigane sisendi eraldaja määrang %s: eraldaja peab olema kas üks sümbol või " +"sümboliga \\ algav paojada." + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "exec funktsioonile antud keskkond on liiga suur" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "hoiatus: võtme -s väärtus %ld on liiga suur, kasutan %ld" + +#: xargs/xargs.c:652 +#, fuzzy, c-format +msgid "Cannot open input file %s" +msgstr "Ei õnnestu avada sisendfaili `%s'" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "Teie keskkonnamuutujad kasutavad %lu baiti\n" + +#: xargs/xargs.c:691 +#, fuzzy, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "POSIX alumine ja ülemine piirang argumendi pikkusele on: %lu, %lu\n" + +#: xargs/xargs.c:694 +#, fuzzy, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "POSIX alumine ja ülemine piirang argumendi pikkusele on: %lu, %lu\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "Tegelikult kasutatava käsu maksimum pikkus on: %ld\n" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Tegelikult kasutatava käsupuhvri suurus on: %lu\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"puudub kvoot %s; vaikimisi kasutatab xargs omi kvoote, kui just pole " +"kasutatud võtit -O" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "dubleeritud" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "ühekordne" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "argumendi rida on liiga pikk" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "viga alamprotsessi ootamisel" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: lõpetas olekuga 255; katkestan" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: peatatud signaaliga %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: katkestatud signaaliga %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: vigane number võtmele -%c\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: võtme -%c väärtus peab olema suurem või võrdne kui %ld\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: võtme -%c väärtus peab olema väiksem kui %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Kasuta: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=eraldaja]\n" +" [-E eof-sõne] [-e[eof-sõne]] [--eof[=eof-sõne]]\n" +" [-L maks-ridu] [-l[maks-ridu]] [--max-lines[=maks-ridu]]\n" +" [-I asendus-sõne] [-i[asendus-sõne]] [--replace[=asendus-sõne]]\n" +" [-n maks-argumente] [--max-args=maks-argumente]\n" +" [-s maks-sümboleid] [--max-chars=maks-sümboleid]\n" +" [-P maks-protsesse] [--max-procs=maks-protsesse]\n" +" [--null] [--eof[=eof-sõne]] [--replace[=asendus-sõne]]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=fail]\n" +" [--version] [--help] [käsk [argumendid]]\n" + +#~ msgid "block size" +#~ msgstr "bloki suurus" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "hoiatus: predikaat -ipath on aegunud; kasutage selle asemel palun -" +#~ "iwholename." + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find versioon %s\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU findutils versioon %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate versioon %s\n" + +#~ msgid "argument to --limit" +#~ msgstr "võtme --limit argument" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs versioon %s\n" + +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "oops -- vigane avaldise tüüp mark_stat'is!" + +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "oops -- vigane avaldise tüüp mark_type's!" + +#~ msgid "old" +#~ msgstr "vana" diff --git a/po/fetch-po-files b/po/fetch-po-files new file mode 100644 index 0000000..3fd84fc --- /dev/null +++ b/po/fetch-po-files @@ -0,0 +1,177 @@ +#! /bin/sh + +# fetch-po-files -- fetches the .po files from the Translation Project website +# Copyright (C) 2005 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Written by James Youngman. + +URLBASE="http://www.iro.umontreal.ca/translation/maint" + + +if [ $# -ne 2 ]; then + echo "You need to specify the package name and a destination directory on the command line." >&2 + exit 1 +fi + + + +PACKAGE="$1" +DESTDIR="$2" +shift + +debug () { + : nothing +} + +info () { + echo "$@" +} + + +v_update_needed() { + debug "update_required: Checking $@" + vnew=$1 + vexisting=$2 + + major_new=$(echo $vnew | cut -s -d. -f1) + major_existing=$(echo $vexisting | cut -s -d. -f1) + if [ -z "$major_new" ]; then + debug "New version number empty, update not needed" + false + elif [ -z "$major_existing" ]; then + debug "Existing version number empty, update is needed" + true + elif [ $major_new -gt $major_existing ]; then + debug "$vnew > $vexisting, update needed" + true + elif [ $major_new -lt $major_existing ]; then + debug "$vnew < $vexisting, update NOT needed" + true + else + v_update_needed \ + $(echo $vnew | cut -s -d. -f2-) \ + $(echo $vexisting | cut -s -d. -f2-) + fi +} + +d_update_needed() { + # Determine if an update is neeededon the basis of the version numbers. + cat "$@" | + tr -d '"' | + grep "^PO-Revision-Date: " | + sed -e 's/PO-Revision-Date: //' -e 's/\\n$//' | + LANG=C sort -c >/dev/null +} + + + +getversion() { + grep Project-Id-Version: < "$1" | + tr -d '"' | + sed -e 's/^.*'$PACKAGE' //' -e 's/\\n$//' +} + + +check_versions() { + if vnew=$(getversion "$1"); then + if vexisting=$(getversion "$2"); then + if v_update_needed "$vnew" "$vexisting"; then + true + else + d_update_needed "$2" "$1" && \ + info "Timestamp fields indicate $1 is newer than $2" + fi + else + false + fi + else + false + fi +} + + +update_required() { + new="$1" + existing="$2" + # ls -ltrd "$new" "$existing" + + if ! [ -e "$existing" ] ; then + debug "$existing does not exist, using $new" + true + elif cmp $new $existing >/dev/null 2>&1; then + info "$new and $existing are identical" + false + elif check_versions "$new" "$existing"; then + info "Fetched file has newer version number or date stamp" + true + else + false + fi +} + + +possible_update() { + + debug "Possible update of $3/$1" + + new="$2/$1" + existing="$3/$1" + + if update_required $new $existing; then + info "Updating $1..." + rm -f $existing + mv $new $existing + else + rm -f $new + fi +} + + + +main () { + potfile=$DESTDIR/$PACKAGE.pot + if [ -f $potfile ] ; then + echo "OK". + else + echo "$potfile is not present. Did you specify the right command line?" >&2 + exit 1 + fi + tmpdir=`mktemp -d` + + + # set -x + printf "Fetching .po files..." + wget --quiet --recursive --directory-prefix="$tmpdir" --level=1 --accept "*.po" --no-directories "$URLBASE"/"$PACKAGE" + echo done + # cp /tmp/po-updates/$PACKAGE/*.po "$tmpdir" + # touch "$tmpdir"/*.po + + for f in $(cd $tmpdir && ls *.po ); do + possible_update "$f" "$tmpdir" "$DESTDIR" + done + cd / + rm -rf "$tmpdir" +} + + +# getversion gl.po +# update_needed 4.1.5 4.1.5 +# update_needed 4.1.15 4.1.5 +# update_needed 5.0 4.1.5 +# update_needed 4.2.6 5.0 +# exit 0 + +main "$@" diff --git a/po/fi.po b/po/fi.po new file mode 100644 index 0000000..f41973f --- /dev/null +++ b/po/fi.po @@ -0,0 +1,1311 @@ +# Finnish translation of findutils. +# Copyright (C) 2002 Free Software Foundation, Inc. +# Matti Koskimies , 2002. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.1.7\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2002-07-10 09:43+03:00\n" +"Last-Translator: Matti Koskimies \n" +"Language-Team: Finnish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-15\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gnulib/lib/argmatch.c:133 +#, fuzzy, c-format +msgid "invalid argument %s for %s" +msgstr "%s on epäkelpo parametri \"%s\":lle" + +#: gnulib/lib/argmatch.c:134 +#, fuzzy, c-format +msgid "ambiguous argument %s for %s" +msgstr "Moniselitteinen parametri %s \"%s\":lle" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Tarjolla olevat parametrit:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Tuntematon järjestemävirhe" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: valitsin \"%s\" ei ole yksiselitteinen\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: valitsin \"--%s\" ei salli parametriä\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: valitsin \"%c%s\" ei salli parametriä\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: valitsin \"%s\" vaatii parametrin\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: tunnistamaton valitsin \"--%s\"\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: tunnistamaton valitsin \"%c%s\"\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: kielletty valitsin -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: epäkelpo valitsin -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: valitsin vaatii parametrin -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: valitsin \"-W %s\" ei ole yksiselitteinen\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: valitsin \"-W %s\" ei salli parametriä\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "työhakemiston nouto ei onnistu" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "\"" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "\"" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Onnistui" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "Ei täsmännyt" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Epäkelpo säännöllinen lauseke" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Epäkelpo vertailumerkki" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Epäkelpo merkkiluokan nimi" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Kenoviiva viimeisenä" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Epäkelpo takaisinviittaus" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Pariton [ tai [^" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Pariton ( tai \\(" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Pariton \\{" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "\\{\\} -rakenteen epäkelpo sisältö" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Epäkelpo arvoalueen loppupää" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Muisti loppu" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Epäkelpo edeltävä säännöllinen lauseke" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Säännöllisen lausekkeen ennenaikainen loppu" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Liian iso säännöllinen lauseke" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Pariton ) tai \\)" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "Ei edeltävää säännöllistä lauseketta" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[kKyY]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[eEnN]" + +#: gnulib/lib/xalloc-die.c:34 +#, fuzzy +msgid "memory exhausted" +msgstr "Muisti loppu" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "\"%s\" on epäkelpo parametri \"%s\":lle" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "\"%s\" on epäkelpo parametri \"%s\":lle" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "liian pitkä parametrilista" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "työhakemiston nouto ei onnistu" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "työhakemiston nouto ei onnistu" + +#: find/find.c:384 +#, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "" + +#: find/find.c:394 +#, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "" + +#: find/find.c:490 +#, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:527 +#, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "tuntematon" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +#, fuzzy +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"Työhakemisto on oletuspolkuna ja \"-print\" oletuslausekkeena.\n" +"Lausekeen voi muodostaa seuraavasti:\n" +"operaattorit (laskeva arvojärjestys; \"-and\" on oletuksena kun muuta ei\n" +"ole annettuna):\n" +" ( LAUS ) ! LAUS -not LAUS LAUS1 -a LAUS2 LAUS1 -and LAUS2\n" + +#: find/parser.c:1064 +#, fuzzy +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"Työhakemisto on oletuspolkuna ja \"-print\" oletuslausekkeena.\n" +"Lausekeen voi muodostaa seuraavasti:\n" +"operaattorit (laskeva arvojärjestys; \"-and\" on oletuksena kun muuta ei\n" +"ole annettuna):\n" +" ( LAUS ) ! LAUS -not LAUS LAUS1 -a LAUS2 LAUS1 -and LAUS2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" + +#: find/parser.c:1073 +#, fuzzy +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +" -cnewer TIEDOSTO -ctime N -empty -false -fstype TYYPPI -gid N -group " +"NIMI\n" +" -ilname MALLI -iname MALLI -inum N -ipath MALLI -iregex MALLI\n" +" -links N -lname MALLI -mmin N -mtime N -name MALLI -newer TIEDOSTO\n" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path MALLI -perm [+-]TILA -regex MALLI\n" +" -size N[bckw] -true -type [bcdpfls] -uid N -used N -user NIMI\n" +" -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "" + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "epäkelpo tila \"%s\"" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "epäkelpo tyhjä parametri \"-size\":lle" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "eläkelpo \"-size\"-tyyppi \"%c\"" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "\"%s\" on epäkelpo parametri \"%s\":lle" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "%s on epäkelpo parametri \"%s\":lle" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "varoitus: tunnistamaton ohjausmerkki \"\\%c\"" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "varoitus: tunnistamaton muotoilumäärite \"%%%c\"" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "ympäristö on liian iso \"exec\":ille" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "haarautuminen ei onnistu" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "%s:n odotuksenaikainen virhe" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s keskeytettiin signaalilla %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "epäkelpo lauseke" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "" + +#: find/tree.c:121 +#, fuzzy +msgid "invalid expression; you have too many ')'" +msgstr "epäkelpo lauseke" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "epäkelpo lauseke" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "hupsista -- epäkelpo lauseketyyppi!" + +#: find/tree.c:231 +#, fuzzy, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "hupsista -- epäkelpo lauseketyyppi!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "polkujen täytyy olla ennen lauseketta" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "epäkelpo predikaatti \"%s\"" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "epäkelpo predikaatti \"%s\"" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "\"%s\" on epäkelpo parametri \"%s\":lle" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "\"%s\":n parametri puuttuu" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "epäkelpo lauseke" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "epäkelpo predikaatti \"%s\"" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "hupsista -- epäkelpo \"and\"-operaattorin oletuslisäys" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Käyttö: %s [polku...] [lauseke]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Käyttö: %s [polku...] [lauseke]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "varoitus: tunnistamaton ohjausmerkki \"\\%c\"" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "liian pitkä komento" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "yksi parametri ei sovi parametrien listan kokorajoihin" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "liian pitkä parametrilista" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU find versio %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, fuzzy, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "Käyttö: %s yleisimmät_bigrammit < lista > koodattu_lista\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +#, fuzzy +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Lähetä virheraportit osoitteeseen ." + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "päivää" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "\"%s\" on epäkelpo parametri \"%s\":lle" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "\"%s\" on epäkelpo parametri \"%s\":lle" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "varoitus: tietokanta \"%s\" on vanhempi kuin %d %s" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "epäkelpo predikaatti \"%s\"" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "%s:n odotuksenaikainen virhe" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "ympäristö on liian iso \"exec\":ille" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "kaksinkertainen" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "yksinkertainen" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "liian pitkä parametririvi" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "lapsiprosessin oduksenaikainen virhe" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: poistumisstatus 255; keskeytetään" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: pysäytetty signaalilla %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: keskeytetty signaalilla %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: epäkelpo numero -%c -valitsimelle\n" + +#: xargs/xargs.c:1274 +#, fuzzy, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: -%c -valitsimelle annetun arvon täytyy olla >= %ld\n" + +#: xargs/xargs.c:1288 +#, fuzzy, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: -%c -valitsimelle annetun arvon täytyy olla < %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Käyttö: %s [-0prtx] [-e[tiedostonlopetusmerkkijono]] [-i" +"[korvausmerkkijono]]\n" +" [-l[max-rivit]] [-n max-parametrit] [-s max-merkit] [-P max-" +"prosessit]\n" +" [--null] [--eof[=tiedostonlopetusmerkkijono]] [--replace" +"[=korvausmj]]\n" +" [--max-lines[=max-rivit]] [--interactive] [--max-chars=max-merkit]\n" +" [--verbose] [--exit] [--max-procs=max-prosessit] [--max-args=max-" +"param]\n" +" [--no-run-if-empty] [--version] [--help] [komento [alkuparametrit]]\n" + +#~ msgid "block size" +#~ msgstr "lohkokoko" + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find versio %s\n" + +#, fuzzy +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU find versio %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate versio %s\n" + +#, fuzzy +#~ msgid "argument to --limit" +#~ msgstr "liian pitkä parametririvi" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs versio %s\n" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "hupsista -- epäkelpo lauseketyyppi!" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "hupsista -- epäkelpo lauseketyyppi!" + +#, fuzzy +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "toiminnot: -exec KOMENTO ; -fprint TIEDOSTO -fprint0 TIEDOSTO\n" +#~ " -fprintf TIEDOSTOTYYPPI -ok KOMENTO ; -print -print0\n" +#~ " -printf MUOTOILU -prune -ls\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "Predikaattilista:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "Arvopuu:\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Optimoitu arvopuu:\n" + +#, fuzzy +#~ msgid "Optimized command line:\n" +#~ msgstr "Optimoitu arvopuu:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "näennäismuisti loppui" + +#~ msgid "inserting %s\n" +#~ msgstr "lisätään %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " tyyppi: %s %s " + +#~ msgid "left:\n" +#~ msgstr "vasen:\n" + +#~ msgid "right:\n" +#~ msgstr "oikea:\n" + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Normalisoitu arvopuu\n" + +#~ msgid "%s changed during execution of %s" +#~ msgstr "%s muuttui \"%s\":n ajon aikana" + +#~ msgid "%s/.. changed during execution of %s" +#~ msgstr "%s/.. muuttui \"%s\":n ajon aikana" + +#~ msgid "error in %s: %s" +#~ msgstr "virhe \"%s\":ssa: %s" + +#~ msgid "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "options (always true): -daystart -depth -follow --help\n" +#~ " -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev\n" +#~ "tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +#~ msgstr "" +#~ " LAUS1 -o LAUS2 LAUS1 -or LAUS2 LAUS1 , LAUS2\n" +#~ "valitsimet (aina tosia): -daystart -depth -follow --help\n" +#~ " -maxdepth TASOT -mindepth TASOT -mount -noleaf --version -xdev\n" +#~ "testit (N voi olla +N tai -N tai N): -amin N -anewer TIEDOSTO -atime N -" +#~ "cmin N\n" + +#~ msgid "" +#~ "Usage: %s [-d path | --database=path] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] pattern...\n" +#~ msgstr "" +#~ "Käyttö: %s [-d polku | --database=polku] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] malli...\n" + +#~ msgid "unmatched %s quote" +#~ msgstr "Pariton lainausmerkki: %s" diff --git a/po/findutils.pot b/po/findutils.pot new file mode 100644 index 0000000..c8189bb --- /dev/null +++ b/po/findutils.pot @@ -0,0 +1,1170 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "" + +#: gnulib/lib/openat-die.c:33 +msgid "unable to record current working directory" +msgstr "" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "" + +#: gnulib/lib/xstrtol-error.c:63 +#, c-format +msgid "invalid %s%s argument `%s'" +msgstr "" + +#: gnulib/lib/xstrtol-error.c:68 +#, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "" + +#: gnulib/lib/xstrtol-error.c:72 +#, c-format +msgid "%s%s argument `%s' too large" +msgstr "" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "" + +#: find/find.c:204 +msgid "cannot stat current directory" +msgstr "" + +#: find/find.c:384 +#, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "" + +#: find/find.c:394 +#, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "" + +#: find/find.c:490 +#, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:527 +#, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" + +#: find/parser.c:1078 +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "" + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "" + +#: find/parser.c:1788 +#, c-format +msgid "invalid mode %s" +msgstr "" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "" + +#: find/parser.c:2058 +#, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, c-format +msgid "Invalid argument %s to -used" +msgstr "" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +msgid "The environment is too large for exec()." +msgstr "" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "" + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +#: find/tree.c:149 +msgid "invalid expression; empty parentheses are not allowed." +msgstr "" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "" + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "" + +#: find/tree.c:1228 +#, c-format +msgid "paths must precede expression: %s" +msgstr "" + +#: find/tree.c:1237 +#, c-format +msgid "unknown predicate `%s'" +msgstr "" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "" + +#: find/tree.c:1344 +msgid "you have too many ')'" +msgstr "" + +#: find/tree.c:1349 +#, c-format +msgid "unexpected extra predicate '%s'" +msgstr "" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "" + +#: find/util.c:157 +#, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "" + +#: find/util.c:159 +#, c-format +msgid "] [path...] [expression]\n" +msgstr "" + +#: find/util.c:748 +#, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "" + +#: locate/locate.c:197 +msgid "The argument for option --max-database-age must not be empty" +msgstr "" + +#: locate/locate.c:213 locate/locate.c:220 +#, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, c-format +msgid "unexpected EOF in %s" +msgstr "" + +#: locate/word_io.c:146 +#, c-format +msgid "error reading a word from %s" +msgstr "" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "" + +#: xargs/xargs.c:1306 +#, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000..58244a0 --- /dev/null +++ b/po/fr.po @@ -0,0 +1,1424 @@ +# Messages français pour GNU concernant findutils. +# Copyright © 2004 Free Software Foundation, Inc. +# Michel Robitaille , traducteur depuis/since 1996. +# +msgid "" +msgstr "" +"Project-Id-Version: GNU findutils 4.2.27\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2006-05-23 08:00-0500\n" +"Last-Translator: Michel Robitaille \n" +"Language-Team: French \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "le paramètre %s est invalide pour %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "le paramètre %s est ambiguë pour %s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Les paramètres valides sont:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Erreur système inconnue" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: l'option « %s » est ambiguë\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: l'option « --%s » ne requiert pas de paramètre\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: l'option « %c%s » ne requiert pas de paramètre\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: l'option « %s » requiert un paramètre\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: option non reconnue « --%s »\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: option non reconnue « %c%s »\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: option illégale -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: option invalide --%c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: l'option requiert un paramètre -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: l'option « -W %s » est ambiguë\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: l'option « -W %s » ne requiert pas de paramètre\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "Ne peut trouver le répertoire courant" + +#: gnulib/lib/openat-die.c:46 +#, fuzzy +msgid "failed to return to initial working directory" +msgstr "Ne peut retourner au répertoire de départ." + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "`" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "'" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Succès" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "Pas de concordance" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "expression régulière invalide" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Caractère de fusion invalide" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Caractère de nom de classe invalide" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Barre oblique inverse de suffixe" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Référence arrière invalide" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "[ ou [^ non pairée" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "( ou \\( non pairée" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "\\{ non pairée" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Contenu invalide de \\{\\}" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Fin de l'intervalle invalide" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Mémoire épuisée." + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "expression précédant l'expression régulière est invalide" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Fin prématurée de l'expression régulière" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Expression régulière trop grosse" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr ") ou \\) non pairée" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "Pas d'expression régulière précédente" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[yY]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "mémoire épuisée" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "Paramètre invalide « %s » pour « %s »" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "Paramètre invalide « %s » pour « %s »" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "La liste de paramètres est trop longue." + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "Ne peut trouver le répertoire courant" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "Ne peut trouver le répertoire courant" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "AVERTISSEMENT: le système de fichier %s a été récemment démonté." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "AVERTISSEMENT: le système de fichiers %s a été récemment monté." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s a été modifié durant l'exécution de %s (ancien no de périphérique %ld, " +"nouveau no de périphérique %ld, type du système de fichiers est %s) [ref %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s a été modifié durant l'exécution de %s (ancien no d'inode %ld, nouveau " +"no d'inode %ld, type du système de fichiers est %s) [ref %ld]" + +#: find/find.c:992 +#, fuzzy, c-format +msgid "Failed to safely change directory into %s" +msgstr "Ne peut retourner au répertoire de départ." + +#: find/find.c:1089 find/ftsfind.c:284 +#, fuzzy, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" +"Le lien symbolique `%s' fait parti d'une boucle dans la hiérarchie du " +"répertoire; le répertoire sur lequel il pointe a déjà été visité." + +#: find/find.c:1104 +#, fuzzy, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" +"Boucle détecté dans le système de fichiers; `%s' a le même numéro de " +"périphérique et d'inode que le répertoie lequel est %d %s" + +#: find/find.c:1108 +#, fuzzy +msgid "level higher in the file system hierarchy" +msgstr "plus haut niveau dans la hiérarchie du système de fichiers" + +#: find/find.c:1109 +#, fuzzy +msgid "levels higher in the file system hierarchy" +msgstr "plus haust niveaux dans la hiérarchie du système de fichiers" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "AVERTISSEMENT: ne lien symbolique ne sera pas suivi %s" + +#: find/find.c:1398 +#, fuzzy, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" +"AVERTISSEMENT: lien direct (hard link) est erroné pour %s: cela est peut-" +"être dû à une anomalie dans le pilote du système de fichiersé L'option -" +"noleaf est automatiquement activée. Les résultats antérieurs peuvent avoir " +"échoués à inclure des répertoires qui auraient dû être recherchés." + +#: find/fstype.c:250 +msgid "unknown" +msgstr "inconnu" + +#: find/ftsfind.c:298 +#, fuzzy, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" +"Boucle détecté dans le système de fichiers; `%s' a le même numéro de " +"périphérique et d'inode que le répertoie lequel est %d %s" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"AVERTISSEMENT: vous avez spécifié l'option %s après un argument qui n'est " +"pas une option %s mais les options sont positionnelles (%s affecte les tests " +"spécifiés avant aussi bien qu'après)\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"AVERTISSEMENT: l'option -d est obsolète; svp utilisez -depth à la place, " +"parce celle-ci est est une option se conformant à POSIX" + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"\n" +"Le répertoire utilisé par défaut est le répertoire courant;\n" +"l'option par défaut est -print active.\n" +"Une expression peut être constituée: d'opérateurs, d'options, de tests et " +"d'actions:\n" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"les opérateurs (par précédence décroissante; -and est implicite\n" +"lorsqu'aucun autre paramètre n'est fourni):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +"les options positionnelles (toujours vraies i.e. « true »):\n" +" -daystart -follow -regextype\n" +"les options normales (toujours vraies i.e. « true » et devant être " +"spécifiées\n" +"avant les autres expressions):\n" +" -depth --help -maxdepth NIVEAUX -mindepth NIVEAUX -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +"les options de tests (N peut être +N ou -N ou N):\n" +" -amin N -anewer FICHIER -atime N -cmin N -cnewer FICHIER -ctime N " +"-empty -false -fstype TYPE -gid N -group NOM\n" +" -ilname MODÈLE -iname MODÈLE -inum N -iwholename MODÈLE -iregex " +"MODÈLE\n" +" -links N -lname MODÈLE -mmin N -mtime N -name MODÈLE -newer FICHIER" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path MODÈLE -perm [+-]MODE -regex MODÈLE\n" +" -wholename MODÈLE -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NOM -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" +"actions: -delete -print0 -printf FORMAT -fprintf FICHIER FORMAT -print \n" +" -fprint0 FILE -fprint FICHIER -ls -fls FICHIER -prune -quit\n" +" -exec COMMANDE ; -exec COMMANDE {} + -ok COMMANDE ;\n" +" -execdir COMMANDE ; -execdir COMMANDE {} + -okdir COMMANDE ;\n" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"Rapporter (et faire le suivi du progrès de correctif) toutes anomalies selon " +"les instructions se situant sur la\n" +"page http://savannah.gnu.org/ ou si vous n'avez pas d'accès web en adressant " +"un courriel à\n" +"." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "" +"la vérification d'intégrité par la fonction de fnmatch() de la librairie a " +"échoué." + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" +"AVERTISSEMENT: les noms de fichiers Unix habituellement ne contiennent pas " +"de barre obliques (sauf pour les chemins). Cela signifie que '%s %s' sera " +"évaluer comme étant faux tout le temps sur ce système. Vous pouvez trouver " +"que le test '-wholename' est plus utile ou encore celui de '-samefile'. " +"Alternativement, si vous utilisez GNU grep, vous devriez utiliser 'find ... -" +"print0 | grep -FzZ %s'." + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, fuzzy, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "Ne peut ouvrir le fichier d'entrée `%s'" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "mode invalide « %s »" + +#: find/parser.c:1807 +#, fuzzy, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" +"AVERTISSEMENT: vous avez spécifier un type de modèle %s lequel est " +"équivalent à 000. Cela signifie que -perm /000 sera bientôt changé pour être " +"consistant avec -perm -000 pour qu'à ce moment il ne concorde avec aucun " +"fichier mais il sera bient^t changer pour concorder avec tous les fichiers." + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "Paramètre nul invalide pour l'option -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "Type invalide pour l'option -size « %c »" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "Paramètre invalide « %s » pour « %s »" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "le paramètre %s est invalide pour %s" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "Options activées: " + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "AVERTISSEMENT: séquence d'échappement « \\%c » inconnue." + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "AVERTISSEMENT: directive de formatage « %%%c » inconnue." + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" +"Le répertoire courant est inclus dans la variable d'environnement du CHEMIN, " +"lequel est non sécuritaire dans la combinaison avec l'action %s de find. SVP " +"enlever le répertoire courant de $PATH (i.e enlver \".\" ou : en préfixe et " +"suffixe)" + +#: find/parser.c:2921 +#, fuzzy, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" +"Le répertoire courant est inclus dans la variable d'environnement du CHEMIN, " +"lequel est non sécuritaire dans la combinaison avec l'action %s de find. SVP " +"enlever le répertoire courant de $PATH (i.e enlver \".\" ou : en préfixe et " +"suffixe)" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" +"Vous ne pouvez utiliser {} à l'intérieur du nom de l'utilitaire pour --" +"execdir et -okdir, parce qu'il pose un problème potentiel de sécurité." + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "Une seule instance de {} est supportée avec -exec%s ... +" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "L'environnement est trop large pour l'exécution." + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, fuzzy, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "Ne peut ouvrir le fichier d'entrée `%s'" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +#, fuzzy +msgid "Failed to change directory" +msgstr "Ne peut retourner au répertoire de départ." + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "Ne peut faire un clonage (fork)." + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "Erreur s'attendait à %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s a terminé son exécution par le signal %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "expression invalide" + +#: find/tree.c:99 +#, fuzzy, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" +"expression invalide; vous avez utilisé un opérateur binaire sans être " +"précédé d'une expression." + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, fuzzy, c-format +msgid "expected an expression after '%s'" +msgstr "prédicat superflu inattendu" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "expression invalide; il y a trop de ')'" + +#: find/tree.c:143 +#, fuzzy, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "expression invalide; ')' était attendu mais n'a pas été détecté" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "expression invalide; il y a trop de ')'" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "expression invalide; ')' était attendu mais n'a pas été détecté" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "Le type d'expression est invalide." + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "oups -- type (%d) de l'expression invalide!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "les chemins doivent précéder l'expression" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "prédicat invalide « %s »" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "prédicat invalide « %s »" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "Paramètre invalide « %s » pour « %s »" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "Paramètre manquant pour « %s »" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "expression invalide; il y a trop de ')'" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "prédicat superflu inattendu" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "prédicat superflu inattendu" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "L'insertion du paramètre par défaut « and » est invalide." + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Usage: %s [-H] [-L] [-P] [CHEMIN...] [EXPRESSION]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Usage: %s [chemin...] [expression]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "AVERTISSEMENT: séquence d'échappement « \\%c » inconnue." + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"La variable d'environnement FIND_BLOCK_SIZE n'est pas supportée, la seule " +"chose qui peut affecter la taille de bloc est la variable d'environnement " +"POSIXLY_CORRECT" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "La commande est trop longue." + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" +"Ne peut inclure un paramètre simple à l'intérieur de la\n" +"limite de taille de la liste de paramètres." + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "La liste de paramètres est trop longue." + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU findutils version %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Usage: %s [--version | --help]\n" +"ou %s bigrammes_les_plus_communs < liste_de_fichiers > base-de-données-" +"locate\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Rapporter toutes anomalies à .\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "jours" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "Paramètre invalide « %s » pour « %s »" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "Paramètre invalide « %s » pour « %s »" + +#: locate/locate.c:472 +#, fuzzy, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" +"AVERTISSEMENT: le chemin de localisation de la base de données `%s' contient " +"un ; de tête qui n'est valide dans un nom de base de données" + +#: locate/locate.c:607 +#, fuzzy, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "la localisation de la base de données « %s » est corrompu ou invalide" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "Taille de la base de données localisée: %s octets\n" + +#: locate/locate.c:899 +#, fuzzy, c-format +msgid "Matching Filenames: %s " +msgstr "Noms de fichiers: %s " + +#: locate/locate.c:900 +#, fuzzy, c-format +msgid "All Filenames: %s " +msgstr "Noms de fichiers: %s " + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "avec une longueur cumulaive de %s octets" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" +"\n" +"\tduquel %s contient des espaces blancs, " + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" +"\n" +"\t%s contient des caractères de chariot (newline), " + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" +"\n" +"\tet %s contient des caractères avec le bit du haut mis à un.\n" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, fuzzy, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "Taux de compression %4.2f%%\n" + +#: locate/locate.c:941 +#, fuzzy, c-format +msgid "Compression ratio is undefined\n" +msgstr "Taux de compression %4.2f%%\n" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, fuzzy, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "la localisation de la base de données « %s » est corrompu ou invalide" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "La base de données %s est dans le format %s.\n" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, fuzzy, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Usage: %s [-d chemin | --database=chemin] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--version] [--help]\n" +" modèle...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" +"AVERTISSEMENT: la base de données des localisations peut seulement être lue " +"une seule fois à partir de stdin." + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "AVERTISSEMENT: la base de données « %s » est plus vieille de %d %s" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "prédicat superflu inattendu" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "Erreur s'attendait à %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" +"Séquence d'échappement invalide %s dans la spécification d'entrée de " +"délimiteur" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" +"Séquence d'échappement invalide %s dans la spécification d'entrée de " +"délimiteur; la valeur du caractère ne doit pas excéder %lx." + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" +"Séquence d'échappement invalide %s dans la spécification d'entrée de " +"délimiteur; la valeur du caractère ne doit pas excéder %lo." + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" +"Séquence d'échappement invalide %s dans la spécification d'entrée de " +"délimiteur; la valeur du caractère en suffixe %s n'est pas reconnu." + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" +"Spécification d'entrée de délimiteur invalide %s: le délimituer doit être " +"soit un caractère simple ou une séquence d'échappement débutant par \\." + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "L'environnement est trop large pour l'exécution." + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, fuzzy, c-format +msgid "Cannot open input file %s" +msgstr "Ne peut ouvrir le fichier d'entrée `%s'" + +#: xargs/xargs.c:688 +#, fuzzy, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "Vos variables d'environnement prennent %ld octets\n" + +#: xargs/xargs.c:691 +#, fuzzy, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" +"Les limites inférieures et supérieures de POSIX sur la longueure de " +"l'argument: %ld, %ld\n" + +#: xargs/xargs.c:694 +#, fuzzy, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" +"Les limites inférieures et supérieures de POSIX sur la longueure de " +"l'argument: %ld, %ld\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "La longueur maximale de la commande qui pourrait être utilisée: %ld\n" + +#: xargs/xargs.c:701 +#, fuzzy, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Taille du tampon de la commande qui est actuellement utilisé: %ld\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"guillemets %s non pairés; par défaut les guillemets sont particuliers à " +"xargs à moins d'utiliser l'option -O" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "double" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "simple" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "La ligne de paramètres est trop longue." + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "Erreur lors de l'attente de la fin d'exécution du processus enfant." + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: a terminé son exécution avec le statut 255; arrêt abrupt." + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: stoppé par le signal %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s a terminé son exécution par le signal %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: l'option -%c contient un nombre invalide.\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: la valeur de l'option -%c devrait être >= %ld\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: la valeur de l'option -%c devrait être < %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=délimiteur]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L nb-lignes-max] [-l[nb-lignes-max]] [--max-lines[=nb-lignes-max]]\n" +" [-I chaîne-remplacement] [-i[chaîne-remplacement]] [--replace[=chaîne-" +"remplacement]]\n" +" [-n nb-args-max] [--max-args=nb-args-max]\n" +" [-s nb-carac-max] [--max-chars=nb-carac-max]\n" +" [-P nb-proc-max] [--max-procs=nb-proc-max]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=fichier]\n" +" [--version] [--help] [command [arguments-initiaux]]\n" + +#~ msgid "block size" +#~ msgstr "taille des blocs" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "AVERTISSEMENT: le prédicat -ipath est obsolète; svp utilisez -iwholename " +#~ "à la place." + +#~ msgid "GNU find version %s\n" +#~ msgstr "« find » de GNU version %s\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU findutils version %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate version %s\n" + +#~ msgid "argument to --limit" +#~ msgstr "argument à --limit" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs version %s\n" + +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "oups -- type de l'expression est invalide dans mark_stat!" + +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "oups -- type de l'expression est invalide dans mark_type!" + +#~ msgid "old" +#~ msgstr "ancien" + +#, fuzzy +#~ msgid "Reducing arg_max (%lu) to arg_size (%lu)\n" +#~ msgstr "Réduction de arg_max (%ld) à arg_size (%ld)\n" + +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "actions: -exec COMMANDE ; -fprint FICHIER -fprint0 FICHIER -fprintf " +#~ "FICHIER FORMAT\n" +#~ " -fls FICHIER -ok COMMANDE ; -print -print0 -printf FORMAT -prune -" +#~ "ls -delete\n" +#~ " -quit\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "Liste des prédicats:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "Arbre de l'évaluation:\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Arbre optimisé de l'évalution:\n" + +#~ msgid "Optimized command line:\n" +#~ msgstr "Ligne de commande optimisé:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "Mémoire virtuelle épuisée." + +#~ msgid "inserting %s\n" +#~ msgstr "Insertion de %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " type: %s %s " + +#~ msgid "left:\n" +#~ msgstr "laissé:\n" + +#~ msgid "right:\n" +#~ msgstr "droit:\n" + +#~ msgid "[stat called here] " +#~ msgstr "[stat appelé ici]" + +#~ msgid "[type needed here] " +#~ msgstr "[type est attendu ici]" + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Évalution normalisée de l'arborescence:\n" + +#~ msgid "error in %s: %s" +#~ msgstr "Erreur rencontrée dans %s: %s" + +#~ msgid "" +#~ "warning: locate database path `%s' contains a trailing colon, which is " +#~ "not a valid database name" +#~ msgstr "" +#~ "AVERTISSEMENT: le chemin de localisation de la base de données `%s' " +#~ "contient un ; de queue qui n'est valide dans un nom de base de données" + +#~ msgid "%s changed during execution of %s" +#~ msgstr "%s a été modifié durant l'exécution de %s" + +#~ msgid "%s/.. changed during execution of %s" +#~ msgstr "%s/.. a été modifié durant l'exécution de %s" + +#~ msgid "unmatched %s quote" +#~ msgstr "Le paramètre %s n'est pas repérable par apostrophe." + +#~ msgid "cannot open current directory" +#~ msgstr "Ne peut ouvrir le répertoire courant." + +#~ msgid "wait got pid %d, expected pid %d" +#~ msgstr "obtenu le pid %d, s'attendait au pid %d" + +#~ msgid "%s stopped by signal %d" +#~ msgstr "%s stoppé par le signal %d" diff --git a/po/ga.po b/po/ga.po new file mode 100644 index 0000000..41a0dbe --- /dev/null +++ b/po/ga.po @@ -0,0 +1,1420 @@ +# Irish translations for findutils. +# Copyright (C) 2003 Free Software Foundation, Inc. +# Kevin Patrick Scannell , 2003, 2004, 2005, 2006, 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.3.7\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2007-06-12 05:47-0500\n" +"Last-Translator: Kevin Scannell \n" +"Language-Team: Irish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "argóint neamhbhailí %s chun %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "argóint dhébhríoch %s chun %s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Na hargóintí bailí:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "earráid sa scríobh" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Earráid anaithnid an chórais" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: Tá an rogha `%s' débhríoch\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha `--%s'\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha `%c%s'\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: tá argóint de dhíth i ndiaidh na rogha `%s'\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: rogha anaithnid `--%s'\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: rogha anaithnid `%c%s'\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: rogha neamhcheadaithe -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: rogha neamhbhailí -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: tá argóint de dhíth i ndiaidh na rogha -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: Tá an rogha `-W %s' débhríoch\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha `-W %s'\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "níl an chomhadlann reatha ar fáil" + +#: gnulib/lib/openat-die.c:46 +#, fuzzy +msgid "failed to return to initial working directory" +msgstr "Theip ar an chomhadlann oibre a athrú" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "`" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "'" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "D'éirigh leis" + +# ugh. Not clear what kind of things we're matching -- KPS +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "Níl a leithéid ann" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Slonn ionadaíochta neamhbhailí" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Carachtar neamhbhailí comhordaithe" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Ainm neamhbhailí ar aicme charachtar" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Cúlslais ag deireadh" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Cúltagairt neamhbhailí" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "[ nó [^ corr" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "( nó \\( corr" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "\\{ corr" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Ábhar neamhbhailí idir \\{\\}" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Deireadh raoin neamhbhailí" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Cuimhne ídithe" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Is neamhbhailí an slonn ionadaíochta roimhe seo" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Deireadh le slonn ionadaíochta gan choinne" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Slonn ionadaíochta rómhór" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr ") nó \\) corr" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "Níl aon slonn ionadaíochta roimhe seo" + +# allow yes, but also 'i' as in 'is sea' or 's' for 'sea' -- KPS +# neither of these letters is near the 'N' on standard keyboard... +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[yYiIsS]" + +# fortunately, 'n' for 'no' or 'ní hea' - KPS +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +#, fuzzy +msgid "memory exhausted" +msgstr "Cuimhne ídithe" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "argóint neamhbhailí `%s' chun `%s'" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "argóint neamhbhailí `%s' chun `%s'" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "tá líne na n-argóintí rófhada" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "níl an chomhadlann reatha ar fáil" + +#: find/find.c:204 +msgid "cannot stat current directory" +msgstr "níl an chomhadlann reatha ar fáil" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "Rabhadh: bhí an córas comhaid %s dífheistithe le gairid." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "Rabhadh: bhí an córas comhaid %s feistithe le gairid." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"Athraíodh %s%s le linn rith %s (seanuimhir ghléis %ld, uimhir nua gléis %ld, " +"cineál córas comhad %s) [tag %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"Athraíodh %s%s le linn rith %s (seanuimhir inode %ld, uimhir nua inode %ld, " +"cineál córas comhad %s) [tag %ld]" + +#: find/find.c:992 +#, fuzzy, c-format +msgid "Failed to safely change directory into %s" +msgstr "Theip ar an chomhadlann oibre a athrú" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" +"Tá an nasc siombalach %s cuid de lúb sa chóras chomhadlainne; thugamar " +"cuairt cheana ar an gcomhadlann lena bhfuil sé nasctha." + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" +"Braitheadh lúb sa chóras comhaid; tá an uimhir ghléis agus inode céanna ag %" +"s agus comhadlann eile atá %d %s." + +#: find/find.c:1108 +#, fuzzy +msgid "level higher in the file system hierarchy" +msgstr "leibhéal amháin níos airde sa chóras comhaid" + +#: find/find.c:1109 +#, fuzzy +msgid "levels higher in the file system hierarchy" +msgstr "leibhéal níos airde sa chóras comhaid" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "rabhadh: ní leanfar nasc siombalach %s" + +#: find/find.c:1398 +#, fuzzy, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" +"RABHADH: tá líon na nasc crua mícheart le haghaidh %s (ní fhacthas ach " +"st_nlink=%d ach chonacthas %d fochomhadlann cheana): seans go bhfuil fabht " +"le tiománaí do chórais comhaid. Gníomhachtófar an rogha -noleaf go " +"huathoibríoch. Is féidir gur fágadh roinnt comhadlanna ar lár sna torthaí " +"roimhe seo." + +#: find/fstype.c:250 +msgid "unknown" +msgstr "anaithnid" + +#: find/ftsfind.c:298 +#, fuzzy, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" +"Braitheadh lúb sa chóras comhaid; tá an uimhir ghléis agus inode céanna ag %" +"s agus comhadlann eile atá %d %s." + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "Rabhadh: dealraíonn sé go bhfuil mód 0000 ag comhad %s" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"rabhadh: thug tú an rogha %s i ndiaidh na hargóinte %s nach bhfuil ina " +"rogha, ach ní bhacann roghanna lena suímh in aon chor (.i. téann %s i " +"bhfeidhm ar thrialacha ar gach taobh de). Tabhair na roghanna roimh na " +"hargóintí eile.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"rabhadh: tá an rogha -d as feidhm; bain úsáid as -depth ina ionad, ós rud é " +"go bhfuil -depth oiriúnach leis an chaighdeán POSIX." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" +"Níl grúpa ann darb ainm %s, agus ní cosúil le haitheantas uimhriúil grúpa é " +"toisc go bhfuil an iarmhír ait %s air" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "Níl grúpa ann darb ainm %s" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "argóint fholamh i ndiaidh -group, ba chóir ainm grúpa a thabhairt" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"\n" +"is an chomhadlann reatha an chonair réamhshocraithe;\n" +"is `-print' an slonn réamhshocraithe\n" +"is éard is féidir a bheith sa slonn:\n" +"oibreoirí, roghanna, trialacha, agus gníomhartha:\n" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"oibreoirí (ord de réir tosaíochta; tá `-and' intuigthe mura bhfuil eile " +"ann):\n" +" ( SLONN ) ! SLONN -not SLONN SLONN1 -a SLONN2 SLONN1 -and " +"SLONN2\n" +" SLONN1 -o SLONN2 SLONN1 -or SLONN2 SLONN1 , SLONN2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +"roghanna ionaid (fíor i gcónaí): -daystart -follow -regextype\n" +"\n" +"gnáthroghanna (fíor i gcónaí, tugtha roimh na sloinn eile):\n" +" -depth --help -maxdepth LEIBHÉIL -mindepth LEIBHÉIL -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +"trialacha (N = +N, -N, nó N): -amin N -anewer COMHAD -atime N -cmin N\n" +" -cnewer COMHAD -ctime N -empty -false -fstype CINEÁL -gid N -group " +"AINM\n" +" -ilname PATRÚN -iname PATRÚN -inum N -iwholename PATRÚN -iregex " +"PATRÚN\n" +" -links N -lname PATRÚN -mmin N -mtime N -name PATRÚN -newer COMHAD" + +#: find/parser.c:1078 +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path PATRÚN -perm [+-]MÓD -regex PATRÚN\n" +" -readable -writable -executable\n" +" -wholename PATRÚN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user AINM -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" +"gníomhartha: -delete -print0 -printf FORMÁID -fprintf COMHAD FORMÁID -" +"print \n" +" -fprint0 COMHAD -fprint COMHAD -ls -fls COMHAD -prune -quit\n" +" -exec ORDÚ ; -exec ORDÚ {} + -ok ORDÚ ;\n" +" -execdir ORDÚ ; -execdir ORDÚ {} + -okdir ORDÚ ;\n" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"Tabhair tuairisc ar fhabhtanna (agus breathnaigh agus iad á gcur i gceart) " +"via\n" +" an leathanach fabhtanna findutils ag http://savannah.gnu.org/ nó, mura " +"bhfuil\n" +" rochtain ar an nGréasán agat, seol r-phost chuig ." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "theip ar sheiceáil slánchéille don fheidhm leabharlainne fnmatch()." + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" +"rabhadh: níl slaiseanna in ainmneacha comhaid Unix de ghnáth (cé go bhfuil " +"slaiseanna i gconairí). Dá bhrí sin, is dócha go luachálfar '%s %s' mar " +"`falsa' gan teip ar an gcóras seo. Is féidir go mbeidh an tástáil '-" +"wholename' níos áisiúla, nó b'fhéidir '-samefile'. Nó, má tá GNU grep agat, " +"is féidir 'find ... -print0 | grep -FzZ %s' a úsáid mar mhalairt." + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" +"Bhíothas ag súil le slánuimhir dheimhneach dheachúlach i ndiaidh %s, ach " +"fuarthas %s" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "Ní thugann an córas seo slí ar bith chun breith-am comhaid a aimsiú." + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "Ní féidir ciall a bhaint as %s mar dháta nó mar am" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "Níl aon fháil ar bhreith-am comhaid %s" + +#: find/parser.c:1788 +#, c-format +msgid "invalid mode %s" +msgstr "mód neamhbhailí %s" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" +"rabhadh: shonraigh tú patrún móid %s (atá ar comhbhrí le /000). Athraíodh " +"an bhrí a bhaineann le `-perm /000' d'fhonn go mbeidh sé i gcomhréir le `-" +"perm -000'; .i., níor mheaitseáil sé comhad ar bith roimhe seo, ach " +"meaitseálann sé gach uile chomhad anois." + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "argóint nialasach neamhbhailí i ndiaidh -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "argóint neamhbhailí `%c' i ndiaidh -size" + +#: find/parser.c:2058 +#, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "Argóint neamhbhailí `%s%c' tar éis -size" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" +"Glacann rogha -show-control-chars le hargóint aonair, ceann de 'literal' nó " +"'safe'" + +#: find/parser.c:2348 +#, c-format +msgid "Invalid argument %s to -used" +msgstr "Argóint neamhbhailí %s tar éis -used" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "Gnéithe arna gcumasú: " + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "Ní cheadaítear ach litir amháin in argóint i ndiaidh -type" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "Argóint anaithnid i ndiaidh -type: %c" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "rabhadh: seicheamh éalúcháin anaithnid `\\%c'" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "earráid: %s ag deireadh an teaghráin fhormáidithe" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "rabhadh: treoir fhormáide anaithnid `%%%c'" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "earráid: tá treoir fhormáidithe `%%%c' in áirithe don am le teacht" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" +"Tá an chomhadlann reatha san áireamh san athróg thimpeallachta PATH, agus is " +"neamhdhaingean é seo in éineacht leis an ghníomh %s. Bain an chomhadlann " +"reatha as $PATH (.i., bain \".\", nó idirstad ar dtús/i ndeireadh, amach)" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" +"Tá conair choibhneasta %s san áireamh san athróg thimpeallachta PATH, agus " +"is neamhdhaingean é seo in éineacht leis an ghníomh %s. Bain an chonair sin " +"as $PATH" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" +"Ní cheadaítear {} mar chuid d'ainm uirlise le -execdir nó -okdir, de bharr " +"gur neamhdhaingean é seo." + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "Ní thacaítear ach aon phéire amháin {} le -exec%s ... +" + +#: find/parser.c:3066 +msgid "The environment is too large for exec()." +msgstr "Tá an timpeallacht rómhór le haghaidh exec()." + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "róshreabhadh uimhríochta agus deireadh an lae á áireamh" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "earráid chaighdeánach" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "aschur caighdeánach" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "Rabhadh: ní féidir breith-am an chomhaid %s a aimsiú" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "Ní féidir ionchur caighdeánach a dhúnadh" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "Theip ar an chomhadlann oibre a athrú" + +# "fork" not in standard refs/corpus. Maybe want a "gabhl*" word instead? -KPS +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "ní féidir forc a dhéanamh" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "earráid ag feitheamh le %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "Stopadh %s leis an chomhartha %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "slonn neamhbhailí" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" +"slonn neamhbhailí; tá oibreoir dénártha '%s' in úsáid agat agus níl aon rud " +"roimhe." + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "bhíothas ag súil le slonn idir '%s' agus ')'" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "bhíothas ag súil le slonn tar éis '%s'" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "slonn neamhbhailí; an iomarca ')'" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" +"slonn neamhbhailí; bhíothas ag súil le ')' ach ní fhaca mé é. B'fhéidir go " +"bhfuil preideacáid bhreise de dhíth ort tar éis '%s'" + +#: find/tree.c:149 +msgid "invalid expression; empty parentheses are not allowed." +msgstr "slonn neamhbhailí; ní cheadaítear lúibíní folmha." + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "slonn neamhbhailí; bhíothas ag súil le ')' áit éigin." + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "úps! -- is neamhbhailí an cineál sloinn seo!" + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "úps! -- cineál neamhbhailí sloinn (%d)!" + +#: find/tree.c:1228 +#, c-format +msgid "paths must precede expression: %s" +msgstr "caithfidh conairí a theacht roimh an slonn: %s" + +#: find/tree.c:1237 +#, c-format +msgid "unknown predicate `%s'" +msgstr "preideacáid anaithnid `%s'" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "preideacáid neamhbhailí `%s'" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "argóint neamhbhailí `%s' chun `%s'" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "tá argóint de dhíth i ndiaidh na rogha `%s'" + +#: find/tree.c:1344 +msgid "you have too many ')'" +msgstr "an iomarca ')' agat" + +#: find/tree.c:1349 +#, c-format +msgid "unexpected extra predicate '%s'" +msgstr "preideacáid bhreise gan choinne '%s'" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "preideacáid bhreise gan choinne" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "úps! -- ionsá neamhbhailí de `and'!" + +#: find/util.c:157 +#, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Úsáid: %s [-H] [-L] [-P] [-Oleibhéal] [-D " + +#: find/util.c:159 +#, c-format +msgid "] [path...] [expression]\n" +msgstr "] [conair...] [slonn]\n" + +#: find/util.c:748 +#, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "Ag déanamh neamhshuim ar bhratach anaithnid dífhabhtaithe %s" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "Argóint fholamh tar éis rogha -D." + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "Ní mór slánuimhir dheachúlach a bheith go díreach tar éis rogha -O" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "Sonraigh slánuimhir dheachúlach go díreach tar éis -O" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "Leibhéal neamhbhailí optamaithe %s" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" +"Leibhéal optamaithe %lu ró-ard. Más mian leat comhaid a aimsiú go tapa, déan " +"breithniú ar \"GNU locate\"." + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"Níl an athróg thimpeallachta FIND_BLOCK_SIZE le fáil, níl aon rud ag dul i " +"bhfeidhm ar an méid bloic ach an athróg thimpeallachta POSIXLY_CORRECT" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" + +#: lib/buildcmd.c:293 +#, fuzzy +msgid "argument list too long" +msgstr "tá líne na n-argóintí rófhada" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "Tógtha le GNU gnulib, leagan %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Úsáid: %s [--version | --help]\n" +"nó %s bigramanna_níos_coitianta < liosta > locate-bunachar-sonraí\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Seol tuairiscí fabhtanna chuig .\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +#, fuzzy +msgid "Failed to write to standard output" +msgstr "aschur caighdeánach" + +#: locate/locate.c:150 +msgid "days" +msgstr "lá" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "Ní cheadaítear argóint fholamh i ndiaidh rogha --max-database-age" + +#: locate/locate.c:213 locate/locate.c:220 +#, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "Argóint neamhbhailí %s tar éis --max-database-age" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "tá ainm comhaid i mbunachar sonraí %s atá rófhada le láimhseáil" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "bunachar sonraí locate %s truaillithe nó neamhbhailí" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "Méid an bhunachair sonraí `Locate': %s beart\n" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "Ainmneacha comhaid a mheaitseálann: %s " + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "Gach ainm comhaid: %s " + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "le fad iomlán = %s beart" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" +"\n" +"\ttá %s beart ina spás bán, " + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" +"\n" +"\t%s beart ina línte nua, " + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" +"\n" +"\tagus %s beart lena ngiotán níos airde socraithe.\n" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" +"Seans go ndearnadh scagadh ar roinnt ainmneacha comhaid, agus dá bhrí sin ní " +"féidir an cóimheas comhbhrúite a aimsiú.\n" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "Cóimheas comhbhrúite %4.2f%% (tá cóimheas níos airde níos fearr)\n" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "Cóimheas comhbhrúite gan socrú\n" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" +"Tá cuma bhunachar sonraí slocate ar %s, ach dealraíonn sé go bhfuil leibhéal " +"slándála %c air, agus ní thacaíonn GNU findutils leis an leibhéal sin faoi " +"láthair" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" +"Is bunachar sonraí \"slocate\" é %s. Is formáid nua é seo, agus is dócha go " +"mbeidh fadhbanna leis de thuras na huaire." + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" +"Bunachar sonraí \"slocate\" é %s le leibhéal slándála %d nach dtacaítear " +"leis; á ligean thart." + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" +"Thug tú rogha -E, ach ní cheadaítear an rogha sin le bunachar sonraí slocate " +"a bhfuil leibhéal deimhneach slándála aige. Ní ghinfear aon torthaí le " +"haghaidh an bhunachair sonraí seo.\n" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "Is bunachar sonraí \"slocate\" é %s. Cuirfear rogha '-e' i ngníomh." + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" +"Neamhbhailí é bunachar sonraí locate %s den seandéanamh; tá sé roghearr" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "Bunachar sonraí %s san fhormáid %s.\n" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "Baineann an bunachar sonraí úsáid as ionchódú caolcheannach.\n" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "Baineann an bunachar sonraí úsáid as ionchódú mórcheannach.\n" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" +"Nílim cinnte an bhfuil an bunachar sonraí mórcheannach nó caolcheannach.\n" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Úsáid: %s [-d conair | --database=conair] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=CINEÁL]\n" +" [--max-database-age D] [--version] [--help]\n" +" patrún...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "theip ar phribhlíedí grúpa a ligean síos" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "theip ar phribhléidí setuid a ligean síos" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "Theip ar phribhléidí a ligean síos go hiomlán" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "theip ar phribhléidí setgid a ligean síos" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" +"rabhadh: ní féidir an bunachar sonraí `locale' a léamh ó stdin ach aon uair " +"amháin." + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "rabhadh: tá bunachar sonraí %s thar %d %s d'aois (fíoraois: %.1f %s)" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "preideacáid bhreise gan choinne '%s'" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "earráid ag feitheamh le %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "Seicheamh neamhcheadaithe éalúcháin %s i dteormharcóir ionchurtha." + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" +"Seicheamh neamhcheadaithe éalúcháin %s i dteormharcóir ionchurtha; ní " +"cheadaítear carachtair le luach níos mó ná %lx." + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" +"Seicheamh neamhcheadaithe éalúcháin %s i dteormharcóir ionchurtha; ní " +"cheadaítear carachtair le luach níos mó ná %lo." + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" +"Seicheamh neamhcheadaithe éalúcháin %s i dteormharcóir ionchurtha; " +"carachtair anaithnid %s ag an gcríoch." + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" +"Sonrúchán neamhcheadaithe %s ar theormharcóir ionchurtha; caithfidh an " +"teormharcóir a bheith ina charachtar aonair nó seicheamh éalúcháin le \\ ar " +"tosach." + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "Tá an timpeallacht rómhór á rith" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "rabhadh: luach %ld tar éis rogha -s rómhór, úsáidfear %ld ina ionad" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "Ní féidir inchomhad %s a oscailt" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "Líonann do chuid athróga timpeallachta %lu beart\n" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "Uasluach d'fhad na n-argóintí de réir POSIX (an córas seo): %lu\n" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" +"Uasluach níos lú d'fhad na n-argóintí a cheadaíonn POSIX (gach córas): %lu\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "Uasfhad d'ordú gur féidir linn a úsáid: %ld\n" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Méid an mhaoláin ordaithe atá in úsáid i ndáiríre: %lu\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" +"\n" +"Rachaidh xargs ar aghaidh anois, agus déanfaidh sé iarracht ar a ionchur a " +"léamh agus orduithe a rith; mura bhfuil sé seo an rud atá uait, iontráil " +"carachtar comhadchríche.\n" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" +"Rabhadh: rithfear %s uair amháin ar a laghad. Mura mian leat é seo, déan " +"idirbhriseadh anois.\n" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"comhartha athfhriotail %s corr; caitheann xargs le comharthaí athfhriotail " +"go speisialta mura bhfuil an rogha -0 tugtha agat" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "dúbailte" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "singil" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" +"rabhadh: chonacthas carachtar NUL san ionchur. Ní féidir é a chur ar " +"aghaidh trí liosta na n-argóintí. An raibh sé ar intinn agat an rogha --" +"null a úsáid?" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "tá líne na n-argóintí rófhada" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "earráid ag feitheamh le próiseas sleachta" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: stádas scortha 255; á thobscor" + +# does "stopped" have the implication of "temporarily"? +# might then want to distinguish from following msgid... --KPS +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: stopadh leis an chomhartha %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: stopadh leis an chomhartha %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: uimhir neamhbhailí i ndiaidh na rogha -%c\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: caithfidh an luach i ndiaidh na rogha -%c a bheith >= %ld\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: caithfidh an luach i ndiaidh na rogha -%c a bheith < %ld\n" + +#: xargs/xargs.c:1306 +#, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Úsáid: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=tm]\n" +" [-E teaghrán-eof] [-e[teaghrán-eof]] [--eof[=teaghrán-eof]]\n" +" [-L uas-línte] [-l[uas-línte]] [--max-lines[=uas-línte]]\n" +" [-I ionadaí] [-i[ionadaí]] [--replace[=ionadaí]]\n" +" [-n uas-args] [--max-args=uas-args]\n" +" [-s uas-char] [--max-chars=uas-char]\n" +" [-P uas-próis] [--max-procs=uas-próis] [[--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=comhad]\n" +" [--version] [--help] [ordú [argóintí-tosaigh]]\n" + +#~ msgid "block size" +#~ msgstr "méid bloc" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "rabhadh: tá an phreideacáid -ipath as feidhm; bain úsáid as -iwholename " +#~ "ina hionad, le do thoil." + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find, leagan %s\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU findutils, leagan %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate, leagan %s\n" + +#~ msgid "argument to --limit" +#~ msgstr "argóint i ndiaidh --limit" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs, leagan %s\n" + +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "úps! -- cineál neamhbhailí sloinn i mark_stat!" + +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "úps! -- cineál neamhbhailí sloinn i mark_type!" + +#~ msgid "old" +#~ msgstr "sean" + +#~ msgid "Reducing arg_max (%ld) to arg_size (%ld)\n" +#~ msgstr "Ag laghdú arg_max (%ld) go arg_size (%ld)\n" + +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "gníomhartha: -exec ORDÚ; -fprint COMHAD -fprint0 COMHAD -fprintf COMHAD " +#~ "FORMÁID\n" +#~ " -fls COMHAD -ok ORDÚ ; -print -print0 -printf FORMÁID -prune -ls -" +#~ "delete\n" +#~ " -quit\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "Liosta Preideacáidí:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "Géagchórais `Eval':\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Géagchóras `Eval' Optamaithe:\n" + +#~ msgid "Optimized command line:\n" +#~ msgstr "Líne na n-orduithe optamaithe:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "cuimhne fhíorúil ídithe" + +#~ msgid "inserting %s\n" +#~ msgstr "ag ionsá %s\n" + +# don't know if alignment matters here, so use 4-letter 'sórt' vs. 'cineál'-KPS +#~ msgid " type: %s %s " +#~ msgstr " sórt: %s %s " + +#~ msgid "left:\n" +#~ msgstr "taobh clé:\n" + +#~ msgid "right:\n" +#~ msgstr "taobh deas:\n" + +#~ msgid "[stat called here] " +#~ msgstr "[glaodh stat anseo] " + +#~ msgid "[type needed here] " +#~ msgstr "[tá gá le cineál anseo] " + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Géagchóras `Eval' Normalaithe:\n" diff --git a/po/gl.po b/po/gl.po new file mode 100644 index 0000000..fd20de3 --- /dev/null +++ b/po/gl.po @@ -0,0 +1,1313 @@ +# Galician translation of findutils. +# Copyright (C) 2000 Free Software Foundation, Inc +# Jesús Bravo Álvarez , 2000. +# +# Se desexas colaborar connosco na traducción de programas libres ó galego, +# vai mira-la páxina do noso grupo: http://www.ctv.es/USERS/jtarrio/trans +# +# First Version: 2000-02-16 23:49+0100 +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.1.5\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2000-05-30 10:11+0200\n" +"Last-Translator: Jesús Bravo Álvarez \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gnulib/lib/argmatch.c:133 +#, fuzzy, c-format +msgid "invalid argument %s for %s" +msgstr "argumento %s de `%s' non válido" + +#: gnulib/lib/argmatch.c:134 +#, fuzzy, c-format +msgid "ambiguous argument %s for %s" +msgstr "argumento %s de `%s' non válido" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Os argumentos válidos son:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Erro de sistema descoñecido" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: a opción `%s' é ambigua\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: a opción `--%s' non permite ningún argumento\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: a opción `%c%s' non permite ningún argumento\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: a opción `%s' require un argumento\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: opción `--%s' descoñecida\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: opción `%c%s' descoñecida\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: opción ilegal -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: opción non válida -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: a opción require un argumento -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: a opción `-W %s' é ambigua\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: a opción `-W %s' non permite ningún argumento\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "non se pode obte-lo directorio actual" + +#: gnulib/lib/openat-die.c:46 +#, fuzzy +msgid "failed to return to initial working directory" +msgstr "non se pode voltar ó directorio inicial" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "`" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "'" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Éxito" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "O patrón non encaixa" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Expresión regular non válida" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Carácter de ordenación non válido" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Nome de clase de caracteres non válido" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Barra invertida final" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Referencia anterior non válida" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "[ ou [^ desemparellado" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "( ou \\( desemparellado" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "\\{ desemparellado" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Contido de \\{\\} non válido" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Final de rango non válido" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Memoria esgotada" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Expresión regular precedente non válida" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Fin prematura da expresión regular" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Expresión regular longa de máis" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr ") ou \\) desemparellado" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "Non hai unha expresión regular anterior" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "" + +#: gnulib/lib/xalloc-die.c:34 +#, fuzzy +msgid "memory exhausted" +msgstr "Memoria esgotada" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "argumento `%s' de `%s' non válido" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "argumento `%s' de `%s' non válido" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "lista de argumentos longa de máis" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "non se pode obte-lo directorio actual" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "non se pode obte-lo directorio actual" + +#: find/find.c:384 +#, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "" + +#: find/find.c:394 +#, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "" + +#: find/find.c:490 +#, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:527 +#, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:992 +#, fuzzy, c-format +msgid "Failed to safely change directory into %s" +msgstr "non se pode voltar ó directorio inicial" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "descoñecido" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +#, fuzzy +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"a rota por defecto é o directorio actual; a expresión por defecto é -print\n" +"expresión pode consistir en:\n" +"operadores (precedencia decrecente; -and está implícito cando non se " +"indican\n" +"outros):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" + +#: find/parser.c:1064 +#, fuzzy +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"a rota por defecto é o directorio actual; a expresión por defecto é -print\n" +"expresión pode consistir en:\n" +"operadores (precedencia decrecente; -and está implícito cando non se " +"indican\n" +"outros):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" + +#: find/parser.c:1073 +#, fuzzy +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +" -cnewer FICHEIRO -ctime N -empty -false -fstype TIPO -gid N -group " +"NOME\n" +" -ilname PATRÓN -iname PATRÓN -inum N -ipath PATRÓN -iregex PATRÓN\n" +" -links N -lname PATRÓN -mmin N -mtime N -name PATRÓN -newer FICHEIRO\n" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path PATRÓN -perm [+-]MODO -regex PATRÓN\n" +" -size N[bckw] -true -type [bcdpfls] -uid N -used N -user NOME\n" +" -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "" + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "modo `%s' non válido" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "argumento nulo de -size non válido" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "tipo `%c' de -size non válido" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "argumento `%s' de `%s' non válido" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "argumento %s de `%s' non válido" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "aviso: secuencia de escape `\\%c' descoñecida" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "aviso: directiva de formato `%%%c' descoñecida" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "o ambiente é grande de máis para exec" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +#, fuzzy +msgid "Failed to change directory" +msgstr "non se pode voltar ó directorio inicial" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "non se pode facer fork" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "erro agardando a %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s terminado por sinal %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "expresión non válida" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "" + +#: find/tree.c:121 +#, fuzzy +msgid "invalid expression; you have too many ')'" +msgstr "expresión non válida" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "expresión non válida" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "ups -- tipo de expresión no válida" + +#: find/tree.c:231 +#, fuzzy, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "ups -- tipo de expresión no válida" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "os camiños teñen que preceder á expresión" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "predicado `%s' non válido" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "predicado `%s' non válido" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "argumento `%s' de `%s' non válido" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "non atopado argumento de `%s'" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "expresión non válida" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "predicado `%s' non válido" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "ups -- inserción dun and por defecto non válida" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Uso: %s [camiño...] [expresión]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Uso: %s [camiño...] [expresión]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "aviso: secuencia de escape `\\%c' descoñecida" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "comando longo de máis" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" +"non se pode encaixar o argumento no límite de tamaño da lista de argumentos" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "lista de argumentos longa de máis" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU find versión %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, fuzzy, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "Uso: %s bigramas_máis_comúns < lista > lista_codificada\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "días" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "argumento `%s' de `%s' non válido" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "argumento `%s' de `%s' non válido" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "aviso: a base de datos `%s' ten máis de %d %s" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "predicado `%s' non válido" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "erro agardando a %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "o ambiente é grande de máis para exec" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "dobre" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "simple" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "liña de argumentos longa de máis" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "erro agardando polo proceso fillo" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: saíu con estado 255; abortando" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: parado por sinal %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: terminado por sinal %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: número para a opción -%c non válido\n" + +#: xargs/xargs.c:1274 +#, fuzzy, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: o valor para a opción -%c ten que ser >= %ld\n" + +#: xargs/xargs.c:1288 +#, fuzzy, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: o valor para a opción -%c ten que ser < %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Uso: %s [-0prtx] [-e[cadea-eof]] [-i[remprazar-cadea]] [-l[máx-liñas]]\n" +" [-n máx-args] [-s máx-cars] [-P máx-procs] [--null] [--eof[=cadea-" +"eof]]\n" +" [--replace[=remprazar-cadea]] [--max-lines[=máx-liñas]] [--" +"interactive]\n" +" [--max-chars=máx-cars] [--verbose] [--exit] [--max-procs=máx-procs]\n" +" [--max-args=máx-args] [--no-run-if-empty] [--version] [--help]\n" +" [comando [argumentos-iniciais]]\n" + +#~ msgid "block size" +#~ msgstr "tamaño do bloque" + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find versión %s\n" + +#, fuzzy +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU find versión %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate versión %s\n" + +#, fuzzy +#~ msgid "argument to --limit" +#~ msgstr "liña de argumentos longa de máis" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs versión %s\n" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "ups -- tipo de expresión no válida" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "ups -- tipo de expresión no válida" + +#, fuzzy +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "accións: -exec COMANDO ; -fprint FICHEIRO -fprint0 FICHEIRO\n" +#~ " -fprint FICHEIRO FORMATO ; -ok COMANDO ; -print -print0\n" +#~ " -printf FORMATO -prune -ls\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "Lista de Predicados:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "Árbore de Evaluación:\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Árbore de Evaluación Optimizado:\n" + +#, fuzzy +#~ msgid "Optimized command line:\n" +#~ msgstr "Árbore de Evaluación Optimizado:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "memoria virtual esgotada" + +#~ msgid "inserting %s\n" +#~ msgstr "inserindo %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " tipo: %s %s " + +#~ msgid "left:\n" +#~ msgstr "esquerda:\n" + +#~ msgid "right:\n" +#~ msgstr "dereita:\n" + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Árbore de Evaluación Normalizado:\n" + +#~ msgid "cannot open current directory" +#~ msgstr "non se pode abri-lo directorio actual" + +#~ msgid "error in %s: %s" +#~ msgstr "erro en %s: %s" + +#~ msgid "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "options (always true): -daystart -depth -follow --help\n" +#~ " -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev\n" +#~ "tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +#~ msgstr "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "opcións (sempre certas): -daystart -depth -follow --help\n" +#~ " -maxdepth NIVEIS -mindepth NIVEIS -mount -noleaf --version -xdev\n" +#~ "tests (N pode ser +N ou -N ou N): -amin N -anewer FICHEIRO -atime N -cmin " +#~ "N\n" + +#~ msgid "" +#~ "Usage: %s [-d path | --database=path] [--version] [--help]\n" +#~ " [-e | --existing] pattern...\n" +#~ msgstr "" +#~ "Uso: %s [-d camiño | --database=camiño] [--version] [--help]\n" +#~ " [-e | --existing] patrón...\n" + +#~ msgid "unmatched %s quote" +#~ msgstr "comiña %s desemparellada" diff --git a/po/hr.po b/po/hr.po new file mode 100644 index 0000000..9bc7acb --- /dev/null +++ b/po/hr.po @@ -0,0 +1,1310 @@ +# Translation of GNU findutils. +# Copyright (C) 2002 Free Software Foundation, Inc. +# Hrvoje Niksic , 2002. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.1.7\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2002-04-22 02:04+02:00\n" +"Last-Translator: Hrvoje Niksic \n" +"Language-Team: Croatian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-2\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: gnulib/lib/argmatch.c:133 +#, fuzzy, c-format +msgid "invalid argument %s for %s" +msgstr "neispravan argument %s za `%s'" + +#: gnulib/lib/argmatch.c:134 +#, fuzzy, c-format +msgid "ambiguous argument %s for %s" +msgstr "dvosmislen argument %s za `%s'" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Valjani argumenti su:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Nepoznata sistemska gre~ka" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: opcija `%s' je dvosmislena\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: uz opciju `--%s' ne ide argument\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: uz opciju `%c%s' ne ide argument\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: opcija `%s' tra~i argument\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: nepoznata opcija `--%s'\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: nepoznata opcija `%c%s'\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: nedopu~tena opcija -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: neispravna opcija -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: opcija tra~i argument -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: opcija `-W %s' je dvosmislena\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: opcija `-W %s' ne dopu~ta argument\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "ne mogu saznati trenutni direktorij" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "`" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "'" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Uspjeh" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "Nema poklapanja" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Neispravan regularni izraz" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Neispravan kolacijski znak" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Neispravan naziv znakovne klase" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Obrnuta kosa crta na kraju" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Neispravna povratna referenca" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Nesparen [ ili [^" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Nesparena ( ili \\(" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Nesparena \\{" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Neispravan sadr¾aj \\{\\}" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Neispravan kraj raspona" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Memorija iscrpljena" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Neispravan prethodni regularni izraz" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Prerani kraj regularnog izraza" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Regularni izraz prevelik" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Nesparena ) ili \\)" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "Nedostaje prethodni regularni izraz" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[dDyY]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +#, fuzzy +msgid "memory exhausted" +msgstr "Memorija iscrpljena" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "neispravan argument `%s' `%s'-u" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "neispravan argument `%s' `%s'-u" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "popis argumenata predugaèak" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "ne mogu saznati trenutni direktorij" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "ne mogu saznati trenutni direktorij" + +#: find/find.c:384 +#, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "" + +#: find/find.c:394 +#, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "" + +#: find/find.c:490 +#, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:527 +#, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "nepoznat" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +#, fuzzy +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"podrazumijevana staza je trenutni direktorij; podrazumijevan izraz je -" +"print\n" +"izrazi se mogu sastojati od:\n" +"operatora (po opadajuæem prioritetu; -and je implicitan gdje drugi\n" +"nisu navedeni):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" + +#: find/parser.c:1064 +#, fuzzy +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"podrazumijevana staza je trenutni direktorij; podrazumijevan izraz je -" +"print\n" +"izrazi se mogu sastojati od:\n" +"operatora (po opadajuæem prioritetu; -and je implicitan gdje drugi\n" +"nisu navedeni):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" + +#: find/parser.c:1073 +#, fuzzy +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +" -cnewer SPIS -ctime N -empty -false -fstype TIP -gid N -group IME\n" +" -ilname UZORAK -iname UZORAK -inum N -ipath UZORAK -iregex UZORAK\n" +" -links N -lname UZORAK -mmin N -mtime N -name UZORAK -newer SPIS\n" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path UZORAK -perm [+-]MOD -regex UZORAK\n" +" -size N[bckw] -true -type [bcdpfls] -uid N -used N -user IME\n" +" -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "" + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "neispravan mod `%s'" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "neispravan prazan argument -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "neispravan -size tip `%c'" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "neispravan argument `%s' `%s'-u" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "neispravan argument %s za `%s'" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "upozorenje: nepoznati escape `\\%c'" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "upozorenje: nepoznata format direktiva `%%%c'" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "okoli¹ je prevelik za exec" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "ne mogu se forkati" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "gre¹ka pri èekanju na %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s terminiran signalom %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "neispravan izraz" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "" + +#: find/tree.c:121 +#, fuzzy +msgid "invalid expression; you have too many ')'" +msgstr "neispravan izraz" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "neispravan izraz" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "oops -- neispravan tip izraza!" + +#: find/tree.c:231 +#, fuzzy, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "oops -- neispravan tip izraza!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "staze moraju biti navedene prije izraza" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "neispravan predikat `%s'" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "neispravan predikat `%s'" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "neispravan argument `%s' `%s'-u" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "nedostaje argument `%s'-u" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "neispravan izraz" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "neispravan predikat `%s'" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "oops -- neispravno podrazumijevano ubacivanje and-a!" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Uporaba: %s [staza...] [izraz]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Uporaba: %s [staza...] [izraz]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "upozorenje: nepoznati escape `\\%c'" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "naredba predugaèka" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" +"ne mo¾e stati u jedan argument unutar ogranièenja na duljinu liste argumenata" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "popis argumenata predugaèak" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU find verzija %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, fuzzy, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "Uporaba: %s most_common_bigrams < lista > kodirana_lista\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +#, fuzzy +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Prijavljujte gre¹ke na adresu ." + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "dana" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "neispravan argument `%s' `%s'-u" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "neispravan argument `%s' `%s'-u" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "upozorenje: baza `%s' starija je od %d %s" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "neispravan predikat `%s'" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "gre¹ka pri èekanju na %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "okoli¹ je prevelik za exec" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "dvostruki" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "jednostruki" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "linija s argumentima predugaèka" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "gre¹ka za vrijeme èekanja na djeèji proces" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: iza¹ao sa statusom 255; poni¹tavam" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: zaustavljen signalom %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: terminiran signalom %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: neispravan broj za opciju -%c\n" + +#: xargs/xargs.c:1274 +#, fuzzy, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: vrijednost opcije -%c mora biti >= %ld\n" + +#: xargs/xargs.c:1288 +#, fuzzy, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: vrijednost opcije -%c mora biti < %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Uporaba: %s [-0prtx] [-e[eof-niz]] [-i[zamjenski-niz]] [-l[maks-redaka]]\n" +" [-n maks-argumenata] [-s maks-znakova] [-P maks-procesa] [--null]\n" +" [--eof[=eof-niz]] [--replace[=zamjenski-niz]] [--max-lines[=maks-" +"redaka]]\n" +" [--interactive] [--max-chars=maks-znakova] [--verbose] [--exit]\n" +" [--max-procs=maks-procesa] [--max-args=maks-argumenata]\n" +" [--no-run-if-empty] [--version] [--help]\n" +" [naredba [poèetni-argumenti]]\n" + +#~ msgid "block size" +#~ msgstr "veli~ina bloka" + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find verzija %s\n" + +#, fuzzy +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU find verzija %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate verzija %s\n" + +#, fuzzy +#~ msgid "argument to --limit" +#~ msgstr "linija s argumentima predugaèka" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs verzija %s\n" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "oops -- neispravan tip izraza!" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "oops -- neispravan tip izraza!" + +#, fuzzy +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "radnje: -exec NAREDBA ; -fprint SPIS -fprint0 SPIS -fprintf FOMAT SPISA\n" +#~ " -ok NAREDBA ; -print -print0 -printf FORMAT -prune -ls\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "Popis Predikata:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "Stablo Evaluacije:\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Optimirano Stablo Evaluacije:\n" + +#, fuzzy +#~ msgid "Optimized command line:\n" +#~ msgstr "Optimirano Stablo Evaluacije:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "virtualna memorija iscrpljena" + +#~ msgid "inserting %s\n" +#~ msgstr "umeæem %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " tip: %s %s " + +#~ msgid "left:\n" +#~ msgstr "lijevo:\n" + +#~ msgid "right:\n" +#~ msgstr "desno:\n" + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Normalizirano Stablo Evaluacije:\n" + +#~ msgid "%s changed during execution of %s" +#~ msgstr "%s se promijenio dok se izvr¹avao %s" + +#~ msgid "%s/.. changed during execution of %s" +#~ msgstr "%s/.. se promijenio dok se izvr¹avao %s" + +#~ msgid "error in %s: %s" +#~ msgstr "gre¹ka u %s: %s" + +#~ msgid "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "options (always true): -daystart -depth -follow --help\n" +#~ " -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev\n" +#~ "tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +#~ msgstr "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "opcije (uvijek istinite): -daystart -depth -follow --help\n" +#~ " -maxdepth NIVOA -mindepth NIVOA -mount -noleaf --version -xdev\n" +#~ "testovi (N mo¾e biti +N ili -N ili N): -amin N -anewer SPIS -atime N -" +#~ "cmin N\n" + +#~ msgid "" +#~ "Usage: %s [-d path | --database=path] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] pattern...\n" +#~ msgstr "" +#~ "Usage: %s [-d staza | --database=path] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] uzorak...\n" + +#~ msgid "unmatched %s quote" +#~ msgstr "nesparen %s navodnik" diff --git a/po/hu.po b/po/hu.po new file mode 100644 index 0000000..ed08613 --- /dev/null +++ b/po/hu.po @@ -0,0 +1,1363 @@ +# Hungarian translation of findutils. +# Copyright (C) 2002, 2006, 2007 Free Software Foundation, Inc. +# Translated using gnu.twm +# +# Emese Kovács , 2002. +# Gabor Kelemen , 2006, 2007. +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.3.8\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2007-11-06 19:04+0100\n" +"Last-Translator: Gabor Kelemen \n" +"Language-Team: Hungarian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "a(z) \"%s\" argumentum érvénytelen a következőhöz: %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "a(z) \"%s\" argumentum nem egyértelmű a következőhöz: \"%s\"" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Az érvényes argumentumok a következők:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "íráshiba" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Ismeretlen rendszerhiba" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: a(z) \"%s\" kapcsoló nem egyértelmű\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: a(z) \"--%s\" kapcsoló nem enged meg argumentumot\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: a(z) \"%c%s\" kapcsoló nem enged meg argumentumot\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: a(z) \"%s\" kapcsolóhoz argumentum szükséges\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: a(z) \"--%s\" kapcsoló ismeretlen\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: a(z) \"%c%s\" kapcsoló ismeretlen\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: illegális kapcsoló -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: érvénytelen kapcsoló -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: a kapcsoló egy argumentumot igényel -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: a \"-W %s\" kapcsoló nem egyértelmű\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: a \"-W %s\" kapcsoló nem enged meg argumentumot\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "az aktuális könyvtár beolvasása sikertelen" + +#: gnulib/lib/openat-die.c:46 +#, fuzzy +msgid "failed to return to initial working directory" +msgstr "A könyvtárváltás meghiúsult" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "\"" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "\"" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "" + +#: gnulib/lib/regcomp.c:137 +#, fuzzy +msgid "Invalid regular expression" +msgstr "érvénytelen kifejezés" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: gnulib/lib/regcomp.c:164 +#, fuzzy +msgid "Invalid range end" +msgstr "a(z) \"%s\" argumentum érvénytelen a -used kapcsolóhoz" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "" + +#: gnulib/lib/regcomp.c:170 +#, fuzzy +msgid "Invalid preceding regular expression" +msgstr "érvénytelen kifejezés" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[iIyY]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "A(z) \"%s\" argumentum érvénytelen a következőhöz: %s" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "A(z) \"%s\" argumentum érvénytelen a következőhöz: %s" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "az argumentumsor túl hosszú" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "az aktuális könyvtár beolvasása sikertelen" + +#: find/find.c:204 +msgid "cannot stat current directory" +msgstr "az aktuális könyvtár elérése sikertelen" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "Figyelmeztetés: a(z) \"%s\" fájlrendszer nemrég le lett választva." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "Figyelmeztetés: a(z) %s fájlrendszer nemrég csatlakoztatva lett." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"A(z) %s%s megváltozott a(z) %s végrehajtása során (régi eszközszám: %ld, új " +"eszközszám: %ld, a fájlrendszer típusa: %s) [ref %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"A(z) %s%s megváltozott a(z) %s végrehajtása során (régi inode szám: %ld, új " +"inode szám: %ld, fájlrendszer típusa: %s) [ref %ld]" + +#: find/find.c:992 +#, fuzzy, c-format +msgid "Failed to safely change directory into %s" +msgstr "A könyvtárváltás meghiúsult" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" +"A(z) %s szimbolikus link egy hurok része a könyvtárhierarchiában; a program " +"már bejárta azt a pontot, ahová mutat." + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" +"A rendszer fájlrendszerhurkot észlelt; a(z) %s azonos eszközszámmal és inode-" +"dal rendelkezik, mint egy könyvtár, amely a(z) %d %s." + +#: find/find.c:1108 +#, fuzzy +msgid "level higher in the file system hierarchy" +msgstr "szinttel feljebb a fájlrendszer-hierarchiában" + +#: find/find.c:1109 +#, fuzzy +msgid "levels higher in the file system hierarchy" +msgstr "szinttel feljebb a fájlrendszer-hierarchiában" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "figyelmeztetés: a(z) %s szimbolikus linket a rendszer nem követi" + +#: find/find.c:1398 +#, fuzzy, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" +"FIGYELMEZTETÉS: A hard linkek száma hibás a következőhöz: %s; (csak st_nlink=" +"%d volt látható, de már %d alkönyvtár be lett járva) ez lehet egy hiba a " +"fájlrendszer illesztőprogramjában. A find -noleaf kapcsolója automatikusan " +"bekapcsolva. A korábbi próbálkozások meghiúsulhattak a keresendő könyvtárak " +"felvételére." + +#: find/fstype.c:250 +msgid "unknown" +msgstr "ismeretlen" + +#: find/ftsfind.c:298 +#, fuzzy, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" +"A rendszer fájlrendszerhurkot észlelt; a(z) %s azonos eszközszámmal és inode-" +"dal rendelkezik, mint egy könyvtár, amely a(z) %d %s." + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "Figyelmeztetés: úgy tűnik, a(z) %s fájl módja 0000" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"figyelmeztetés: a(z) %s kapcsolót a(z) %s nem kapcsoló argumentum után adtad " +"meg, de a kapcsolók nem helyzetérzékenyek (a(z) %s hatással van mind az " +"előtte, mind az utána található tesztekre). A kapcsolókat az egyéb " +"argumentumok előtt kell megadni.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"figyelmeztetés: a -d kapcsoló elavult; helyette a -depth kapcsoló " +"használandó, mivel az utóbbi felel meg a POSIX-nak." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" +"%s nem egy meglévő csoport neve és nem tűnik numerikus csoportazonosítónak, " +"mivel a nem várt %s kiterjesztéssel rendelkezik." + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "%s nem egy meglévő csoport neve" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "a -group argumentuma üres, de egy csoportnévnek kellene lennie" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"\n" +"az alapértelmezett útvonal az aktuális könyvtár; az alapértelmezett " +"kifejezés -print, kifejezés lehet:\n" +"operátorok, kapcsolók, tesztek és tevékenységek:\n" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"operátorok (csökkenő precedencia; alapértelmezett -and, ha nincs más " +"megadva):\n" +" ( KIF ) ! KIF -not KIF KIF1 -a KIF2 KIF1 -and KIF2\n" +" KIF1 -o KIF2 KIF1 -or KIF2 KIF1 , KIF2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +"helyzetérzékeny kapcsolók: (mindig igaz) -daystart -follow -regextype\n" +"\n" +"normál kapcsolók (mindig igaz, más kifejezések előtt adandó meg):\n" +" -depth --help -maxdepth SZINTEK -mindepth SZINTEK -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +"Tesztek (Az N +N, -N vagy N lehet): -amin N -anewer FILE -atime N -cmin N\n" +"-cnewer FÁJL -ctime N -empty -false -fstype TÍPUS -gid N -group NÉV\n" +" -ilname MINTA -iname MINTA -inum N -ipath MINTA -iregex MINTA\n" +" -links N -lname MINTA -mmin N -mtime N -name MINTA -newer FÁJL" + +#: find/parser.c:1078 +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path MINTA -perm [+-]MÓD -regex MINTA\n" +" -readable -writable -executable\n" +" -wholename MINTA -size N[bcwkMG] -true -type [bcdpflsD]\n" +" -uid N -used N -user NÉV -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" +"tevékenységek: -delete -print0 -printf FORMÁTUM -fprintf FÁJL FORMÁTUM -" +"print\n" +" -fprint0 FÁJL -fprint FÁJL -ls -fls FÁJL -prune -quit\n" +" -exec PARANCS; -exec PARANCS {} + -ok PARANCS ;\n" +" -execdir PARANCS ; -execdir PARANCS {} + -okdir PARANCS ;\n" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"A hibákat a findutils hibajelentő oldalán jelentheted be a\n" +"http://savannah.gnu.org/ címen, vagy e-mailben a " +"címen." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "az fnmatch() könyvtári függvény vizsgálata sikertelen." + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" +"figyelmeztetés: a Unix fájlnevek általában nem tartalmaznak / jeleket (noha " +"az útvonalnevek igen). Ez azt jelenti, hogy a(z) \"%s %s\" értéke " +"valószínűleg mindig hamis lesz ezen a rendszeren. Lehet, hogy a \"-wholename" +"\" vagy a \"-samefile\" tesztet sokkal hasznosabbnak találnád. Ennek " +"alternatívájaként, ha a GNU grep-et használod, akkor használhatod a " +"következő parancsot: \"find ... -print0 | grep -FzZ %s\"." + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "%s várt pozitív egész argumentuma helyett %s érkezett." + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" +"A rendszer nem ad lehetőséget a fájl létrehozási idejének megállapítására." + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "%s nem értelmezhető dátumként vagy időként" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "A(z) \"%s\" fájl létrehozási ideje nem kérhető le" + +#: find/parser.c:1788 +#, c-format +msgid "invalid mode %s" +msgstr "érvénytelen mód: \"%s\"" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" +"figyelmeztetés: a(z) %s módmintát adtad meg, amely azonos a /000-val. A -" +"perm /000 jelentése módosult, így összhangba került a -perm -000-val, azaz " +"míg korábban nem illeszkedett egyetlen fájlra sem, most az összes fájlra " +"illeszkedik." + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "érvénytelen null argumentum a -size kapcsolónál" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "a -size típusa (\"%c\") érvénytelen" + +#: find/parser.c:2058 +#, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "A(z) \"%s%c\" argumentum érvénytelen a -size kapcsolóhoz" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" +"A -show-control-chars kapcsoló egyetlen paramétert vár, amely a \"literal\" " +"vagy \"safe\" egyike lehet" + +#: find/parser.c:2348 +#, c-format +msgid "Invalid argument %s to -used" +msgstr "a(z) \"%s\" argumentum érvénytelen a -used kapcsolóhoz" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "Engedélyezett szolgáltatások: " + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "A -type argumentumai csak egy betűt tartalmazhatnak" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "A -type argumentuma ismeretlen: %c" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "figyelmeztetés: ismeretlen escape: \"\\%c\"" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "hiba: %s a formátum-karaktersorozat végén" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "figyelmeztetés: ismeretlen formátum-előírás: \"%%%c\"" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" +"hiba: a \"%%%c\" formátumdirektíva fenn van tartva a jövőbeli használatra" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" +"Az aktuális könyvtárat tartalmazza a PATH környezeti változó, amely nem " +"biztonságos kombináció a find %s műveletével. Távolítsd el az aktuális " +"könyvtárat a $PATH változóból (azaz a pontot vagy a kezdő/záró " +"pontosvesszőt)." + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" +"A(z) %s relatív útvonalat tartalmazza a PATH környezeti változó, amely nem " +"biztonságos a find %s műveletével kombinálva. Távolítsd el ezt a bejegyzést " +"a $PATH változóból." + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" +"A {} jel nem használható a -execdir és -okdir segédprogramjának nevében, " +"mivel ez egy lehetséges biztonsági probléma." + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "Csak egyetlen {} példány támogatott a -exec%s ... + esetén" + +#: find/parser.c:3066 +msgid "The environment is too large for exec()." +msgstr "A környezet túl nagy az exec() híváshoz." + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "túlcsordulás a mai nap végének kiszámítására tett kísérlet közben" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "szabványos hibakimenet" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "szabványos kimenet" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "Figyelmeztetés: a(z) %s fájl létrehozási dátuma nem állapítható meg" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "A szabványos bemenet nem zárható le" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "A könyvtárváltás meghiúsult" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "fork() rendszerhívás sikertelen" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "hiba a következőre várakozás közben: %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s leállítva %d szignállal" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "érvénytelen kifejezés" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" +"érvénytelen kifejezés; bináris operátort (\"%s\") használtál úgy, hogy semmi " +"nem volt előtte." + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "a program kifejezést várt a(z) \"%s\" és \")\" között" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "a program kifejezést várt a(z) \"%s\" után" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "érvénytelen kifejezés; túl sok ) karaktert tartalmaz" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" +"érvénytelen kifejezés; a program egy \")\" jelre számított, de nem találta " +"meg. Lehet, hogy egy további predikátum szükséges a(z) \"%s\" után." + +#: find/tree.c:149 +msgid "invalid expression; empty parentheses are not allowed." +msgstr "érvénytelen kifejezés; az üres zárójelek nem engedélyezettek." + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" +"érvénytelen kifejezés; a program egy ) jelre számított, de nem találta meg." + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "hoppá -- érvénytelen kifejezéstípus!" + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "hoppá -- érvénytelen kifejezéstípus (%d)!" + +#: find/tree.c:1228 +#, c-format +msgid "paths must precede expression: %s" +msgstr "az útvonalaknak meg kell előzniük a kifejezést: %s" + +#: find/tree.c:1237 +#, c-format +msgid "unknown predicate `%s'" +msgstr "ismeretlen predikátum: \"%s\"" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "érvénytelen predikátum: \"%s\"" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "A(z) \"%s\" argumentum érvénytelen a következőhöz: %s" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "A(z) \"%s\" argumentuma hiányzik" + +#: find/tree.c:1344 +msgid "you have too many ')'" +msgstr "túl sok \")\" karaktert tartalmaz" + +#: find/tree.c:1349 +#, c-format +msgid "unexpected extra predicate '%s'" +msgstr "váratlan extra predikátum: \"%s\"" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "váratlan extra predikátum" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "hoppá -- az and alapértelmezett beszúrása érvénytelen!" + +#: find/util.c:157 +#, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Használat: %s [-H] [-L] [-P][-Oszint] [-D " + +#: find/util.c:159 +#, c-format +msgid "] [path...] [expression]\n" +msgstr "] [útvonal...] [kifejezés]\n" + +#: find/util.c:748 +#, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "Az ismeretlen hibakereső jelző figyelmen kívül marad: %s" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "A -D kapcsoló paramétere üres." + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" +"A -O kapcsolót azonnal egy tízes számrendszerbeli egésznek kell követnie" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "Közvetlenül a -O után adjon meg egy tízes számrendszerbeli egészet" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "Érvénytelen optimalizálási szint: %s" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" +"A(z) %lu optimalizálási szint túl nagy. Ha nagyon gyorsan akar fájlokat " +"megtalálni, akkor használja a GNU locate programot." + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"A FIND_BLOCK_SIZE környezeti változó nem támogatott, egyedül a " +"POSIXLY_CORRECT környezeti változó befolyásolja a blokkméretet." + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" + +#: lib/buildcmd.c:293 +#, fuzzy +msgid "argument list too long" +msgstr "az argumentumsor túl hosszú" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "Készült a GNU gnulib %s verzió használatával\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Használat: %s [--version | --help]\n" +"vagy %s most_common_bigrams < fájllista > locate-adatbázis\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"A hibákat a címen jelentsd.\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +#, fuzzy +msgid "Failed to write to standard output" +msgstr "szabványos kimenet" + +#: locate/locate.c:150 +msgid "days" +msgstr "nap" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "a --max-database-age kapcsoló argumentuma nem lehet üres" + +#: locate/locate.c:213 locate/locate.c:220 +#, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "A(z) \"%s\" argumentum érvénytelen a --max-database-age kapcsolóhoz" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" +"a(z) %s locate adatbázis a locate által kezelhetőnél hosszabb fájlnevet " +"tartalmaz" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "a(z) \"%s\" locate adatbázis sérült vagy érvénytelen" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "A locate adatbázis mérete: %s bájt\n" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "Megfelelő fájlnevek: %s " + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "Minden fájlnév: %s " + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "összesített hossz: %s bájt" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" +"\n" +"\tamelyből %s tartalmaz üreshely-, " + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" +"\n" +"\t%s tartalmaz új sor karaktereket, " + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" +"\n" +"\tés %s tartalmaz beállított magas bittel rendelkező karaktereket.\n" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" +"Egyes fájlnevek lehet, hogy ki lettek szűrve, így nem számítható ki a " +"tömörítési arány.\n" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "Tömörítési arány: %4.2f%% (a nagyobb jobb)\n" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "A tömörítési arány nincs megadva\n" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" +"a(z) \"%s\" locate adatbázis slocate adatbázisnak tűnik, azonban a " +"biztonsági szintje %c, amit a GNU findutils jelenleg nem támogat" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" +"a(z) \"%s\" egy slocate adatbázis. Ezek támogatása új, jelenleg problémák " +"lehetnek vele." + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" +"a(z) \"%s\" egy nem támogatott biztonsági szintű (%d) slocate adatbázis; " +"figyelmen kívül marad" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" +"Megadtad a -E kapcsolót, de ez nem használható az slocate formátumú, nem " +"nulla biztonsági szintű adatbázisokkal. Ebből az adatbázisból nem lesznek " +"találatok előállítva.\n" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "a(z) \"%s\" egy slocate adatbázis. A -e kapcsoló engedélyezve lesz." + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" +"A régi formátumú %s locate adatbázis túl rövid ahhoz, hogy érvényes legyen" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "A(z) %s adatbázis %s formátumú.\n" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "Az adatbázis gépiszó-kódolása kis endian.\n" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "Az adatbázis gépiszó-kódolása nagy endian.\n" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "Az adatbázis gépiszó-kódolási sorrendje nem nyilvánvaló.\n" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Használat: %s [-d útvonal | --database=útvonal] [-e | -E | --[non-]" +"existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename]\n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TÍPUS]\n" +" [--max-database-age D] [--version] [--help]\n" +" minta...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "a csoport jogosultságainak eldobása meghiúsult" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "a setuid jogosultságok eldobása meghiúsult" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "A jogosultságok teljes eldobása meghiúsult" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "a setgid jogosultságok eldobása meghiúsult" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" +"figyelmeztetés: a locate adatbázis csak egyszer olvasható a szabvány " +"bemenetről." + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "" +"figyelmeztetés: a(z) \"%s\" adatbázis régebbi %d %s napnál (a tényleges kor " +"%.1f %s)" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "váratlan extra predikátum: \"%s\"" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "hiba a következőre várakozás közben: %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" +"A(z) \"%s\" escape sorozat érvénytelen a bemenet elhatárolójának " +"meghatározásában." + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" +"A(z) \"%s\" escape sorozat érvénytelen a bemenet elhatárolójának " +"meghatározásában; a karakterértékek nem léphetik túl a(z) %lx értéket." + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" +"A(z) \"%s\" escape sorozat érvénytelen a bemenet elhatárolójának " +"meghatározásában; a karakterértékek nem léphetik túl a(z) %lo értéket." + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" +"A(z) \"%s\" escape sorozat érvénytelen a bemenet elhatárolójának " +"meghatározásában ;a(z) %s záró karaktereket a program nem ismerte fel." + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" +"A bemenet elhatárolójának \"%s\" meghatározása érvénytelen: az elhatároló " +"vagy egy karakter, vagy egy \\ kezdetű escape sorozat kell legyen." + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "a környezet túl nagy az exec-hez" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" +"figyelmeztetés: a -s kapcsoló %ld értéke túl nagy, helyette a(z) %ld kerül " +"felhasználásra" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "A bemeneti fájl (%s) nem nyitható meg" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "A környezeti változói %lu bájtot foglalnak\n" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" +"A POSIX felső korlátja az argumentum hosszára (ezen a rendszeren): %lu\n" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" +"A POSIX által megengedhető legkisebb korlát az argumentum hosszára (minden " +"rendszeren): %lu\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "A ténylegesen használható parancs maximális hossza: %ld\n" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "A ténylegesen használt parancspuffer hossza: %lu\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" +"\n" +"Az xargs végrehajtása most folytatódik, és megpróbálja beolvasni a bemenetét " +"és végrehajtani a parancsokat; ha nem ezt akartad, akkor nyomd meg a fájl " +"vége billentyűkombinációt.\n" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" +"Figyelmeztetés: %s legalább egyszer lefut. Ha nem akarod, hogy ez " +"megtörténjen, akkor nyomd meg a megszakítás kombinációt.\n" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"pár nélküli %s idézőjel; alapértelmezésben az idézőjelek speciálisak az " +"xargs számára, hacsak nem használja a -0 kapcsolót" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "kettős" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "egyszeres" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" +"figyelmeztetés: NULL karakter fordult elő a bemenetben. Az argumentumlistán " +"keresztül ez nem adható át. Lehet, hogy a --null kapcsolót akartad használni?" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "az argumentumsor túl hosszú" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "hiba a gyermekfolyamatra való várakozás közben" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: kilépési értéke 255; megszakítás" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: %d szignállal leállítva (stopped)" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: %d szignállal leállítva (terminated)" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: érvénytelen szám a -%c kapcsolóhoz\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: a -%c kapcsoló értéke >= %ld kell legyen\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: a -%c kapcsoló értéke < %ld kell legyen\n" + +#: xargs/xargs.c:1306 +#, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Használat: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=elhat]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-sor] [-l[max-sor]] [--max-lines[=max-sor]]\n" +" [-I csere-kar] [-i[csere-kar]] [--replace[=csere-kar]]\n" +" [-n max-arg] [--max-args=max-arg]\n" +" [-s max-kar] [--max-chars=max-kar]\n" +" [-P max-proc] [--max-procs=max-proc] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=fájl]\n" +" [--version] [--help] [parancs [induló-argumentumok]]\n" + +#~ msgid "block size" +#~ msgstr "blokkméret" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "figyelmeztetés: a -ipath predikátum elavult; helyette használd a -" +#~ "iwholename kapcsolót." + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find %s verzió\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU findutils %s verzió\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate %s verzió\n" + +#~ msgid "argument to --limit" +#~ msgstr "a --limit argumentuma" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs %s verzió\n" diff --git a/po/id.po b/po/id.po new file mode 100644 index 0000000..521efb8 --- /dev/null +++ b/po/id.po @@ -0,0 +1,1306 @@ +# findutils 4.1.7 +# Copyright (C) 2001 Free Software Foundation, Inc. +# Tedi Heriyanto , 1999, 2002. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.1.7\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2002-03-21 00:24GMT+0700\n" +"Last-Translator: Tedi Heriyanto \n" +"Language-Team: Indonesian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 0.9.5\n" + +#: gnulib/lib/argmatch.c:133 +#, fuzzy, c-format +msgid "invalid argument %s for %s" +msgstr "argumen %s tidak valid untuk %s" + +#: gnulib/lib/argmatch.c:134 +#, fuzzy, c-format +msgid "ambiguous argument %s for %s" +msgstr "argumen %s ambigu untuk %s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Valid argumen adalah:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Kesalahan sistem tidak dikenal" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: opsi `%s' ambigu\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: opsi `--%s' tidak membolehkan sebuah argumen\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: opsi `--%c%s' tidak membolehkan sebuah argumen\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: opsi `%s' membutuhkan sebuah argumen\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: opsi tidak dikenal `--%s'\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: opsi tidak dikenal `%c%s'\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: opsi ilegal -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: opsi tidak valid -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: opsi membutuhkan sebuah argumen -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: opsi `-W %s' ambigu\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: opsi `-W %s' tidak membolehkan sebuah argumen\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "tidak dapat mengetahui direktori saat ini" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "`" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "'" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Sukses" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "Tidak cocok" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "ekspresi reguler tidak valid" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Karakter kolasi tidak valid" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Nama kelas karakter tidak valid" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Trailing backslash" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Referensi balik tidak valid" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "[ atau [^ tidak sesuai " + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "( atau \\( tidak sesuai" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "\\{ tidak cocok" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Isi \\{\\} tidak valid" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Akhir jangkauan tidak valid" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Memori habis" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Ekspresi reguler sebelumnya tidak valid" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Akhir ekspresi reguler prematur" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Ekspresi reguler terlalu besar" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr ") atau \\) tidak cocok" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "Tidak ada ekspresi reguler sebelumnya" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[yY]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +#, fuzzy +msgid "memory exhausted" +msgstr "Memori habis" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "argumen `%s' tidak valid untuk `%s'" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "argumen `%s' tidak valid untuk `%s'" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "daftar argumen terlalu panjang" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "tidak dapat mengetahui direktori saat ini" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "tidak dapat mengetahui direktori saat ini" + +#: find/find.c:384 +#, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "" + +#: find/find.c:394 +#, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "" + +#: find/find.c:490 +#, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:527 +#, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "Tidak dikenal" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +#, fuzzy +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"Path default adalah direktori saat ini; ekspresi default adalah -print\n" +"ekspresi boleh terdiri dari:\n" +"operator (urutan menurun; -and adalah implisit bila tidak ada yang lain):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" + +#: find/parser.c:1064 +#, fuzzy +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"Path default adalah direktori saat ini; ekspresi default adalah -print\n" +"ekspresi boleh terdiri dari:\n" +"operator (urutan menurun; -and adalah implisit bila tidak ada yang lain):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" + +#: find/parser.c:1073 +#, fuzzy +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -ipath PATTERN -iregex PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE\n" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -size N[bckw] -true -type [bcdpfls] -uid N -used N -user NAME\n" +" -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "" + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "Mode `%s' tidak valid" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "Null argument tidak valid untuk -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "Type `%c' -size tidak valid" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "argumen `%s' tidak valid untuk `%s'" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "argumen %s tidak valid untuk %s" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "PERINGATAN: escape `\\%c' tidak dikenal" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "PERINGATAN: format direktif `%%%c' tidak dikenal" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "environment terlalu besar untuk exec" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "tidak dapat mem-fork" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "Kesalahan waiting untuk %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s di-terminate oleh sinyal %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "ekspresi tidak valid" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "" + +#: find/tree.c:121 +#, fuzzy +msgid "invalid expression; you have too many ')'" +msgstr "ekspresi tidak valid" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "ekspresi tidak valid" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "oops -- tipe ekspresi tidak valid!" + +#: find/tree.c:231 +#, fuzzy, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "oops -- tipe ekspresi tidak valid!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "path harus mendahului ekspresi" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "predikat `%s' tidak valid" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "predikat `%s' tidak valid" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "argumen `%s' tidak valid untuk `%s'" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "argumen hilang untuk `%s'" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "ekspresi tidak valid" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "predikat `%s' tidak valid" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "oops -- penyisipan and baku tidak valid!" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Pemakaian: %s [path...] [ekspresi]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Pemakaian: %s [path...] [ekspresi]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "PERINGATAN: escape `\\%c' tidak dikenal" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "perintah terlalu panjang" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "tidak dapat memuat argumen dalam batasan daftar argumen" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "daftar argumen terlalu panjang" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU find versi %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, fuzzy, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "Pemakaian: %s most_common_bigrams < list > coded_list\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +#, fuzzy +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Laporkan bug ke ." + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "hari" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "argumen `%s' tidak valid untuk `%s'" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "argumen `%s' tidak valid untuk `%s'" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "peringatan: database `%s' berumur lebih dari %d %s" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "predikat `%s' tidak valid" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "Kesalahan waiting untuk %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "environment terlalu besar untuk exec" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "ganda" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "tunggal" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "argumen baris terlalu panjang" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "kesalahan waiting untuk proses anak" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: keluar dengan status 255; batal" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: dihentikan oleh sinyal %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: di-terminate oleh sinyal %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: kesalahan bilangan untuk pilihan -%c\n" + +#: xargs/xargs.c:1274 +#, fuzzy, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: nilai untuk pilihan -%c harus >= %ld\n" + +#: xargs/xargs.c:1288 +#, fuzzy, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: nilai untuk pilihan -%c harus < %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Pemakaian: %s [-Oprtx] [-e[eof-str]] [-i[replace-str]] [-l[max-lines]]\n" +" [-n max-args] [-s max-chars] [-P max-procs] [--null] [--eof[=eof-" +"str]]\n" +" [--replace[=replace-str]] [--max-lines[=max-lines]] [--" +"interactive]\n" +" [--max-chars=max-chars] [--verbose] [--exit] [--max-procs=max-" +"procs]\n" +" [--max-args=max-args] [--no-run-if-empty] [--version] [--help]\n" +" [command [initial-arguments]]\n" + +#~ msgid "block size" +#~ msgstr "ukuran blok" + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find versi %s\n" + +#, fuzzy +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU find versi %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate versi %s\n" + +#, fuzzy +#~ msgid "argument to --limit" +#~ msgstr "argumen baris terlalu panjang" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs versi %s\n" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "oops -- tipe ekspresi tidak valid!" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "oops -- tipe ekspresi tidak valid!" + +#, fuzzy +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "aksi: -exec PERINTAH ; -fprint FILE -fprint0 FILE -fprintf FORMAT FILE\n" +#~ " -ok PERINTAH ; -print -print0 -printf FORMAT -prune -ls\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "Daftar Predikat:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "Pohon Eval:\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Pohon Eval Teroptimisasi:\n" + +#, fuzzy +#~ msgid "Optimized command line:\n" +#~ msgstr "Pohon Eval Teroptimisasi:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "Memori virtual habis" + +#~ msgid "inserting %s\n" +#~ msgstr "Menyisipkan %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " type: %s %s " + +#~ msgid "left:\n" +#~ msgstr "kiri:\n" + +#~ msgid "right:\n" +#~ msgstr "kanan:\n" + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Pohon Eval Ternormalisasi:\n" + +#~ msgid "%s changed during execution of %s" +#~ msgstr "%s dirubah selama eksekusi %s" + +#~ msgid "%s/.. changed during execution of %s" +#~ msgstr "%s/.. dirubah selama eksekusi %s" + +#~ msgid "error in %s: %s" +#~ msgstr "Kesalahan dalam %s: %s" + +#~ msgid "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "options (always true): -daystart -depth -follow --help\n" +#~ " -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev\n" +#~ "tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +#~ msgstr "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "pilihan (selalu benar): -daystart -depth -follow --help\n" +#~ " -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev\n" +#~ "tes (N dapat +N atau -N atau N): -amin N -anewer FILE -atime N -cmin N\n" + +#~ msgid "" +#~ "Usage: %s [-d path | --database=path] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] pattern...\n" +#~ msgstr "" +#~ "Pemakaian: %s [-d path] [--database=path] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] pattern...\n" + +#~ msgid "unmatched %s quote" +#~ msgstr "quote %s tidak cocok" diff --git a/po/insert-header.sin b/po/insert-header.sin new file mode 100644 index 0000000..b26de01 --- /dev/null +++ b/po/insert-header.sin @@ -0,0 +1,23 @@ +# Sed script that inserts the file called HEADER before the header entry. +# +# At each occurrence of a line starting with "msgid ", we execute the following +# commands. At the first occurrence, insert the file. At the following +# occurrences, do nothing. The distinction between the first and the following +# occurrences is achieved by looking at the hold space. +/^msgid /{ +x +# Test if the hold space is empty. +s/m/m/ +ta +# Yes it was empty. First occurrence. Read the file. +r HEADER +# Output the file's contents by reading the next line. But don't lose the +# current line while doing this. +g +N +bb +:a +# The hold space was nonempty. Following occurrences. Do nothing. +x +:b +} diff --git a/po/it.po b/po/it.po new file mode 100644 index 0000000..9e379f8 --- /dev/null +++ b/po/it.po @@ -0,0 +1,1345 @@ +# Italian messages for GNU findutils. +# Copyright (C) 2001 Free Software Foundation, Inc. +# Marco d'Itri , 2001. +# Giovanni Bortolozzo , 1997-2000. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.2.10\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2004-12-23 12:44+0100\n" +"Last-Translator: Marco d'Itri \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "l'argomento %s non è valido per %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "l'argomento %s è ambiguo per %s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Gli argomenti validi sono:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Errore di sistema sconosciuto" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: l'opzione `%s' è ambigua\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: l'opzione `--%s' non accetta un argomento\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: l'opzione `%c%s' non accetta un argomento\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: l'opzione `%s' richiede un argomento\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: l'opzione `--%s' è sconosciuta\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: l'opzione `%c%s' è sconosciuta\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: opzione illecita -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: opzione non valida -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: l'opzione richiede un argomento -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: l'opzione `-W %s' è ambigua\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: l'opzione `-W %s' non accetta un argomento\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "impossibile ottenere la directory corrente" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "\"" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "\"" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Successo" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "Nessuna corrispondenza" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Espressione regolare non valida" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Carattere di collazione non valido" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Nome della classe di caratteri non valido" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Backlash finale" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Riferimento all'indietro non valido" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "[ o [^ non accoppiata" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "( o \\( non accoppiata" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "\\{ non accoppiata" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Contenuto di \\{\\} non valido" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Fine dell'intervallo non valida" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Memoria esaurita" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "L'espressione regolare precedente non è valida" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Fine prematura dell'espressione regolare" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "L'espressione regolare è troppo grande" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr ") o \\) non accoppiata" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "Non c'è una espressione regolare precedente" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[yYsS]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +#, fuzzy +msgid "memory exhausted" +msgstr "Memoria esaurita" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "l'argomento `%s' di `%s' non è valido" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "l'argomento `%s' di `%s' non è valido" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "la lista degli argomenti è troppo lunga" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "impossibile ottenere la directory corrente" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "impossibile ottenere la directory corrente" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "Attenzione: il file system %s è stato smontato di recente." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "Attenzione: il file system %s è stato montato di recente." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s è cambiato durante l'esecuzione di %s (vecchio numero di dispositivo %" +"ld, nuovo numero di dispositivo %ld, il filesystem è di tipo %s) [rif. %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s è cambiato durante l'esecuzione di %s (vecchio numero di inode %ld, " +"nuovo numero di inode %ld, il filesystem è di tipo %s) [rif. %ld]" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, fuzzy, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" +"Il link simbolico `%s' è parte di un loop nella gerarchia delle directory; " +"la directory a cui punta è già stata visitata." + +#: find/find.c:1104 +#, fuzzy, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" +"Trovato un loop nel file system; `%s' ha gli stessi numeri di dispositivo e " +"di inode di una directory %d %s." + +#: find/find.c:1108 +#, fuzzy +msgid "level higher in the file system hierarchy" +msgstr "livello più in alto nella gerarchia del file system" + +#: find/find.c:1109 +#, fuzzy +msgid "levels higher in the file system hierarchy" +msgstr "livelli più in alto nella gerarchia del file system" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "sconosciuto" + +#: find/ftsfind.c:298 +#, fuzzy, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" +"Trovato un loop nel file system; `%s' ha gli stessi numeri di dispositivo e " +"di inode di una directory %d %s." + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"attenzione: l'opzione %s è stata usata dopo l'argomento %s che non è un " +"opzione, ma le opzioni non sono posizionali (%s ha effetto sui test indicati " +"sia prima che dopo di essa). Usare le opzioni prima degli altri argomenti.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"attenzione: l'opzione -d è deprecata; per favore usare l'opzione -depth, che " +"segue POSIX." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +#, fuzzy +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"il percorso predefinito è la directory corrente; l'espressione predefinita " +"è\n" +"-print. L'espressione può essere formata da:\n" +"operatori (di precedenza decrescente; -and è implicito quando non ne sono\n" +" indicati altri):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2" + +#: find/parser.c:1064 +#, fuzzy +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"il percorso predefinito è la directory corrente; l'espressione predefinita " +"è\n" +"-print. L'espressione può essere formata da:\n" +"operatori (di precedenza decrescente; -and è implicito quando non ne sono\n" +" indicati altri):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2" + +#: find/parser.c:1068 +#, fuzzy +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +" ESPR1 -o ESPR2 ESPR1 -or ESPR2 ESPR1 , ESPR2\n" +"opzioni posizionali (sempre vere): -daystart -follow\n" +"opzioni normali (sempre vere, indicate prima delle altre espressioni): -" +"depth\n" +" --help -maxdepth LIVELLI -mindepth LIVELLI -mount -noleaf --version -" +"xdev\n" +" --ignore_readdir_race -noignore_readdir_race\n" +"test (N può essere +N, -N o N): -amin N -anewer FILE -atime N -cmin N" + +#: find/parser.c:1073 +#, fuzzy +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +" -cnewer FILE -ctime N -empty -false -fstype TIPO -gid N -group NOME\n" +" -ilname MODELLO -iname MODELLO -inum N -iwholename MODELLO -iregex " +"MODELLO\n" +" -links N -lname MODELLO -mmin N -mtime N -name MODELLO -newer FILE" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path MODELLO -perm [+-]MODO -regex MODELLO\n" +" -wholename MODELLO -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NOME -xtype [bcdpfls]" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"È possibile segnalare i bug (e seguire la loro correzione) tramite la " +"pagina\n" +"di segnalazione dei bug di findutils presso http://savannah.gnu.org/, o se " +"non\n" +"si ha accesso al web inviando un'email a ." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "il controllo interno della funzione di libreria fnmatch() è fallito." + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, fuzzy, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "Impossibile aprire il file di input `%s'" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "il modo `%s' non è valido" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "-size non può avere un argomento nullo" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "il tipo di -size `%c' non è valido" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "l'argomento `%s' di `%s' non è valido" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "l'argomento %s non è valido per %s" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "attenzione: sequenza di escape `\\%c' non riconosciuta" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "attenzione: direttiva di formattazione `%%%c' non riconosciuta" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "l'ambiente è troppo grande per fare exec" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, fuzzy, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "Impossibile aprire il file di input `%s'" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "impossibile fare fork" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "errore aspettando %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s terminato dal segnale %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "espressione non valida" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, fuzzy, c-format +msgid "expected an expression after '%s'" +msgstr "predicato aggiuntivo inatteso" + +#: find/tree.c:121 +#, fuzzy +msgid "invalid expression; you have too many ')'" +msgstr "espressione non valida" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "espressione non valida" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "oops -- tipo di espressione non valido!" + +#: find/tree.c:231 +#, fuzzy, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "oops -- tipo di espressione non valido!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "i percorsi devono precedere l'espressione" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "il predicato `%s' non è valido" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "il predicato `%s' non è valido" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "l'argomento `%s' di `%s' non è valido" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "manca l'argomento di `%s'" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "espressione non valida" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "predicato aggiuntivo inatteso" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "predicato aggiuntivo inatteso" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "oops -- inserimento predefinito di and non valido!" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Uso: %s [-H] [-L] [-P] [percorso...] [espressione]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Uso: %s [percorso...] [espressione]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "attenzione: sequenza di escape `\\%c' non riconosciuta" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"La variabile di ambiente FIND_BLOCK_SIZE non è gestita, l'unica cosa che " +"influenza la dimensione dei blocchi è la variabile di ambiente " +"POSIXLY_CORRECT" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "il comando è troppo lungo" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "un unico argomento eccede le dimensioni della lista di argomenti" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "la lista degli argomenti è troppo lunga" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU findutils versione %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Uso: %s [--version | --help]\n" +" %s bigrammi_più_comuni < lista-di-file > database-di-locate\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Segnalare i bug a .\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "giorni" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "l'argomento `%s' di `%s' non è valido" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "l'argomento `%s' di `%s' non è valido" + +#: locate/locate.c:472 +#, fuzzy, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" +"attenzione: il percorso del database di locate `%s' inizia con `:', che non " +"sono un nome di database valido" + +#: locate/locate.c:607 +#, fuzzy, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "il database di locate '%s' è danneggiato o non valido" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, fuzzy, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "il database di locate '%s' è danneggiato o non valido" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, fuzzy, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Uso: %s [-d percorso | --database=percorso] [-e | --existing]\n" +" [-i | --ignore-case] [--wholepath] [--basename] [--limit=N | -l N]\n" +" [--version] [--help] modello...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "attenzione: il database `%s' ha più di %d %s" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "predicato aggiuntivo inatteso" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "errore aspettando %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "l'ambiente è troppo grande per fare exec" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, fuzzy, c-format +msgid "Cannot open input file %s" +msgstr "Impossibile aprire il file di input `%s'" + +#: xargs/xargs.c:688 +#, fuzzy, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "Il tuo ambiente richiede fino a %ld byte\n" + +#: xargs/xargs.c:691 +#, fuzzy, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" +"Limiti di POSIX massimo e minimo della lunghezza degli argomenti: %ld, %ld\n" + +#: xargs/xargs.c:694 +#, fuzzy, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" +"Limiti di POSIX massimo e minimo della lunghezza degli argomenti: %ld, %ld\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "Lunghezza massima di un comando effettivamente usabile: %ld\n" + +#: xargs/xargs.c:701 +#, fuzzy, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Lunghezza del buffer del comando che effettivamente useremo: %ld\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"carattere %s non accoppiato; le virgolette hanno un significato speciale per " +"xargs, a meno che si usi l'opzione -0" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "doppie" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "singole" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "la riga dell'argomento è troppo lunga" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "errore aspettando il processo figlio" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: uscito con stato 255; termina" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: fermato dal segnale %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: terminato dal segnale %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: il numero per l'opzione -%c non è valido\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: il valore per l'opzione -%c dovrebbe essere >= %ld\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: il valore per l'opzione -%c dovrebbe essere < %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Uso: %s [-0prtx] [-e[eof-str]] [-i[cambia-str]] [-l[linee-max]]\n" +" [-n arg-max] [-s car-max] [-P proc-max] [--null] [--eof[=eof-str]]\n" +" [--replace[=cambia-str]] [--max-lines[=linee-max]] [--interactive]\n" +" [--max-chars=car-max] [--verbose] [--exit] [--max-procs=proc-max]\n" +" [--max-args=arg-max] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [comando [argomenti-iniziali]]\n" + +#~ msgid "block size" +#~ msgstr "dimensioni del blocco" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "attenzione: il predicato -ipath è deprecato; per favore usare -iwholename " +#~ "al suo posto." + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find versione %s\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU findutils versione %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate versione %s\n" + +#~ msgid "argument to --limit" +#~ msgstr "argomento di --limit" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs versione %s\n" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "oops -- tipo di espressione non valido!" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "oops -- tipo di espressione non valido!" + +#, fuzzy +#~ msgid "Reducing arg_max (%lu) to arg_size (%lu)\n" +#~ msgstr "arg_max (%ld) ridotto a arg_size (%ld)\n" + +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "azioni: -exec COMANDO ; -fprint FILE -fprint0 FILE -fprintf FILE FORMATO\n" +#~ " -fls FILE -ok COMANDO ; -print -print0 -printf FORMATO -prune -ls -" +#~ "delete\n" +#~ " -quit\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "Lista dei predicati:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "Albero di valutazione:\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Albero di valutazione ottimizzato:\n" + +#~ msgid "Optimized command line:\n" +#~ msgstr "Riga di comando ottimizzata:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "la memoria virtuale è terminata" + +#~ msgid "inserting %s\n" +#~ msgstr "inserimento di %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " tipo: %s %s " + +#~ msgid "left:\n" +#~ msgstr "sinistra:\n" + +#~ msgid "right:\n" +#~ msgstr "destra:\n" + +#~ msgid "[stat called here] " +#~ msgstr "[chiamata stat] " + +#, fuzzy +#~ msgid "[type needed here] " +#~ msgstr "[chiamata stat] " + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Albero di valutazione normalizzato:\n" + +#~ msgid "" +#~ "warning: locate database path `%s' contains a trailing colon, which is " +#~ "not a valid database name" +#~ msgstr "" +#~ "attenzione: il percorso del database di locate `%s' finisce con `:', che " +#~ "non sono un nome di database valido" diff --git a/po/ja.po b/po/ja.po new file mode 100644 index 0000000..06f4dd5 --- /dev/null +++ b/po/ja.po @@ -0,0 +1,1307 @@ +# Japanese Messages for findutils. +# Copyright (C) 2001 Free Software Foundation, Inc. +# GOTO Masanori , 2001. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.1.7\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2001-11-05 00:45+0900\n" +"Last-Translator: GOTO Masanori \n" +"Language-Team: Japanese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=EUC-JP\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gnulib/lib/argmatch.c:133 +#, fuzzy, c-format +msgid "invalid argument %s for %s" +msgstr "`%2$s' ¤ËÂФ¹¤ë̵¸ú¤Ê°ú¿ô %1$s ¤Ç¤¹" + +#: gnulib/lib/argmatch.c:134 +#, fuzzy, c-format +msgid "ambiguous argument %s for %s" +msgstr "`%2$s' ¤ËÂФ¹¤ëÉÔÌÀÎƤʰú¿ô %1$s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Í­¸ú¤Ê°ú¿ô¤Ï:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "̤ÃΤΥ·¥¹¥Æ¥à¥¨¥é¡¼" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: ¥ª¥×¥·¥ç¥ó`%s'¤ÏÛ£Ëæ¤Ç¤¹\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: ¥ª¥×¥·¥ç¥ó`--%s'¤Ï°ú¿ô¤ò¤È¤ê¤Þ¤»¤ó\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: ¥ª¥×¥·¥ç¥ó`%c%s'¤Ï°ú¿ô¤ò¤È¤ê¤Þ¤»¤ó\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: ¥ª¥×¥·¥ç¥ó`%s'¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: ǧ¼±¤Ç¤­¤Ê¤¤¥ª¥×¥·¥ç¥ó`--%s'¤Ç¤¹\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: ǧ¼±¤Ç¤­¤Ê¤¤¥ª¥×¥·¥ç¥ó`%c%s'¤Ç¤¹\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: ÉÔÀµ¤Ê¥ª¥×¥·¥ç¥ó¤Ç¤¹ -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: ¥ª¥×¥·¥ç¥ó¤¬°ã¤¤¤Þ¤¹ -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: ¥ª¥×¥·¥ç¥ó¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹ -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: ¥ª¥×¥·¥ç¥ó `-W %s' ¤¬Û£Ëæ¤Ç¤¹\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: ¥ª¥×¥·¥ç¥ó`-W %s'¤Ï°ú¿ô¤ò¤È¤ê¤Þ¤»¤ó\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤¬¼èÆÀ¤Ç¤­¤Þ¤»¤ó" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "`" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "'" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "À®¸ù¤Ç¤¹" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "°ìÃפ·¤Þ¤»¤ó" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "̵¸ú¤ÊÀµµ¬É½¸½¤Ç¤¹" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "̵¸ú¤Ê¾È¹çʸ»ú¤Ç¤¹" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "̵¸ú¤Ê¥­¥ã¥é¥¯¥¿¥¯¥é¥¹Ì¾¤Ç¤¹" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤¬»Ä¤Ã¤Æ¤¤¤Þ¤¹" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "̵¸ú¤Ê¸åÊý»²¾È¤Ç¤¹" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "[ ¤â¤·¤¯¤Ï [^ ¤¬°ìÃפ·¤Þ¤»¤ó" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "( ¤â¤·¤¯¤Ï \\( ¤¬°ìÃפ·¤Þ¤»¤ó" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "\\{ ¤¬°ìÃפ·¤Þ¤»¤ó" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "̵¸ú¤Ê \\{\\} ¤ÎÆâÍƤǤ¹" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "̵¸ú¤Ê½ªÃ¼ÈϰϤǤ¹" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "¥á¥â¥ê¤ò»È¤¤¿Ô¤·¤Þ¤·¤¿" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "̵¸ú¤ÊÁ°½Ò¤ÎÀµµ¬É½¸½¤Ç¤¹" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Àµµ¬É½¸½¤Î½ªÃ¼¤¬Á᤹¤®¤Þ¤¹" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Àµµ¬É½¸½¤¬Ä¹¤¹¤®¤Þ¤¹" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr ") ¤â¤·¤¯¤Ï \\) ¤¬°ìÃפ·¤Þ¤»¤ó" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "°ÊÁ°¤ËÀµµ¬É½¸½¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[yY]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +#, fuzzy +msgid "memory exhausted" +msgstr "¥á¥â¥ê¤ò»È¤¤¿Ô¤·¤Þ¤·¤¿" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "ÉÔÀµ¤Ê°ú¿ô `%s' ¤«¤é `%s'" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "ÉÔÀµ¤Ê°ú¿ô `%s' ¤«¤é `%s'" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "°ú¿ô¥ê¥¹¥È¤¬Ä¹¤¹¤®¤Þ¤¹" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤¬¼èÆÀ¤Ç¤­¤Þ¤»¤ó" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤¬¼èÆÀ¤Ç¤­¤Þ¤»¤ó" + +#: find/find.c:384 +#, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "" + +#: find/find.c:394 +#, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "" + +#: find/find.c:490 +#, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:527 +#, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "ÉÔÌÀ" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +#, fuzzy +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"¥Ç¥Õ¥©¥ë¥È¥Ñ¥¹¤Ï¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤Ê¤ê¤Þ¤¹; ¥Ç¥Õ¥©¥ë¥È¤Îɾ²Á¼°¤Ï -print " +"¤Ç¤¹\n" +"ɾ²Á¼°¤Ï°Ê²¼¤«¤éÀ®¤ë¤Ç¤·¤ç¤¦:\n" +"±é»»»Ò (Í¥Àè½ç°Ì; ¾¤Ë²¿¤âÍ¿¤¨¤é¤ì¤Æ¤¤¤Ê¤¤¤È¤­ -and ¤ò°ÕÌ£¤¹¤ë):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" + +#: find/parser.c:1064 +#, fuzzy +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"¥Ç¥Õ¥©¥ë¥È¥Ñ¥¹¤Ï¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤Ê¤ê¤Þ¤¹; ¥Ç¥Õ¥©¥ë¥È¤Îɾ²Á¼°¤Ï -print " +"¤Ç¤¹\n" +"ɾ²Á¼°¤Ï°Ê²¼¤«¤éÀ®¤ë¤Ç¤·¤ç¤¦:\n" +"±é»»»Ò (Í¥Àè½ç°Ì; ¾¤Ë²¿¤âÍ¿¤¨¤é¤ì¤Æ¤¤¤Ê¤¤¤È¤­ -and ¤ò°ÕÌ£¤¹¤ë):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" + +#: find/parser.c:1073 +#, fuzzy +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -ipath PATTERN -iregex PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE\n" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -size N[bckw] -true -type [bcdpfls] -uid N -used N -user NAME\n" +" -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "" + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "ÉÔÀµ¤Ê¥â¡¼¥É `%s' ¤Ç¤¹" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "-size ¤ËÂФ¹¤ëÉÔÀµ¤Ê¶õ¤Î°ú¿ô¤Ç¤¹" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "ÉÔÀµ¤Ê -size ¥¿¥¤¥× `%c' ¤Ç¤¹" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "ÉÔÀµ¤Ê°ú¿ô `%s' ¤«¤é `%s'" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "`%2$s' ¤ËÂФ¹¤ë̵¸ú¤Ê°ú¿ô %1$s ¤Ç¤¹" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "·Ù¹ð: ǧ¼±¤Ç¤­¤Ê¤¤¥¨¥¹¥±¡¼¥× `\\%c' ¤Ç¤¹" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "·Ù¹ð: ǧ¼±¤Ç¤­¤Ê¤¤¥Õ¥©¡¼¥Þ¥Ã¥È¤Î»Ø¼¨ `%%%c' ¤Ç¤¹" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "¼Â¹Ô¤¹¤ë¤Ë¤Ï´Ä¶­¤¬Â礭¤¹¤®¤Þ¤¹" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "fork ¤Ç¤­¤Þ¤»¤ó" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "%s ¤Ø¤ÎÂÔ¤Á¤Ç¥¨¥é¡¼" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s ¤Ï¥·¥°¥Ê¥ë %d ¤Ç½ªÎ»" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "ÉÔÀµ¤Êɾ²Á¼°¤Ç¤¹" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "" + +#: find/tree.c:121 +#, fuzzy +msgid "invalid expression; you have too many ')'" +msgstr "ÉÔÀµ¤Êɾ²Á¼°¤Ç¤¹" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "ÉÔÀµ¤Êɾ²Á¼°¤Ç¤¹" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "¤·¤Þ¤Ã¤¿ -- ÉÔÀµ¤Êɾ²Á¼°¥¿¥¤¥×¤À!" + +#: find/tree.c:231 +#, fuzzy, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "¤·¤Þ¤Ã¤¿ -- ÉÔÀµ¤Êɾ²Á¼°¥¿¥¤¥×¤À!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "¥Ñ¥¹¤Ïɾ²Á¼°¤ÎÁ°¤Ë¤ª¤«¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "ÉÔÀµ¤Ê½Ò¸ì `%s'" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "ÉÔÀµ¤Ê½Ò¸ì `%s'" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "ÉÔÀµ¤Ê°ú¿ô `%s' ¤«¤é `%s'" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "`%s' ¤Ë°ú¿ô¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "ÉÔÀµ¤Êɾ²Á¼°¤Ç¤¹" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "ÉÔÀµ¤Ê½Ò¸ì `%s'" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "¤·¤Þ¤Ã¤¿ -- ÉÔÀµ¤Ë AND ¤ò¥Ç¥Õ¥©¥ë¥ÈÁÞÆþ¤·¤Æ¤·¤Þ¤Ã¤¿!" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "»ÈÍÑË¡: %s [¥Ñ¥¹...] [ɾ²Á¼°]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "»ÈÍÑË¡: %s [¥Ñ¥¹...] [ɾ²Á¼°]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "·Ù¹ð: ǧ¼±¤Ç¤­¤Ê¤¤¥¨¥¹¥±¡¼¥× `\\%c' ¤Ç¤¹" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "¥³¥Þ¥ó¥É¤¬Ä¹¤¹¤®¤Þ¤¹" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "°ú¿ô¥ê¥¹¥È¤Î¥µ¥¤¥ºÀ©¸ÂÆâ¤Çñ°ì°ú¿ô¤È¤·¤Æ¼ý¤Þ¤ê¤Þ¤»¤ó" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "°ú¿ô¥ê¥¹¥È¤¬Ä¹¤¹¤®¤Þ¤¹" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU find version %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, fuzzy, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "»ÈÍÑË¡: %s most_common_bigrams < list > coded_list\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +#, fuzzy +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"¥Ð¥°¤Ï¤Þ¤ÇÊó¹ð¤·¤Æ¤¯¤À¤µ¤¤." + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "Æü" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "ÉÔÀµ¤Ê°ú¿ô `%s' ¤«¤é `%s'" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "ÉÔÀµ¤Ê°ú¿ô `%s' ¤«¤é `%s'" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "·Ù¹ð: ¥Ç¡¼¥¿¥Ù¡¼¥¹`%s'¤Ï %d %s°Ê¾å¸Å¤¤" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "ÉÔÀµ¤Ê½Ò¸ì `%s'" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "%s ¤Ø¤ÎÂÔ¤Á¤Ç¥¨¥é¡¼" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "¼Â¹Ô¤¹¤ë¤Ë¤Ï´Ä¶­¤¬Â礭¤¹¤®¤Þ¤¹" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "¥À¥Ö¥ë" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "¥·¥ó¥°¥ë" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "°ú¿ô¹Ô¤¬Ä¹¤¹¤®¤Þ¤¹" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "»Ò¥×¥í¥»¥¹¤Ø¤ÎÂÔ¤Á¤Ç¥¨¥é¡¼" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: ¥¹¥Æ¡¼¥¿¥¹255¤Ç½ªÎ»; ÃæÃÇ" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: ¥·¥°¥Ê¥ë %d ¤Ë¤è¤Ã¤ÆÄä»ß¤·¤Þ¤·¤¿" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: ¥·¥°¥Ê¥ë %d ¤Ë¤è¤Ã¤Æ½ªÎ»¤·¤Þ¤·¤¿" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: -%c ¥ª¥×¥·¥ç¥ó¤ËÂФ¹¤ëÉÔÀµ¤ÊÈÖ¹æ\n" + +#: xargs/xargs.c:1274 +#, fuzzy, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: -%c ¥ª¥×¥·¥ç¥ó¤ËÂФ¹¤ëÃÍ¤Ï >= %ld ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n" + +#: xargs/xargs.c:1288 +#, fuzzy, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: -%c ¥ª¥×¥·¥ç¥ó¤ËÂФ¹¤ëÃÍ¤Ï < %ld ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"»ÈÍÑË¡: %s [-0prtx] [-e[eof-str]] [-i[replace-str]] [-l[max-lines]]\n" +" [-n max-args] [-s max-chars] [-P max-procs] [--null] [--eof[=eof-" +"str]]\n" +" [--replace[=replace-str]] [--max-lines[=max-lines]] [--interactive]\n" +" [--max-chars=max-chars] [--verbose] [--exit] [--max-procs=max-procs]\n" +" [--max-args=max-args] [--no-run-if-empty] [--version] [--help]\n" +" [command [initial-arguments]]\n" + +#~ msgid "block size" +#~ msgstr "¥Ö¥í¥Ã¥¯¥µ¥¤¥º" + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find version %s\n" + +#, fuzzy +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU find version %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate version %s\n" + +#, fuzzy +#~ msgid "argument to --limit" +#~ msgstr "°ú¿ô¹Ô¤¬Ä¹¤¹¤®¤Þ¤¹" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs version %s\n" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "¤·¤Þ¤Ã¤¿ -- ÉÔÀµ¤Êɾ²Á¼°¥¿¥¤¥×¤À!" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "¤·¤Þ¤Ã¤¿ -- ÉÔÀµ¤Êɾ²Á¼°¥¿¥¤¥×¤À!" + +#, fuzzy +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "¥¢¥¯¥·¥ç¥ó: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE " +#~ "FORMAT\n" +#~ " -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "½Ò¸ì¥ê¥¹¥È:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "ɾ²ÁÌÚ:\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "ºÇŬ²½É¾²ÁÌÚ:\n" + +#, fuzzy +#~ msgid "Optimized command line:\n" +#~ msgstr "ºÇŬ²½É¾²ÁÌÚ:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "¥á¥â¥ê¤ò»È¤¤²Ì¤¿¤·¤Þ¤·¤¿" + +#~ msgid "inserting %s\n" +#~ msgstr "%s ¤òÁÞÆþ\n" + +#~ msgid " type: %s %s " +#~ msgstr " ¥¿¥¤¥×: %s %s " + +#~ msgid "left:\n" +#~ msgstr "º¸:\n" + +#~ msgid "right:\n" +#~ msgstr "±¦:\n" + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Àµµ¬²½É¾²ÁÌÚ:\n" + +#~ msgid "%s changed during execution of %s" +#~ msgstr "%s ¤Ï %s ¤Î¼Â¹ÔÃæ¤ËÊѹ¹¤µ¤ì¤Þ¤·¤¿" + +#~ msgid "%s/.. changed during execution of %s" +#~ msgstr "%s/.. ¤Ï %s ¤Î¼Â¹ÔÃæ¤ËÊѹ¹¤µ¤ì¤Þ¤·¤¿" + +#~ msgid "error in %s: %s" +#~ msgstr "%s Ãæ¤Ç¥¨¥é¡¼: %s" + +#~ msgid "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "options (always true): -daystart -depth -follow --help\n" +#~ " -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev\n" +#~ "tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +#~ msgstr "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "¥ª¥×¥·¥ç¥ó (¤¤¤Ä¤â¿¿): -daystart -depth -follow --help\n" +#~ " -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev\n" +#~ "ȽÊ̼° (N ¤Ï +N ¤Þ¤¿¤Ï -N ¤Þ¤¿¤Ï N ¤È¤Ç¤­¤ë): -amin N -anewer FILE -atime " +#~ "N -cmin N\n" + +#~ msgid "" +#~ "Usage: %s [-d path | --database=path] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] pattern...\n" +#~ msgstr "" +#~ "»ÈÍÑË¡: %s [-d ¥Ñ¥¹ | --database=¥Ñ¥¹] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] pattern...\n" + +#~ msgid "unmatched %s quote" +#~ msgstr "%s¥¯¥ª¡¼¥Æ¡¼¥·¥ç¥ó¤¬°ìÃפ·¤Þ¤»¤ó" diff --git a/po/ko.po b/po/ko.po new file mode 100644 index 0000000..d23092f --- /dev/null +++ b/po/ko.po @@ -0,0 +1,1290 @@ +# findutilsÀÇ Çѱ¹¾î ¸Þ½ÃÁö +# Copyright (C) 1996 Free Software Foundation, Inc. +# Bang Jun-Young , 1996. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.1\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 1996-10-07 22:13+0900\n" +"Last-Translator: Bang Jun-Young \n" +"Language-Team: Korean \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=EUC-KR\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: gnulib/lib/argmatch.c:133 +#, fuzzy, c-format +msgid "invalid argument %s for %s" +msgstr "-size¿¡ ºÎÀûÀýÇÑ ³Î Àμö°¡ ÁÖ¾îÁü" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "" + +#: gnulib/lib/argmatch.c:153 +#, fuzzy, c-format +msgid "Valid arguments are:" +msgstr "-size¿¡ ºÎÀûÀýÇÑ ³Î Àμö°¡ ÁÖ¾îÁü" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, fuzzy, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "°æ°í: ÀνÄÇÒ ¼ö ¾ø´Â À̽ºÄÉÀÌÇÁ `\\%c'" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, fuzzy, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "°æ°í: ÀνÄÇÒ ¼ö ¾ø´Â À̽ºÄÉÀÌÇÁ `\\%c'" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, fuzzy, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: -%c ¿É¼Ç¿¡ ºÎÀûÀýÇÑ ¼ýÀÚ°¡ ÁÖ¾îÁü\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "½ÃÀÛ µð·ºÅ丮·Î µ¹¾Æ°¥ ¼ö ¾ø½À´Ï´Ù" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "" + +#: gnulib/lib/regcomp.c:137 +#, fuzzy +msgid "Invalid regular expression" +msgstr "ºÎÀûÀýÇÑ ¼ö½Ä" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: gnulib/lib/regcomp.c:149 +#, fuzzy +msgid "Invalid back reference" +msgstr "ºÎÀûÀýÇÑ ¼ö½Ä" + +#: gnulib/lib/regcomp.c:152 +#, fuzzy +msgid "Unmatched [ or [^" +msgstr "ÀÏÄ¡µÇÁö ¾Ê´Â %s µû¿ÈÇ¥" + +#: gnulib/lib/regcomp.c:155 +#, fuzzy +msgid "Unmatched ( or \\(" +msgstr "ÀÏÄ¡µÇÁö ¾Ê´Â %s µû¿ÈÇ¥" + +#: gnulib/lib/regcomp.c:158 +#, fuzzy +msgid "Unmatched \\{" +msgstr "ÀÏÄ¡µÇÁö ¾Ê´Â %s µû¿ÈÇ¥" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: gnulib/lib/regcomp.c:164 +#, fuzzy +msgid "Invalid range end" +msgstr "ºÎÀûÀýÇÑ ¼ö½Ä" + +#: gnulib/lib/regcomp.c:167 +#, fuzzy +msgid "Memory exhausted" +msgstr "°¡»ó ¸Þ¸ð¸®°¡ ¹Ù´Ú³µÀ½" + +#: gnulib/lib/regcomp.c:170 +#, fuzzy +msgid "Invalid preceding regular expression" +msgstr "ºÎÀûÀýÇÑ ¼ö½Ä" + +#: gnulib/lib/regcomp.c:173 +#, fuzzy +msgid "Premature end of regular expression" +msgstr "ºÎÀûÀýÇÑ ¼ö½Ä" + +#: gnulib/lib/regcomp.c:176 +#, fuzzy +msgid "Regular expression too big" +msgstr "ºÎÀûÀýÇÑ ¼ö½Ä" + +#: gnulib/lib/regcomp.c:179 +#, fuzzy +msgid "Unmatched ) or \\)" +msgstr "ÀÏÄ¡µÇÁö ¾Ê´Â %s µû¿ÈÇ¥" + +#: gnulib/lib/regcomp.c:680 +#, fuzzy +msgid "No previous regular expression" +msgstr "ºÎÀûÀýÇÑ ¼ö½Ä" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "" + +#: gnulib/lib/xalloc-die.c:34 +#, fuzzy +msgid "memory exhausted" +msgstr "°¡»ó ¸Þ¸ð¸®°¡ ¹Ù´Ú³µÀ½" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "-size¿¡ ºÎÀûÀýÇÑ ³Î Àμö°¡ ÁÖ¾îÁü" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "-size¿¡ ºÎÀûÀýÇÑ ³Î Àμö°¡ ÁÖ¾îÁü" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "Àμö ¸í´ÜÀÌ ³Ê¹« ±é´Ï´Ù" + +#: find/find.c:200 find/ftsfind.c:730 +#, fuzzy +msgid "cannot get current directory" +msgstr "½ÃÀÛ µð·ºÅ丮·Î µ¹¾Æ°¥ ¼ö ¾ø½À´Ï´Ù" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "½ÃÀÛ µð·ºÅ丮·Î µ¹¾Æ°¥ ¼ö ¾ø½À´Ï´Ù" + +#: find/find.c:384 +#, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "" + +#: find/find.c:394 +#, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "" + +#: find/find.c:490 +#, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:527 +#, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "¾Ë ¼ö ¾øÀ½" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +#, fuzzy +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"±âº» °æ·Î´Â ÇöÀç µð·ºÅ丮ÀÔ´Ï´Ù; ±âº» ¼ö½ÄÀº -printÀÔ´Ï´Ù\n" +"¼ö½ÄÀº ´ÙÀ½°ú °°ÀÌ ÀÌ·ç¾îÁú ¼ö ÀÖ½À´Ï´Ù:\n" +"¿¬»êÀÚ(°¨¼ÒÇÏ´Â ¿ì¼±¼øÀ§; ´Ù¸¥ °ÍÀÌ ÁÖ¾îÁöÁö ¾ÊÀ¸¸é -and°¡ ¹¬½ÃÀûÀ¸·Î »ç¿ë" +"µÊ)\n" +" ( EXPR ) | EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" + +#: find/parser.c:1064 +#, fuzzy +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"±âº» °æ·Î´Â ÇöÀç µð·ºÅ丮ÀÔ´Ï´Ù; ±âº» ¼ö½ÄÀº -printÀÔ´Ï´Ù\n" +"¼ö½ÄÀº ´ÙÀ½°ú °°ÀÌ ÀÌ·ç¾îÁú ¼ö ÀÖ½À´Ï´Ù:\n" +"¿¬»êÀÚ(°¨¼ÒÇÏ´Â ¿ì¼±¼øÀ§; ´Ù¸¥ °ÍÀÌ ÁÖ¾îÁöÁö ¾ÊÀ¸¸é -and°¡ ¹¬½ÃÀûÀ¸·Î »ç¿ë" +"µÊ)\n" +" ( EXPR ) | EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" + +#: find/parser.c:1078 +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "" + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "ºÎÀûÀýÇÑ ¸ðµå `%s'" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "-size¿¡ ºÎÀûÀýÇÑ ³Î Àμö°¡ ÁÖ¾îÁü" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "ºÎÀûÀýÇÑ -size Çü `%c'" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "-size¿¡ ºÎÀûÀýÇÑ ³Î Àμö°¡ ÁÖ¾îÁü" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "-size¿¡ ºÎÀûÀýÇÑ ³Î Àμö°¡ ÁÖ¾îÁü" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "°æ°í: ÀνÄÇÒ ¼ö ¾ø´Â À̽ºÄÉÀÌÇÁ `\\%c'" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "°æ°í: ÀνÄÇÒ ¼ö ¾ø´Â Çü½Ä Áö½ÃÀÚ `%%%c'" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "ȯ°æÀÌ ½ÇÇà(exec)Çϱ⿡ ³Ê¹« Å®´Ï´Ù" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "" + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "%s¸¦ ±â´Ù¸®´Â µµÁß ¿À·ù ¹ß»ý" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s°¡ ½ÅÈ£ %d¿¡ ÀÇÇØ Á¾·áµÊ" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "ºÎÀûÀýÇÑ ¼ö½Ä" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "" + +#: find/tree.c:121 +#, fuzzy +msgid "invalid expression; you have too many ')'" +msgstr "ºÎÀûÀýÇÑ ¼ö½Ä" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "ºÎÀûÀýÇÑ ¼ö½Ä" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "À¹ -- ºÎÀûÀýÇÑ ¼ö½Ä ÇüÀÔ´Ï´Ù!" + +#: find/tree.c:231 +#, fuzzy, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "À¹ -- ºÎÀûÀýÇÑ ¼ö½Ä ÇüÀÔ´Ï´Ù!" + +#: find/tree.c:1228 +#, c-format +msgid "paths must precede expression: %s" +msgstr "" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "ºÎÀûÀýÇÑ ¸ðµå `%s'" + +#: find/tree.c:1257 +#, fuzzy, c-format +msgid "invalid predicate `%s'" +msgstr "ºÎÀûÀýÇÑ ¸ðµå `%s'" + +#: find/tree.c:1262 +#, fuzzy, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "-size¿¡ ºÎÀûÀýÇÑ ³Î Àμö°¡ ÁÖ¾îÁü" + +#: find/tree.c:1269 +#, fuzzy, c-format +msgid "missing argument to `%s'" +msgstr "-size¿¡ ºÎÀûÀýÇÑ ³Î Àμö°¡ ÁÖ¾îÁü" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "ºÎÀûÀýÇÑ ¼ö½Ä" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "ºÎÀûÀýÇÑ ¸ðµå `%s'" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "À¹ -- and¸¦ ³»Á¤Ä¡·Î ºÎÀûÀýÇÏ°Ô »ðÀÔÇß½À´Ï´Ù!" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "»ç¿ë¹ý: %s [°æ·Î...] [¼ö½Ä]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "»ç¿ë¹ý: %s [°æ·Î...] [¼ö½Ä]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "°æ°í: ÀνÄÇÒ ¼ö ¾ø´Â À̽ºÄÉÀÌÇÁ `\\%c'" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "¸í·ÉÀÌ ³Ê¹« ±é´Ï´Ù" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "Àμö ¸í´Ü ±æÀÌ Á¦ÇÑ¿¡ ´ÜÀÏ Àμö¸¦ ¸ÂÃâ ¼ö ¾ø½À´Ï´Ù" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "Àμö ¸í´ÜÀÌ ³Ê¹« ±é´Ï´Ù" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU find ¹öÀü %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, fuzzy, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "»ç¿ë¹ý: %s most_common_bigrams < list > coded_list\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" + +#: locate/frcode.c:169 +#, fuzzy, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "»ç¿ë¹ý: %s [-d °æ·Î] [--database=°æ·Î] [--version] [--help] ÆÐÅÏ...\n" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "-size¿¡ ºÎÀûÀýÇÑ ³Î Àμö°¡ ÁÖ¾îÁü" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "-size¿¡ ºÎÀûÀýÇÑ ³Î Àμö°¡ ÁÖ¾îÁü" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, fuzzy, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "°æ°í: µ¥ÀÌÅͺ£À̽º `%s'´Â %s ÀÌ»ó ¿À·¡µÇ¾ú½À´Ï´Ù" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, fuzzy, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "°æ°í: µ¥ÀÌÅͺ£À̽º `%s'´Â %s ÀÌ»ó ¿À·¡µÇ¾ú½À´Ï´Ù" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "°æ°í: µ¥ÀÌÅͺ£À̽º `%s'´Â %s ÀÌ»ó ¿À·¡µÇ¾ú½À´Ï´Ù" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "ºÎÀûÀýÇÑ ¸ðµå `%s'" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "%s¸¦ ±â´Ù¸®´Â µµÁß ¿À·ù ¹ß»ý" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "ȯ°æÀÌ ½ÇÇà(exec)Çϱ⿡ ³Ê¹« Å®´Ï´Ù" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "µÎ¹è" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "´ÜÀÏ" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "Àμö ÇàÀÌ ³Ê¹« ±é´Ï´Ù" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ±â´Ù¸®´Â µµÁß ¿À·ù ¹ß»ý" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: »óÅ 255À» °¡Áö°í Á¾·áµÊ; Áß´ÜÇÔ" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: ½ÅÈ£ %d¿¡ ÀÇÇØ ÁßÁöµÊ" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: ½ÅÈ£ %d¿¡ ÀÇÇØ Á¾·áµÊ" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: -%c ¿É¼Ç¿¡ ºÎÀûÀýÇÑ ¼ýÀÚ°¡ ÁÖ¾îÁü\n" + +#: xargs/xargs.c:1274 +#, fuzzy, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: -%c ¿É¼ÇÀÇ °ªÀº %ldº¸´Ù Å©°Å³ª °°¾Æ¾ß ÇÕ´Ï´Ù\n" + +#: xargs/xargs.c:1288 +#, fuzzy, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: -%c ¿É¼ÇÀÇ °ªÀº %ldº¸´Ù ÀÛ¾Æ¾ß ÇÕ´Ï´Ù\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"»ç¿ë¹ý: %s [-0prtx] [-e[ÆÄÀϳ¡-¹®ÀÚ¿­]] [-i[´ëü-¹®ÀÚ¿­]] [-l[ÃÖ´ë-Çà]]\n" +" [-n ÃÖ´ë-Àμö] [-s ÃÖ´ë-¹®ÀÚ] [-P ÃÖ´ë-ÇÁ·Î¼¼½º] [--null] [--eof[=ÆÄÀÏ" +"³¡-¹®ÀÚ¿­]]\n" +" [--replace[=´ëü-¹®ÀÚ¿­]] [--max-lines[=ÃÖ´ë-Çà]] [--interactive]\n" +" [--max-chars=ÃÖ´ë-¹®ÀÚ] [--verbose] [--exit] [--max-procs=ÃÖ´ë-ÇÁ·Î¼¼" +"½º]\n" +" [--max-args=ÃÖ´ë-Àμö] [--no-run-if-empty] [--version] [--help]\n" +" [¸í·É [Ãʱâ-Àμö]]\n" + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find ¹öÀü %s\n" + +#, fuzzy +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU find ¹öÀü %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate ¹öÀü %s\n" + +#, fuzzy +#~ msgid "argument to --limit" +#~ msgstr "Àμö ÇàÀÌ ³Ê¹« ±é´Ï´Ù" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs ¹öÀü %s\n" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "À¹ -- ºÎÀûÀýÇÑ ¼ö½Ä ÇüÀÔ´Ï´Ù!" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "À¹ -- ºÎÀûÀýÇÑ ¼ö½Ä ÇüÀÔ´Ï´Ù!" + +#, fuzzy +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "Çൿ: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls\n" + +#, fuzzy +#~ msgid "Eval Tree:\n" +#~ msgstr "Á¤±ÔÈ­µÈ Æò°¡ Æ®¸®:\n" + +#, fuzzy +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Á¤±ÔÈ­µÈ Æò°¡ Æ®¸®:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "°¡»ó ¸Þ¸ð¸®°¡ ¹Ù´Ú³µÀ½" + +#~ msgid "inserting %s\n" +#~ msgstr "%s¸¦ »ðÀÔÇÔ\n" + +#~ msgid " type: %s %s " +#~ msgstr " Çü: %s %s " + +#~ msgid "left:\n" +#~ msgstr "¿ÞÂÊ:\n" + +#~ msgid "right:\n" +#~ msgstr "¿À¸¥ÂÊ:\n" + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Á¤±ÔÈ­µÈ Æò°¡ Æ®¸®:\n" + +#~ msgid "error in %s: %s" +#~ msgstr "%s¿¡ ¿À·ù: %s" + +#~ msgid "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "options (always true): -daystart -depth -follow --help\n" +#~ " -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev\n" +#~ "tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +#~ msgstr "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "¿É¼Ç (Ç×»ó Âü): -daystart -depth -follow --help\n" +#~ " -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev\n" +#~ "½ÃÇè (NÀº +N, -N, NÀÌ µÉ ¼ö ÀÖÀ½): -amin N -answer FILE -atime N -cmin N\n" + +#~ msgid "wait got pid %d, expected pid %d" +#~ msgstr "±â´Ù¸®´Ù pid %d¸¦ ¹Þ¾ÒÀ¸³ª pid %d°¡ ¿ä±¸µÊ" + +#~ msgid "%s stopped by signal %d" +#~ msgstr "%s°¡ ½ÅÈ£ %d¿¡ ÀÇÇØ ÁßÁöµÊ" diff --git a/po/lg.po b/po/lg.po new file mode 100644 index 0000000..d1dbfa3 --- /dev/null +++ b/po/lg.po @@ -0,0 +1,1330 @@ +# translation of findutils-4.1.20.po to Luganda +# This file is distributed under the same license as the PACKAGE package. +# Copyright (C) 2004 Free Software Foundation, Inc. +# K.Birabwa , 2004 +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.1.20\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2004-04-02 18:57GMT\n" +"Last-Translator: K.Birabwa \n" +"Language-Team: Luganda \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=EUC-KR\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.0.1\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "agumenti %s tekozesebwa ku %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "agumenti %s ku %s ebuzabuza" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Augumenti z'oyinza okukozesa ziri:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Kiremya atategeerese mu sisitemu" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: akawayiro '%s' kabuzabuza\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: akawayiro '--%s' tekateekebwa ko agumenti\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: akawayiro `%c%s' tekateekebwa ko agumenti\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: akawayiro `%s' k'etaaga agumenti\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: akawayiro `--%s' tekamanyidwa\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: akawayiro `%c%s' tekamanyidwa\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: akawayiro --%c tekakkirizibwa\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: akawayiro --%c tekakola\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: akawayiro k'etaaga agumenti --%c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: akawayiro `-W %s' kabuzabuza\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: akawayiro `-W %s' tekateekebwa ko agumenti\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "nemedwa okufuna etterekero ekiragiro mwe kiweereddwa" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "`" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "'" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Omulimu gumalirizidwa bulungi" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "Tewali kifaanagana" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Emboozi enoonya ebifaanagana etakola" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Nsanze ennukuta etasobola okweyambisibwa mu kusengeka nkalala" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Linnya lya kika eky'ennukuta telikola" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Waliwo akasazze akaddanyuma nga ke kakomekkerezza" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" +"Waliwo ekilagiro ekinoonya ebifaanagana n'ennukuta ezikikulembedde ekitakola " +"wano" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Waliwo [ oba [^ ebula ko ginne wa yo" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Waliwo ( oba \\( ebulako ginne wa yo" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Waliwo \\{ ebulako ginne wa yo" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Ebiri wakati wa \\{\\} tebikola wano" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Rango gy'ekomekkerezedwa tewakkirizibwa" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Ggwanika lijjudde" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Emboozi enoonya ebifaanagana ekulembedde tekola wano" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Emboozi enoonya ebifaanagana ekomekkerezedwa bubi" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Emboozi enoonya ebifaanagana eyitiridde obunene" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Waliwo ) oba \\) ebulako ginne wa yo" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "Emabega tewali yo mboozi enoonya ebifaanagana" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[yY]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "ggwanika lijjudde" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "agumenti `%s' tekozesebwa ku` %s'" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "agumenti `%s' tekozesebwa ku` %s'" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "olukalala olwa agumenti luyitiridde obuwanvu" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "nemedwa okufuna etterekero ekiragiro mwe kiweereddwa" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "nemedwa okufuna etterekero ekiragiro mwe kiweereddwa" + +#: find/find.c:384 +#, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "" + +#: find/find.c:394 +#, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "" + +#: find/find.c:490 +#, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:527 +#, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "tekimanyidwa" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +#, fuzzy +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"ekkubo erya bulijjo litandikira mu tterekero ekiragiro mwe kiweeredwa; " +"emboozi eya\n" +"bulijjo eri -print\n" +"emboozi esobola okubeera mu:\n" +"ebifuula (ebikulembera bye bisooka okukolebwa ko; singa tekuba ebifuula " +"ebirala\n" +"pulogulamu ekibala nti ekifuula \"-and\" kyo wekiri):\n" +" ( EMBOZ ) ! EMBOZ -not EMBOZ EMBOZ1 -a EMBOZ2 EMBOZ1 -and EMBOZ2\n" + +#: find/parser.c:1064 +#, fuzzy +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"ekkubo erya bulijjo litandikira mu tterekero ekiragiro mwe kiweeredwa; " +"emboozi eya\n" +"bulijjo eri -print\n" +"emboozi esobola okubeera mu:\n" +"ebifuula (ebikulembera bye bisooka okukolebwa ko; singa tekuba ebifuula " +"ebirala\n" +"pulogulamu ekibala nti ekifuula \"-and\" kyo wekiri):\n" +" ( EMBOZ ) ! EMBOZ -not EMBOZ EMBOZ1 -a EMBOZ2 EMBOZ1 -and EMBOZ2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" + +#: find/parser.c:1073 +#, fuzzy +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +" -cnewer FAYIRO -ctime N -empty -false -fstype KIKA -gid N\n" +" -group LINNYA -ilname KIGAMBO -iname KIGAMBO -inum N\n" +" -ipath KIGAMBO -iregex KIGAMBO -links N -lname KIGAMBO\n" +" -mmin N -mtime N -name KIGAMBO -newer FAYIRO\n" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path KIGAMBO -perm [+-]NKOLA -regex KIGAMBO\n" +" -size N[bckw] -true -type [bcdpfls] -uid N -used N -user LINNYA\n" +" -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "" + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "enkola `%s' tekola wano" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "towadde agumenti eyetaagibwa ku kawayiro -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr " -size eweereddwa ekika, `%c', ekitakola wano " + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "agumenti `%s' tekozesebwa ku` %s'" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "agumenti %s tekozesebwa ku %s" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "" +"kulabula: akabonero akufuula enneyisa ya bunnaako, `\\%c', tekategeerekese" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "kulabula: ekiragiro ekifuga entereeza, `%%%c', tekitegeerekese" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "exec esanze nga enviromenti esukkiridde obunene" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "ekilagiro ekya sisitemu ekya`fork()' kigaanye" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "wazzewo kiremya nga nnindirira %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "omulimu %s guyimirizidwa ekiragiro %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "emboozi tekola wano" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "" + +#: find/tree.c:121 +#, fuzzy +msgid "invalid expression; you have too many ')'" +msgstr "emboozi tekola wano" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "emboozi tekola wano" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "oops -- ekika eky'emboozi ekyo tekikola wano!" + +#: find/tree.c:231 +#, fuzzy, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "oops -- ekika eky'emboozi ekyo tekikola wano!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "sooka okuteekawo amakubo olyoke ozeeko emboozi" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "puledikato `%s' tekola wano" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "puledikato `%s' tekola wano" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "agumenti `%s' tekozesebwa ku` %s'" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "`%s' ebulako agumenti" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "emboozi tekola wano" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "puledikato `%s' tekola wano" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "" +"oops -- esonsesewo and! etakolerawo. Enkola eya bulijjo kwe kusonsekawo " +"\"and!\"" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Nkozesa eri: %s [kubo...] [mboozi]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Nkozesa eri: %s [kubo...] [mboozi]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "" +"kulabula: akabonero akufuula enneyisa ya bunnaako, `\\%c', tekategeerekese" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "ekiragiro kiyitiridde obuwanvu" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" +"agumenti eya sekinnomu tejja mu nkomo eziteekeddwa ku nkalala eza agumenti" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "olukalala olwa agumenti luyitiridde obuwanvu" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU find ey'omutindo %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, fuzzy, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Nkozesa eri: %s bigulamu_ezisinga_okusangibwa < lukalala > " +"lukalala_olutegeke\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +#, fuzzy +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Wereza embuulire ku biwuka by'osanze mu pulogulamu eri ba ." + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "ennaku" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "agumenti `%s' tekozesebwa ku` %s'" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "agumenti `%s' tekozesebwa ku` %s'" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "kulabula: olukalala `%s' emaze %d %s nga tezzibwanga buggya" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "puledikato `%s' tekola wano" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "wazzewo kiremya nga nnindirira %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "exec esanze nga enviromenti esukkiridde obunene" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "nakabirye" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "sekinnomu" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "agumenti eyitiridde obuwanvu" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "wazzewo kiremya nga nnindirira omulimu oguzaalukusiddwa mu gunnaagwo" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: omulimu gumaliddwa nga gulina embeera eya 255, mbivuddeko" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: omulimu guyimiriziddwa ekiragiro %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: omulimu gukomekkerezedwa ekiragiro %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: omuwendo guno tegukola ku kawayiro -%c\n" + +#: xargs/xargs.c:1274 +#, fuzzy, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: akawayiro -%c kateekwa okubeera nga >= %ld\n" + +#: xargs/xargs.c:1288 +#, fuzzy, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: akawayiro -%c kateekwa okubeera nga < %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Enkozesa eri: %s [-0prtx] [-e[kigambo-kya-eof]] [-i[kigambo-ekinaddawo]]\n" +" [-l[max-mboozi]] [-n max-agumenti] [-s max-nukuta]\n" +" [-P max-mirimu] [--null] [--eof[=kigambo-kya-eof]]\n" +" [--replace[=kigambo-ekinaddawo]] [--max-mboozi[=max-mboozi]]\n" +" [--interactive] [--max-chars=max-nukuta] [--verbose] [--exit]\n" +" [--max-procs=max-mirimu] [--max-args=max-agumenti]\n" +" [--no-run-if-empty] [--version] [--help]\n" +" [orden [agumenti-ezisooka]]\n" + +#~ msgid "block size" +#~ msgstr "bunene obwa buloka" + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find ey'omutindo %s\n" + +#, fuzzy +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU find ey'omutindo %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate ey'omutindo %s\n" + +#, fuzzy +#~ msgid "argument to --limit" +#~ msgstr "agumenti eyitiridde obuwanvu" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs ey'omutindo %s\n" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "oops -- ekika eky'emboozi ekyo tekikola wano!" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "oops -- ekika eky'emboozi ekyo tekikola wano!" + +#, fuzzy +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "ebikolwa biri: -exec KIRAGIRO ; -fprint FAYIRO -fprint0 FAYIRO\n" +#~ " -fprintf NTEREEZA YA FAYIRO -ok KIRAGIRO ; -print -print0\n" +#~ " -printf NTEREEZA -prune -ls\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "Olukalala lwa puledikato:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "Emitendera egiyunguluddwaamu amakulu:\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Emitendera egiyunguluddwaamu amakulu nga gituukanisidwa:\n" + +#, fuzzy +#~ msgid "Optimized command line:\n" +#~ msgstr "Emitendera egiyunguluddwaamu amakulu nga gituukanisidwa:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "ggwanika elizibizi lijjudde" + +#~ msgid "inserting %s\n" +#~ msgstr "nsonsekawo %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " ekika: %s %s " + +#~ msgid "left:\n" +#~ msgstr "kkono:\n" + +#~ msgid "right:\n" +#~ msgstr "ddyo:\n" + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Emitendera egiyunguluddwaamu amakulu nga ginoromawaziddwa:\n" + +#~ msgid "%s changed during execution of %s" +#~ msgstr "%s ekyuukidde ku muku gwa %s" + +#~ msgid "%s/.. changed during execution of %s" +#~ msgstr "%s/.. ekyuukidde ku muku gwa %s" + +#~ msgid "error in %s: %s" +#~ msgstr "kiremya mu %s: %s" + +#~ msgid "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "options (always true): -daystart -depth -follow --help\n" +#~ " -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev\n" +#~ "tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +#~ msgstr "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "obuwayiro (bulijjo obubeera butuufu) buli: -daystart -depth -follow --" +#~ "help\n" +#~ " -maxdepth MITENDERA -mindepth MITENDERA\n" +#~ " -mount -noleaf --version -xdev\n" +#~ "ebigezo biri : -amin N -anewer FAYIRO -atime N\n" +#~ " -cmin N (N esobola okubeera +N, -N " +#~ "o N)\n" + +#~ msgid "" +#~ "Usage: %s [-d path | --database=path] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] pattern...\n" +#~ msgstr "" +#~ "Enkozesa eri: %s [-d kubo | --database=kubo]\n" +#~ " [-e | --existing] [-i | --ignore-case] [--version] [--help] " +#~ "kigambo...\n" + +#~ msgid "unmatched %s quote" +#~ msgstr "akoogeza %s kabulako kannewaako" diff --git a/po/ms.po b/po/ms.po new file mode 100644 index 0000000..8ac9caa --- /dev/null +++ b/po/ms.po @@ -0,0 +1,1209 @@ +# THINK DIFFERENT, THINK OPENSOURSE. +# Copyright (C) 2003 Free Software Foundation, Inc. +# Nik Ramadhan Nik Idris , 2003. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils-4.1.7\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2003-01-19 14:42+0800\n" +"Last-Translator: Nik Ramadhan Nik Idris \n" +"Language-Team: Malay \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gnulib/lib/argmatch.c:133 +#, fuzzy, c-format +msgid "invalid argument %s for %s" +msgstr "hujah %s tidak sah untuk `%s'" + +#: gnulib/lib/argmatch.c:134 +#, fuzzy, c-format +msgid "ambiguous argument %s for %s" +msgstr "hujah %s adalah kabur untuk `%s'" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Hujah yang sah ialah:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "ralat sistem tidak diketahui" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: pilihan `%s' adalah kabur\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: pilihan `--%s' tidak mengizinkan sebarang hujah\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: pilihan `%c%s' tidak mengizinkan sebarang hujah\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: pilihan `%s' memerlukan hujah\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: pilihan tidak dapat dikenal pasti `--%s'\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: pilihan tidak dapat dikenal pasti `%c%s'\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: pilihan tidak dibenarkan -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: pilihan yang tidak sah -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: pilihan memerlukan hujah -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: pilihan `-W %s' adalah kabur\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: pilihan `-W %s' tidak mengizinkan sebarang hujah\n" + +#: gnulib/lib/openat-die.c:33 +msgid "unable to record current working directory" +msgstr "" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "`" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "'" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Berjaya" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "tidak padan" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Tidak padan [ atau [^" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "( atau \\( tidak sesuai" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr " \\{ Tidak sesuai" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: gnulib/lib/regcomp.c:164 +#, fuzzy +msgid "Invalid range end" +msgstr "hujah %s tidak sah untuk `%s'" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "memori kehabisan" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr ") atau \\) tidak sesuai" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[yY]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +#, fuzzy +msgid "memory exhausted" +msgstr "memori kehabisan" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "hujah yang salah `%s' kepada `%s'" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "hujah yang salah `%s' kepada `%s'" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "senarai hujag terlalu panjang" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "" + +#: find/find.c:204 +msgid "cannot stat current directory" +msgstr "" + +#: find/find.c:384 +#, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "" + +#: find/find.c:394 +#, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "" + +#: find/find.c:490 +#, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:527 +#, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "tidak diketahui" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" + +#: find/parser.c:1078 +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "" + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "mod yang salah `%s'" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "jenis saiz tidak sah `%c'" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "hujah yang salah `%s' kepada `%s'" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "hujah %s tidak sah untuk `%s'" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +msgid "The environment is too large for exec()." +msgstr "" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "ralat menunggu untuk %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +#: find/tree.c:149 +msgid "invalid expression; empty parentheses are not allowed." +msgstr "" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "" + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "" + +#: find/tree.c:1228 +#, c-format +msgid "paths must precede expression: %s" +msgstr "" + +#: find/tree.c:1237 +#, c-format +msgid "unknown predicate `%s'" +msgstr "" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "hujah yang salah `%s' kepada `%s'" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "kehilangan hujah kepada `%s'" + +#: find/tree.c:1344 +msgid "you have too many ')'" +msgstr "" + +#: find/tree.c:1349 +#, c-format +msgid "unexpected extra predicate '%s'" +msgstr "" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "" + +#: find/util.c:157 +#, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "" + +#: find/util.c:159 +#, c-format +msgid "] [path...] [expression]\n" +msgstr "" + +#: find/util.c:748 +#, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "arahan terlalu panjang" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "senarai hujag terlalu panjang" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "versi find GNU %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +#, fuzzy +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Laporkan pepijat kepada ." + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "hari" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "hujah yang salah `%s' kepada `%s'" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "hujah yang salah `%s' kepada `%s'" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, c-format +msgid "unexpected EOF in %s" +msgstr "" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "ralat menunggu untuk %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "berganda" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "tunggal" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "baris hujah terlalu panjang" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "ralat menunggu untuk proses anak" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: keluar dengan status; abaikan" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: di berhentikan oleh signal %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: diputuskan oleh signal %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "" + +#: xargs/xargs.c:1274 +#, fuzzy, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: nilai untuk pilihan -%c mesti >= %ld\n" + +#: xargs/xargs.c:1288 +#, fuzzy, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s:nilai untuk pilihan -%c mesti < %ld\n" + +#: xargs/xargs.c:1306 +#, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" + +#~ msgid "block size" +#~ msgstr "saiz blok" + +#~ msgid "GNU find version %s\n" +#~ msgstr "versi find GNU %s\n" + +#, fuzzy +#~ msgid "GNU findutils version %s\n" +#~ msgstr "versi find GNU %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "versi locate GNU %s\n" + +#, fuzzy +#~ msgid "argument to --limit" +#~ msgstr "baris hujah terlalu panjang" + +#~ msgid "virtual memory exhausted" +#~ msgstr "kehabisan memori maya" + +#~ msgid " type: %s %s " +#~ msgstr " jenis: %s %s " + +#~ msgid "left:\n" +#~ msgstr "kiri:\n" + +#~ msgid "right:\n" +#~ msgstr "kanan:\n" + +#~ msgid "%s/.. changed during execution of %s" +#~ msgstr "%s/.. perubahan semasa perlaksanaan %s" + +#~ msgid "error in %s: %s" +#~ msgstr "ralat dalam %s: %s" diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 0000000..3fa36bb --- /dev/null +++ b/po/nl.po @@ -0,0 +1,1353 @@ +# Translation of findutils-4.3.8 to Dutch. +# Copyright (C) 1996, 2000, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +# Erick Branderhorst , 1996. +# Ivo Timmermans , 2000. +# Taco Witte , 2004. +# Benno Schulenberg , 2005, 2006, 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.3.8\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2007-10-04 23:01+0200\n" +"Last-Translator: Benno Schulenberg \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "ongeldig argument %s van %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "argument %s van %s is niet eenduidig" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Geldige argumenten zijn:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "schrijffout" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Onbekende systeemfout" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: optie '%s' is niet eenduidig\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: optie '--%s' staat geen argument toe\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: optie '%c%s' staat geen argument toe\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: optie '%s' vereist een argument\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: onbekende optie '--%s'\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: onbekende optie '%c%s'\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: ongeldige optie -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: ongeldige optie -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: optie vereist een argument -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: optie '-W %s' is niet eenduidig\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: optie '-W %s' staat geen argument toe\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "kan huidige map niet opvragen" + +#: gnulib/lib/openat-die.c:46 +#, fuzzy +msgid "failed to return to initial working directory" +msgstr "Kan niet van map wijzigen" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "‘" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "’" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "" + +#: gnulib/lib/regcomp.c:137 +#, fuzzy +msgid "Invalid regular expression" +msgstr "ongeldige expressie" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: gnulib/lib/regcomp.c:164 +#, fuzzy +msgid "Invalid range end" +msgstr "Ongeldig argument '%s' van '-used'" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "" + +#: gnulib/lib/regcomp.c:170 +#, fuzzy +msgid "Invalid preceding regular expression" +msgstr "ongeldige expressie" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[jJ]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "ongeldig argument '%s' van '%s'" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "ongeldig argument '%s' van '%s'" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "argumentenregel is te lang" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "kan huidige map niet opvragen" + +#: find/find.c:204 +msgid "cannot stat current directory" +msgstr "kan status van huidige map niet opvragen" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "Waarschuwing: bestandssysteem %s is recent ontkoppeld." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "Waarschuwing: bestandssysteem %s is recent aangekoppeld." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s is gewijzigd tijdens het uitvoeren van %s (oud apparaatnummer %ld, " +"nieuw apparaatnummer %ld, bestandssysteemsoort %s) [regel %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s is gewijzigd tijdens het uitvoeren van %s (oud inode-nummer %ld, nieuw " +"inode-nummer %ld, bestandssysteemsoort %s) [regel %ld]" + +#: find/find.c:992 +#, fuzzy, c-format +msgid "Failed to safely change directory into %s" +msgstr "Kan niet van map wijzigen" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" +"Symbolische koppeling %s is deel van een oneindige lus in\n" +"de mappenhiërarchie: de map waarnaar de koppeling wijst is al bezocht." + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" +"Oneindige lus in bestandssysteem: %s heeft hetzelfde apparaatnummer en\n" +"inode-nummer als een map %d %s." + +#: find/find.c:1108 +#, fuzzy +msgid "level higher in the file system hierarchy" +msgstr "niveau hoger in de mappenhiërarchie" + +#: find/find.c:1109 +#, fuzzy +msgid "levels higher in the file system hierarchy" +msgstr "niveaus hoger in de mappenhiërarchie" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "waarschuwing: symbolische koppeling %s wordt niet gevolgd" + +#: find/find.c:1398 +#, fuzzy, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" +"WAARSCHUWING: het aantal harde koppelingen voor %s is onjuist;\n" +"volgens het bestandssysteem zijn er %d koppelingen naar deze map,\n" +"maar er zijn al %d submappen gepasseerd.\n" +"Dit zou een fout in het bestandssysteem-stuurprogramma kunnen zijn.\n" +"Optie '-noleaf' wordt nu automatisch aangezet. In de tot nu toe gegeven\n" +"resultaten kunnen mappen ontbreken die doorzocht hadden moeten worden." + +#: find/fstype.c:250 +msgid "unknown" +msgstr "onbekend" + +#: find/ftsfind.c:298 +#, fuzzy, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" +"Oneindige lus in bestandssysteem: %s heeft hetzelfde apparaatnummer en\n" +"inode-nummer als een map %d %s." + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "Waarschuwing: bestand %s lijkt modus 0000 te hebben." + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"Waarschuwing: optie '%s' werd gegeven na het non-optie-argument '%s',\n" +"maar opties zijn niet positioneel: '%s' beïnvloedt zowel voorgaande\n" +"als nakomende testen. Geef opties op vóór andere argumenten.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"Waarschuwing: de optie '-d' wordt afgeraden;\n" +"gebruik liever '-depth', want dat is een POSIX-optie." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" +"%s is geen bestaande groepsnaam, en het lijkt niet op een numeriek ID\n" +"vanwege het onverwachte achtervoegsel %s" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "%s is geen bestaande groepsnaam" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "het argument van '-group' is leeg, maar zou een groepsnaam moeten zijn" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"\n" +"Het standaardpad is de huidige map; de standaardexpressie is '-print';\n" +"de expressie mag bestaan uit: operatoren, opties, testen, en acties:\n" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"Operatoren (in afnemende voorrangsvolgorde;\n" +" de operator '-and' is impliciet als er geen andere gegeven is):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +"Positionele opties (altijd waar): -daystart -follow -regextype\n" +"\n" +"Normale opties (ook altijd waar, maar gegeven vóór andere expressies):\n" +" -depth --help -maxdepth NIVEAUS -mindepth NIVEAUS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +"Testen (N kan ook +N of -N zijn): -amin N -anewer BESTAND -atime N -cmin N\n" +" -cnewer BESTAND -ctime N -empty -false -fstype SOORT -gid N -group NAAM\n" +" -ilname PATROON -iname PATROON -inum N -iwholename PATROON -iregex " +"PATROON\n" +" -links N -lname PATROON -mmin N -mtime N -name PATROON -newer BESTAND" + +#: find/parser.c:1078 +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path PATROON -perm [+-]MODUS -regex PATROON\n" +" -readable -writable -executable\n" +" -wholename PATROON -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAAM -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" +"Acties: -fprint BESTAND -fprint0 BESTAND -fprintf BESTAND OPMAAK\n" +" -exec COMMANDO ; -exec COMMANDO {} + -ok COMMANDO ;\n" +" -execdir COMMANDO ; -execdir COMMANDO {} + -okdir COMMANDO ; -ls\n" +" -fls BESTAND -print -print0 -printf OPMAAK -delete -prune -quit\n" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"Rapporteer fouten in findutils via de foutenrapportagepagina op\n" +"http://savannah.gnu.org/. Als u geen webtoegang hebt, stuur dan\n" +"een e-mail naar .\n" +"Meld gebreken in de vertaling aan ." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "de zinnigheidscontrole van de fnmatch()-systeemfunctie is mislukt" + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" +"Waarschuwing: bestandsnamen bevatten gewoonlijk geen schuine strepen\n" +"(padnamen wel); dit betekent dat '%s %s' op dit systeem waarschijnlijk\n" +"altijd onwaar zal zijn. De test '-wholename' is vermoedelijk zinvoller,\n" +"of misschien '-samefile'. Of anders, als u GNU grep hebt, kunt u\n" +"'find ... -print0 | grep -FzZ %s' gebruiken." + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" +"Als argument van %s werd een tientallig positief geheel getal verwacht,\n" +"maar %s werd gegeven" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" +"Dit systeem kent niet de mogelijkheid om de ontstaanstijd van een bestand te " +"bepalen." + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "Kan %s niet als datum of tijd interpreteren" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "Kan ontstaanstijd van bestand %s niet bepalen" + +#: find/parser.c:1788 +#, c-format +msgid "invalid mode %s" +msgstr "ongeldige modus %s" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" +"Waarschuwing: het opgegeven moduspatroon %s is gelijkwaardig aan /000.\n" +"De betekenis van '-perm /000' is gelijkgemaakt aan die van '-perm -000'; " +"dus\n" +"in plaats van met geen enkel bestand komt het nu overeen met alle bestanden." + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "ongeldig leeg argument van '-size'" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "ongeldige aanduiding '%c' bij optie '-size'" + +#: find/parser.c:2058 +#, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "Ongeldig argument '%s%c' van '-size'" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" +"De optie '-show-control-chars' vereist als argument ofwel 'literal' ofwel " +"'safe'." + +#: find/parser.c:2348 +#, c-format +msgid "Invalid argument %s to -used" +msgstr "Ongeldig argument '%s' van '-used'" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "Compilatie-opties: " + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "Argument van '-type' dient slechts één letter te zijn" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "Onbekend argument van '-type': '%c'" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "waarschuwing: onbekende stuurcode '\\%c'" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "fout: '%s' aan einde van opmaaktekenreeks" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "waarschuwing: onbekende opmaakcode '%%%c'" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "fout: opmaakcode '%%%c' is gereserveerd voor toekomstig gebruik" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" +"De huidige map komt voor in de omgevingsvariabele PATH;\n" +"dit is onveilig in combinatie met de actie '%s' van 'find'.\n" +"Verwijder de huidige map uit uw PATH-variabele (oftewel:\n" +"haal de \".\" of dubbele punten aan begin en eind weg)." + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" +"Het relatieve pad %s komt voor in de omgevingsvariabele PATH;\n" +"dit is onveilig in combinatie met de actie '%s' van 'find'.\n" +"Verwijder daarom dat relatieve pad uit uw PATH-variabele." + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" +"Om veiligheidsredenen mag {} bij '-execdir' en '-okdir' niet gebruikt\n" +"worden binnen de naam van het hulpprogramma." + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "Bij '-exec%s ... +' mag {} slechts één keer voorkomen." + +#: find/parser.c:3066 +msgid "The environment is too large for exec()." +msgstr "Omgeving is te groot voor exec()." + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "rekenkundige overloop tijdens berekening van het einde van vandaag" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "standaardfoutuitvoer" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "standaarduitvoer" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "Waarschuwing: kan ontstaanstijd van bestand %s niet bepalen" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "Kan standaardinvoer niet sluiten" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "Kan niet van map wijzigen" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "kan geen nieuw proces starten" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "fout tijdens wachten op %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s afgebroken door signaal %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "ongeldige expressie" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" +"ongeldige expressie: binaire operator '%s' is gebruikt met niets ervoor" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "expressie werd verwacht tussen '%s' en ')'" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "expressie werd verwacht na '%s'" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "ongeldige expressie: er zijn te veel ')'" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "ongeldige expressie: ontbrekend ')' -- of er ontbreekt iets na '%s'" + +#: find/tree.c:149 +msgid "invalid expression; empty parentheses are not allowed." +msgstr "ongeldige expressie: lege haakjes zijn niet toegestaan" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "ongeldige expressie: ontbrekend ')'" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "oeps -- ongeldig expressietype!" + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "oeps -- ongeldig expressietype (%d)!" + +#: find/tree.c:1228 +#, c-format +msgid "paths must precede expression: %s" +msgstr "padnamen moeten voorafgaan aan expressies (%s)" + +#: find/tree.c:1237 +#, c-format +msgid "unknown predicate `%s'" +msgstr "onbekende optie, test of actie: '%s'" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "ongeldige optie, test of actie: '%s'" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "ongeldig argument '%s' van '%s'" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "ontbrekend argument van '%s'" + +#: find/tree.c:1344 +msgid "you have too many ')'" +msgstr "er zijn te veel ')'" + +#: find/tree.c:1349 +#, c-format +msgid "unexpected extra predicate '%s'" +msgstr "onverwacht extra argument '%s'" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "onverwacht extra argument" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "oeps -- ongeldige standaardtussenvoeging van '-and'!" + +#: find/util.c:157 +#, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Gebruik: %s [-PLH] [-Oniveau] [-D " + +#: find/util.c:159 +#, c-format +msgid "] [path...] [expression]\n" +msgstr "] [pad...] [expressie]\n" + +#: find/util.c:748 +#, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "Onbekende debugvlag '%s'; genegeerd." + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "Argument van optie '-D' is leeg" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "Direct na optie '-O' dient een decimaal getal te staan" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "Geef een decimaal getal op direct na optie '-O'" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "Ongeldig optimalisatieniveau %s" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" +"Optimalisatieniveau %lu is te hoog.\n" +"Als u bestanden heel vlug wilt vinden, gebruik dan 'locate'." + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"De omgevingsvariabele FIND_BLOCK_SIZE wordt niet ondersteund.\n" +"Alleen de omgevingsvariabele POSIXLY_CORRECT beïnvloedt de blokgrootte." + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" + +#: lib/buildcmd.c:293 +#, fuzzy +msgid "argument list too long" +msgstr "argumentenregel is te lang" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "Gecompileerd met GNU gnulib versie %s.\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Gebruik: %s meest_gebruikte_bigrams < bestandenlijst > locate-" +"gegevensbank\n" +" of: %s [ --version | --help ]\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Rapporteer fouten in het programma aan \n" +"en gebreken in de vertaling aan .\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +#, fuzzy +msgid "Failed to write to standard output" +msgstr "standaarduitvoer" + +#: locate/locate.c:150 +msgid "days" +msgstr "dagen" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "Het argument van optie '--max-database-age' mag niet leeg zijn" + +#: locate/locate.c:213 locate/locate.c:220 +#, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "Ongeldig argument %s van optie '--max-database-age'" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "locate-gegevensbank %s bevat een te lange bestandsnaam" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "locate-gegevensbank %s is beschadigd of ongeldig" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "Grootte van locate-gegevensbank: %s bytes\n" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "Overeenkomende bestandsnamen: %s" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "Alle bestandsnamen: %s" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "met een totale lengte van %s bytes" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" +"\n" +"\twaarvan %s witruimte bevatten, " + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" +"\n" +"\t%s LF-tekens bevatten, " + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" +"\n" +"\ten %s tekens bevatten met het hoogste bit gezet.\n" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" +"Er kunnen bestandsnamen uitgefilterd zijn,\n" +"dus de compressieverhouding kan niet berekend worden.\n" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "Compressieverhouding is %4.2f%% (hoger is beter)\n" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "Compressieverhouding is ongedefinieerd\n" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" +"Gegevensbank %s schijnt een slocate-gegevensbank te zijn\n" +"maar lijkt veiligheidsniveau %c te hebben.\n" +"Dit niveau kan deze 'findutils' nog niet aan." + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" +"Bestand %s is een slocate-gegevensbank.\n" +"Ondersteuning hiervoor is nieuw; houd rekening met problemen." + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" +"Bestand %s wordt overgeslagen;\n" +"het is een slocate-gegevensbank met een onbekend veiligheidsniveau %d." + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" +"Optie '-E' werd gegeven, maar die optie kan niet gebruikt worden bij\n" +"slocate-gegevensbanken met een veiligheidsniveau dat niet nul is.\n" +"Voor deze gegevensbank zullen geen resultaten gegenereerd worden.\n" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "Bestand %s is een slocate-gegevensbank; optie '-e' wordt ingeschakeld." + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" +"Oude-stijl locate-gegevensbank %s is te klein om geldig te kunnen zijn." + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "Gegevensbank '%s' is in de %s-indeling.\n" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "De bytevolgorde van de gegevensbank is little-endian.\n" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "De bytevolgorde van de gegevensbank is big-endian.\n" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "De bytevolgorde van de gegevensbank is onduidelijk.\n" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Gebruik: %s [-d PAD | --database=PAD] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename]\n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null]\n" +" [-c | --count] [-P | -H | --nofollow] [-L | --follow]\n" +" [-m | --mmap] [-s | --stdio] [-A | --all] [-p | --print]\n" +" [-r | --regex] [--regextype=SOORT] [--max-database-age D]\n" +" [--version] [--help] PATROON...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "Wegnemen van groepsprivileges is mislukt" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "Wegnemen van SETUID-privileges is mislukt" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "Volledig wegnemen van privileges is mislukt" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "Wegnemen van SETGID-privileges is mislukt" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" +"Waarschuwing: de locate-gegevensbank kan slechts één keer van " +"standaardinvoer gelezen worden." + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "" +"Waarschuwing: gegevensbank %s is meer dan %d %s oud: de leeftijd is %.1f %s." + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "onverwacht extra argument '%s'" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "fout tijdens wachten op %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "Ongeldige stuurcode '%s' in specificatie van scheidingsteken." + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" +"Ongeldige stuurcode '%s' in specificatie van scheidingsteken;\n" +"tekenwaardes mogen niet groter zijn dan %lx." + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" +"Ongeldige stuurcode '%s' in specificatie van scheidingsteken;\n" +"tekenwaardes mogen niet groter zijn dan %lo." + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" +"Ongeldige stuurcode '%s' in specificatie van scheidingsteken;\n" +"onbegrepen nakomende tekens '%s'." + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" +"Ongeldige specificatie '%s' van scheidingsteken; het scheidingsteken\n" +"dient een enkel teken te zijn of een stuurcode beginnend met \\." + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "Omgeving is te groot voor exec()." + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" +"waarschuwing: waarde %ld voor optie '-s' is te groot; %ld wordt gebruikt" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "Kan invoerbestand %s niet openen" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "De omgevingsvariabelen nemen %lu bytes in beslag.\n" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "POSIX-bovengrens aan argumentlengte (op dit systeem): %lu\n" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "Minimale POSIX-bovengrens aan argumentlengte (op alle systemen): %lu\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "Maximum lengte van een verwerkbaar commando: %ld\n" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Grootte van het gebruikte commandobuffer: %lu\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" +"\n" +"'xargs' zal nu verdergaan; het zal de invoer lezen en opdrachten uitvoeren.\n" +"Als u dit niet bedoelde, typ dan de onderbrekingstoets (meestal Ctrl-C).\n" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" +"Waarschuwing: '%s' zal minstens één keer uitgevoerd worden.\n" +"Als u dit niet wilt, typ dan de onderbrekingstoets (meestal Ctrl-C).\n" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"Ongepaard %s aanhalingsteken; aanhalingstekens worden door 'xargs'\n" +"speciaal behandeld tenzij u optie '-0' gebruikt." + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "dubbel" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "enkel" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" +"Waarschuwing: een NUL-teken werd gevonden in de invoer.\n" +"Deze kan niet doorgegeven worden aan de argumentenlijst.\n" +"Wilde u misschien de optie '--null' gebruiken?" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "argumentenregel is te lang" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "fout tijdens wachten op dochterproces" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: eindigde met afsluitwaarde 255 -- gestopt" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: gestopt door signaal %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: afgebroken door signaal %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: ongeldig nummer bij optie '-%c'\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: waarde bij optie '-%c' moet groter of gelijk aan %ld zijn\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: waarde bij optie '-%c' moet kleiner dan %ld zijn\n" + +#: xargs/xargs.c:1306 +#, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Gebruik: %s [-0prtx] [--interactive] [-d|--delimiter=scheidingsteken]\n" +" [--null] [-E EOF_reeks] [-e[EOF_reeks]] [--eof[=EOF_reeks]]\n" +" [-I te_vervangen_tekenreeks] [-i[te_vervangen_tekenreeks]]\n" +" [--replace[=te_vervangen_reeks]] [--max-lines" +"[=max_aantal_regels]]\n" +" [-L max_aantal_regels] [-l[max_aantal_regels]] [--show-limits]\n" +" [-n max_aantal_argumenten] [--max-args=max_aantal_argumenten]\n" +" [-P max_aantal_processen] [--max-procs=max_aantal_processen]\n" +" [-s max_aantal_tekens] [--max-chars=max_aantal_tekens]\n" +" [--exit] [--no-run-if-empty] [--verbose] [--arg-file=bestand]\n" +" [--version] [--help] [COMMANDO [eerste_argumenten]]\n" + +#~ msgid "block size" +#~ msgstr "blokgrootte" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "Waarschuwing: de optie '-ipath' wordt afgeraden; gebruik liever '-" +#~ "iwholename'." + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find versie %s.\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU findutils versie %s.\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate versie %s.\n" + +#~ msgid "argument to --limit" +#~ msgstr "argument van '--limit'" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs versie %s.\n" diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..35fa731 --- /dev/null +++ b/po/pl.po @@ -0,0 +1,1350 @@ +# Polish translation for GNU findutils. +# Copyright (C) 1996, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +# Pawe³ Krawczyk , 1996. +# Jakub Bogusz , 2003-2007. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.3.7\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2007-06-13 07:37+0200\n" +"Last-Translator: Jakub Bogusz \n" +"Language-Team: Polish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "b³êdny argument %s opcji %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "niejednoznaczny argument %s opcji %s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Prawid³owe argumenty to:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "b³±d zapisu" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Nieznany b³±d systemowy" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: opcja `%s' jest niejednoznaczna\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: opcja `--%s' nie mo¿e mieæ argumentów\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: opcja `%c%s' nie mo¿e mieæ argumentów\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: opcja `%s' musi mieæ argument\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: nieznana opcja `--%s'\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: nieznana opcja `%c%s'\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: niew³a¶ciwa opcja -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: b³êdna opcja -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: opcja musi mieæ argument -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: opcja `-W %s' jest niejednoznaczna\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: opcja `-W %s' nie mo¿e mieæ argumentów\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "nie mo¿na uzyskaæ bie¿±cego katalogu" + +#: gnulib/lib/openat-die.c:46 +#, fuzzy +msgid "failed to return to initial working directory" +msgstr "Nie uda³o siê zmieniæ katalogu" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "`" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "'" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "" + +#: gnulib/lib/regcomp.c:137 +#, fuzzy +msgid "Invalid regular expression" +msgstr "b³êdne wyra¿enie" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: gnulib/lib/regcomp.c:164 +#, fuzzy +msgid "Invalid range end" +msgstr "B³êdny argument %s opcji -used" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "" + +#: gnulib/lib/regcomp.c:170 +#, fuzzy +msgid "Invalid preceding regular expression" +msgstr "b³êdne wyra¿enie" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[yYtT]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "b³êdny argument `%s' dla `%s'" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "b³êdny argument `%s' dla `%s'" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "za d³uga linia argumentów" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "nie mo¿na uzyskaæ bie¿±cego katalogu" + +#: find/find.c:204 +msgid "cannot stat current directory" +msgstr "nie mo¿na wykonaæ stat na bie¿±cym katalogu" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "Uwaga: system plików %s zosta³ niedawno odmontowany." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "Uwaga: system plików %s zosta³ niedawno zamontowany." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s zmieni³ siê podczas wykonywania %s (stary numer urz±dzenia %ld, nowy " +"numer urz±dzenia %ld, typ systemu plików to %s) [ref %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s zmieni³ siê podczas wykonywania %s (stary numer i-wêz³a %ld, nowy numer " +"i-wêz³a %ld, typ systemu plików %s) [ref %ld]" + +#: find/find.c:992 +#, fuzzy, c-format +msgid "Failed to safely change directory into %s" +msgstr "Nie uda³o siê zmieniæ katalogu" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" +"Dowi±zanie symboliczne %s jest czê¶ci± pêtli w hierarchii katalogów; katalog " +"wskazywany przez to dowi±zanie by³ ju¿ odwiedzony." + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" +"Wykryto pêtlê w systemie plików; %s ma ten sam numer urz±dzenia i i-wêze³ co " +"katalog %d %s." + +#: find/find.c:1108 +#, fuzzy +msgid "level higher in the file system hierarchy" +msgstr "poziom wy¿ej w hierarchii systemu plików" + +#: find/find.c:1109 +#, fuzzy +msgid "levels higher in the file system hierarchy" +msgstr "poziomów wy¿ej w hierarchii systemu plików" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "uwaga: nie pod±¿anie za dowi±zaniem symbolicznym %s" + +#: find/find.c:1398 +#, fuzzy, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" +"UWAGA: z³a liczba twardych dowi±zañ dla %s (widziano tylko st_nlink=%d, ale " +"ju¿ znaleziono %d podkatalogów): to mo¿e byæ b³±d w sterowniku systemu " +"plików. Automatyczne w³±czenie opcji -noleaf finda. Wcze¶niejsze wyniki " +"mog³y nie zawieraæ katalogów, które powinny byæ przeszukane." + +#: find/fstype.c:250 +msgid "unknown" +msgstr "nieznany" + +#: find/ftsfind.c:298 +#, fuzzy, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" +"Wykryto pêtlê w systemie plików; %s ma ten sam numer urz±dzenia i i-wêze³ co " +"katalog %d %s." + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "Uwaga: wygl±da na to, ¿e plik %s ma uprawnienia 0000" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"uwaga: podano opcjê %s po argumencie %s nie bêd±cym opcj±, ale opcje nie s± " +"pozycyjne (%s wp³ywa na testy podane przed ni± jak i po niej). Proszê " +"podawaæ opcje przed innymi argumentami.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"uwaga: opcja -d jest przestarza³a; proszê zamiast niej u¿ywaæ -depth, " +"poniewa¿ ta jest zgodna z POSIX." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" +"%s nie jest nazw± ¿adnej istniej±cej grupy i nie wygl±da na liczbowy " +"identyfikator grupy, poniewa¿ ma nieznany przyrostek %s" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "%s nie jest nazw± ¿adnej istniej±cej grupy" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "argument opcji -group jest pusty, a powinien byæ nazw± grupy" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"\n" +"domy¶lna ¶cie¿ka to aktualny katalog; domy¶lne wyra¿enie to -print\n" +"wyra¿enie mo¿e sk³adaæ siê z: operatorów, opcji, testów i akcji:\n" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"operatory (malej±cy priorytet; je¶li nie ma ¿adnego, przyjmuje siê -and):\n" +" ( WYR ) ! WYR -not WYR WYR1 -a WYR2 WYR1 -and WYR2\n" +" WYR1 -o WYR2 WYR1 -or WYR2 WYR1 , WYR2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +"opcje pozycyjne (zawsze prawdziwe): -daystart -follow -regextype\n" +"\n" +"opcje zwyk³e (zawsze prawdziwe, podawane przed innymi wyra¿eniami):\n" +" -depth --help -maxdepth POZIOMY -mindepth POZIOMY -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +"testy (N jest postaci +N lub -N lub N): -amin N -anewer PLIK -atime N -cmin " +"N\n" +" -cnewer PLIK -ctime N -empty -false -fstype TYP -gid N -group NAZWA\n" +" -ilname WZORZEC -iname WZORZEC -inum N -iwholename WZORZEC -iregex " +"WZORZEC\n" +" -links N -lname WZORZEC -mmin N -mtime N -name WZORZEC -newer PLIK" + +#: find/parser.c:1078 +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path WZORZEC -perm [+-]TRYB -regex WZORZEC\n" +" -readable -writable -executable\n" +" -wholename WZORZEC -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAZWA -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" +"akcje: -delete -print0 -printf FORMAT -fprintf PLIK FORMAT -print \n" +" -fprint0 PLIK -fprint PLIK -ls -fls PLIK -prune -quit\n" +" -exec POLECENIE ; -exec POLECENIE {} + -ok POLECENIE ;\n" +" -execdir POLECENIE ; -execdir POLECENIE {} + -okdir POLECENIE ;\n" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"Proszê zg³aszaæ b³êdy (i ¶ledziæ proces ich naprawiania) poprzez stronê\n" +"zg³aszania b³êdów w findutils pod adresem http://savannah.gnu.org/ lub,\n" +"w przypadku braku dostêpu do WWW, wysy³aj±c pocztê elektroniczn± pod\n" +"adres ." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "" +"sprawdzenie poprawno¶ci funkcji bibliotecznej fnmatch() nie powiod³o siê." + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" +"uwaga: uniksowe nazwy plików zwykle nie zawieraj± uko¶ników (ale ¶cie¿ki " +"tak). Oznacza to, ¿e '%s %s' bêdzie prawdopodobnie zawsze fa³szywe na tym " +"systemie. Przydatny mo¿e byæ test '-wholename' albo '-samefile'. " +"Ewentualnie, maj±c GNU grepa, mo¿na u¿yæ 'find ... -print0 | grep -FzZ %s'." + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" +"Dla opcji %s oczekiwano argumentu bêd±cego dodatni± liczb± ca³kowit±, a " +"otrzymano %s" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "Ten system nie daje mo¿liwo¶ci sprawdzenia czasu narodzin pliku." + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "Nie wiem jak zinterpretowaæ %s jako datê lub czas" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "Nie mo¿na uzyskaæ czasu narodzin pliku %s" + +#: find/parser.c:1788 +#, c-format +msgid "invalid mode %s" +msgstr "niew³a¶ciwe uprawnienia %s" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" +"uwaga: podano wzorzec uprawnieñ %s (który jest równowa¿ny /000). Znaczenie -" +"perm /000 zmieni³o siê tak, by by³o spójne z -perm -000; oznacza to, ¿e " +"wcze¶niej nie pasowa³o do ¿adnych plików, ale teraz pasuje do wszystkich " +"plików." + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "b³êdny zerowy argument opcji -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "b³êdny typ -size `%c'" + +#: find/parser.c:2058 +#, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "B³êdny argument `%s%c' opcji -size" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" +"Opcja -show-control-chars przyjmuje jeden argument o warto¶ci 'literal' lub " +"'safe'" + +#: find/parser.c:2348 +#, c-format +msgid "Invalid argument %s to -used" +msgstr "B³êdny argument %s opcji -used" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "W³±czone w³a¶ciwo¶ci: " + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "Argumenty dla -type powinny zawieraæ tylko jedn± literê" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "Nieznany argument opcji -type: %c" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "uwaga: nierozpoznany znak steruj±cy `\\%c'" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "b³±d: %s na koñcu ³añcucha formatuj±cego" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "uwaga: nierozpoznana dyrektywa formatuj±ca `%%%c'" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" +"b³±d: dyrektywa formatuj±ca `%%%c' jest zarezerwowana do przysz³ego " +"wykorzystania" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" +"Bie¿±cy katalog jest obecny w zmiennej ¶rodowiskowej PATH, co jest " +"niebezpieczne w po³±czeniu z akcj± %s polecenia find. Proszê usun±æ bie¿±cy " +"katalog ze zmiennej $PATH (tzn. usun±æ \".\" albo wiod±ce lub koñcowe " +"dwukropki)" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" +"W zmiennej ¶rodowiskowej PATH jest obecna ¶cie¿ka wzglêdna %s, co jest " +"niebezpieczne w po³±czeniu z akcj± %s polecenia find. Proszê usun±æ ten wpis " +"ze zmiennej $PATH" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" +"Nie mo¿na u¿ywaæ {} wewn±trz nazwy narzêdzia dla opcji -execdir i -okdir, " +"poniewa¿ jest to potencjalny problem z bezpieczeñstwem." + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "Obs³ugiwane jest tylko jedno wyst±pienie {} przy -exec%s ... +" + +#: find/parser.c:3066 +msgid "The environment is too large for exec()." +msgstr "¦rodowisko jest zbyt du¿e, aby wykonaæ exec()." + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" +"przepe³nienie arytmetyczne przy próbie obliczenia koñca dnia dzisiejszego" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "standardowe wyj¶cie diagnostyczne" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "standardowe wyj¶cie" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "Uwaga: nie mo¿na okre¶liæ czasu narodzin pliku %s" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "Nie mo¿na zamkn±æ standardowego wej¶cia" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "Nie uda³o siê zmieniæ katalogu" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "nie mo¿na wykonaæ fork" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "b³±d podczas czekania na %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s zakoñczony sygna³em %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "b³êdne wyra¿enie" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "b³êdne wyra¿enie; podano operator binarny '%s' bez niczego przed nim." + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "oczekiwano wyra¿enia pomiêdzy '%s' i ')'" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "oczekiwano wyra¿enia po '%s'" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "b³êdne wyra¿enie; za du¿o ')'" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" +"b³êdne wyra¿enie; oczekiwano gdzie¶ ')', ale nie znaleziono. Byæ mo¿e " +"potrzebne jest dodatkowe wyra¿enie po '%s'" + +#: find/tree.c:149 +msgid "invalid expression; empty parentheses are not allowed." +msgstr "b³êdne wyra¿enie; puste nawiasy nie s± dozwolone." + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "b³êdne wyra¿enie; oczekiwano gdzie¶ ')', ale nie znaleziono." + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "ojej -- b³êdny typ wyra¿enia!" + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "ojej -- b³êdny typ wyra¿enia (%d)!" + +#: find/tree.c:1228 +#, c-format +msgid "paths must precede expression: %s" +msgstr "¶cie¿ki musz± poprzedzaæ wyra¿enie: %s" + +#: find/tree.c:1237 +#, c-format +msgid "unknown predicate `%s'" +msgstr "nieznane wyra¿enie `%s'" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "b³êdne wyra¿enie `%s'" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "b³êdny argument `%s' dla `%s'" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "brak argumentu dla `%s'" + +#: find/tree.c:1344 +msgid "you have too many ')'" +msgstr "za du¿o ')'" + +#: find/tree.c:1349 +#, c-format +msgid "unexpected extra predicate '%s'" +msgstr "nieoczekiwane dodatkowe wyra¿enie '%s'" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "nie obs³ugiwane dodatkowe wyra¿enie" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "ojej -- b³êdne domy¶lne wstawienie and!" + +#: find/util.c:157 +#, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Sk³adnia: %s [-H] [-L] [-P] [-Opoziom] [-D " + +#: find/util.c:159 +#, c-format +msgid "] [path...] [expression]\n" +msgstr "] [¶cie¿ka...] [wyra¿enie]\n" + +#: find/util.c:748 +#, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "Zignorowano nierozpoznan± flagê diagnostyczn± %s" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "Pusty argument dla opcji -D." + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "Bezpo¶rednio po opcji -O musi wyst±piæ liczba dziesiêtna" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "Proszê podaæ liczbê dziesiêtn± bezpo¶rednio po -O" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "B³êdny poziom optymalizacji %s" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" +"Poziom optymalizacji %lu jest zbyt du¿y. Aby odnale¼æ pliki bardzo szybko, " +"mo¿na u¿yæ GNU locate." + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"Zmienna ¶rodowiskowa FIND_BLOCK_SIZE nie jest obs³ugiwana; jedyne, co wp³ywa " +"na rozmiar bloku, to zmienna ¶rodowiskowa POSIXLY_CORRECT" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" + +#: lib/buildcmd.c:293 +#, fuzzy +msgid "argument list too long" +msgstr "za d³uga linia argumentów" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "Zbudowano przy u¿yciu GNU gnuliba w wersji %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Sk³adnia: %s [--version | --help]\n" +"lub %s najpopularniejsze_bigramy < lista-plików > baza-danych-locate\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"B³êdy proszê zg³aszaæ na adres .\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +#, fuzzy +msgid "Failed to write to standard output" +msgstr "standardowe wyj¶cie" + +#: locate/locate.c:150 +msgid "days" +msgstr "dni" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "Argument opcji --max-database-age nie mo¿e byæ pusty" + +#: locate/locate.c:213 locate/locate.c:220 +#, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "B³êdny argument %s opcji --max-database-age" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" +"Baza danych locate %s zawiera nazwê pliku d³u¿sz± ni¿ locate jest w stanie " +"obs³u¿yæ" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "Baza danych locate %s jest uszkodzona lub niepoprawna" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "Rozmiar bazy danych locate: %s bajtów\n" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "Pasuj±ce nazwy plików: %s " + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "Wszystkie nazwy plików: %s " + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "o ³±cznej d³ugo¶ci %s bajtów" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" +"\n" +"\tz których %s zawiera odstêpy, " + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" +"\n" +"\t%s zawiera znaki nowej linii, " + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" +"\n" +"\ta %s zawiera znaki z ustawionym najstarszym bitem.\n" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" +"Niektóre nazwy plików mog³y zostaæ odfiltrowane, wiêc nie mo¿na obliczyæ " +"wspó³czynnika kompresji.\n" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "Wspó³czynnik kompresji %4.2f%% (im wiêkszy tym lepiej)\n" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "Wspó³czynnik kompresji jest nieokre¶lony\n" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" +"Baza danych locate %s wygl±da na bazê danych slocate, ale o poziomie " +"bezpieczeñstwa %c, którego GNU findutils aktualnie nie obs³uguje" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" +"%s to baza danych slocate. Jej obs³uga jest nowa, mo¿na siê jeszcze " +"spodziewaæ problemów." + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" +"%s to baza danych slocate o nieobs³ugiwanym poziomie bezpieczeñstwa %d; " +"pominiêto." + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" +"Podano opcjê -E, ale ta opcja nie mo¿e byæ u¿yta z bazami danych w formacie " +"slocate o niezerowym poziomie bezpieczeñstwa. Dla tej bazy danych nie " +"zostan± wygenerowane ¿adne wyniki.\n" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "%s to baza danych slocate. W³±czono opcjê '-e'." + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" +"Baza danych locale %s w starym formacie jest zbyt krótka aby by³a poprawna" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "Baza danych %s jest w formacie %s.\n" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "Baza danych ma kodowanie ze s³owami maszynowymi little-endian.\n" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "Baza danych ma kodowanie ze s³owami maszynowymi big-endian.\n" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" +"Baza danych ma kodowanie z nieoczywist± kolejno¶ci± bajtów w s³owie " +"maszynowym.\n" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Sk³adnia: %s [-d ¶cie¿ka | --database=¶cie¿ka] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholepath] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=RODZAJ]\n" +" [--max-database-age D] [--version] [--help]\n" +" wzorzec...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "nie uda³o siê porzuciæ uprawnieñ grupy" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "nie uda³o siê porzuciæ uprawnieñ setuid" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "Nie uda³o siê w pe³ni porzuciæ uprawnieñ" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "nie uda³o siê porzuciæ uprawnieñ setgid" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" +"uwaga: baza danych locate mo¿e byæ odczytana ze standardowego wej¶cia tylko " +"raz." + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "uwaga: baza danych %s ma ju¿ ponad %d %s (jej wiek to %.1f %s)" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "nieoczekiwane dodatkowe wyra¿enie '%s'" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "b³±d podczas czekania na %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" +"Nieprawid³owa sekwencja steruj±ca %s w okre¶leniu ogranicznika wej¶cia." + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" +"Nieprawid³owa sekwencja steruj±ca %s w okre¶leniu ogranicznika wej¶cia; " +"warto¶ci znaków nie mog± przekraczaæ %lx." + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" +"Nieprawid³owa sekwencja steruj±ca %s w okre¶leniu ogranicznika wej¶cia; " +"warto¶ci znaków nie mog± przekraczaæ %lo." + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" +"Nieprawid³owa sekwencja steruj±ca %s w okre¶leniu ogranicznika wej¶cia; " +"koñcowe znaki %s nie zosta³y rozpoznane." + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" +"Nieprawid³owe okre¶lenie ogranicznika wej¶cia %s: ogranicznik musi byæ " +"pojedynczym znakiem lub sekwencj± steruj±c± zaczynaj±c± siê od \\." + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "¶rodowisko jest zbyt du¿e, aby wykonaæ exec" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "uwaga: warto¶æ %ld dla opcji -s jest zbyt du¿a, u¿yto %ld" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "Nie mo¿na otworzyæ pliku wej¶ciowego %s" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "Zmienne ¶rodowiskowe zajmuj± %lu bajtów\n" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "POSIX-owy górny limit na d³ugo¶æ argumentów (na tym systemie): %lu\n" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" +"POSIX-owy najmniejszy dopuszczalny górny limit na d³ugo¶æ argumentów: %lu\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "Maksymalna d³ugo¶æ polecenia, które mo¿na u¿yæ: %ld\n" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Rozmiar u¿ywanego bufora polecenia: %lu\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" +"\n" +"Wykonywanie xargs bêdzie kontynuowane, i bêdziê próbowaæ czytaæ wej¶cie i " +"uruchamiaæ polecenia; je¶li nie jest to porz±dane zachowanie, proszê " +"wprowadziæ znak koñca pliku.\n" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" +"Uwaga: %s bêdzie uruchomione przynajmniej raz. Je¶li nie jest to porz±dane " +"zachowanie, proszê nacisn±æ klawisz przerwania.\n" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"niedopasowany %s znak cytowania; domy¶lnie znaki cytowania s± specjalnymi " +"dla xargs o ile nie u¿yto opcji -0" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "podwójny" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "pojedynczy" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" +"uwaga: na wej¶ciu wyst±pi³ znak NUL. Nie mo¿e byæ przekazany poprzez listê " +"argumentów. Czy mia³a byæ u¿ywa opcjia --null?" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "za d³uga linia argumentów" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "b³±d podczas oczekiwania na proces potomny" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: wyszed³ ze stanem 255; zaniechanie" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: zatrzymany sygna³em %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: zakoñczony sygna³em %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: b³êdna liczba dla opcji -%c\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: warto¶æ dla opcji -%c powinna byæ >= %ld\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: warto¶æ dla opcji -%c powinna byæ < %ld\n" + +#: xargs/xargs.c:1306 +#, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Sk³adnia: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=ogranicznik]\n" +" [-E ³añc-eof] [-e[³añc-eof]] [--eof[=³añc-eof]]\n" +" [-L maks-linii] [-l[maks-linii]] [--max-lines[=maks-linii]]\n" +" [-I ³añc-zmienn] [-i[³añc-zmienn]] [--replace[=³añc-zmienn]]\n" +" [-n maks-arg] [--max-args=maks-arg]\n" +" [-s maks-znaków] [--max-chars=maks-znaków]\n" +" [-P maks-proc] [--max-procs=maks-proc] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=plik]\n" +" [--version] [--help] [polecenie [pocz±tkowe-argumenty]]\n" + +#~ msgid "block size" +#~ msgstr "rozmiar bloku" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "uwaga: wyra¿enie -ipath jest przestarza³e; proszê zamiast niego u¿ywaæ -" +#~ "iwholename." + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find wersja %s\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU findutils wersja %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate wersja %s\n" + +#~ msgid "argument to --limit" +#~ msgstr "argument dla --limit" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs wersja %s\n" diff --git a/po/pt.po b/po/pt.po new file mode 100644 index 0000000..64499dc --- /dev/null +++ b/po/pt.po @@ -0,0 +1,1336 @@ +# Portuguese translation of the "findutils" messages +# Copyright (C) 2005 Free Software Foundation, Inc. +# This file is distributed under the same license as the findutils package. +# Helder Correia , 2005-2007. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.3.2\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2007-05-19 02:47+0100\n" +"Last-Translator: Helder Correia \n" +"Language-Team: Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "argumento inválido %s para %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "argumento %s ambíguo para %s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Argumentos válidos são:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Erro de sistema desconhecido" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: a opção '%s' é ambígua\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: a opção '--%s' não permite um argumento\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: a opção '%c%s' não permite um argumento\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: a opção '%s' requere um argumento\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: opção '--%s' desconhecida\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: opção '%c%s' não reconhecida\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: opção -- %c ilegal\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: opção -- %c inválida\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: a opção -- %c requere um argumento\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: a opção '-W %s' é ambígua\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: a opção '-W %s' não permite um argumento\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "não é possível obter a pasta corrente" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "\"" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "\"" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "" + +#: gnulib/lib/regcomp.c:137 +#, fuzzy +msgid "Invalid regular expression" +msgstr "expressão inválida" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: gnulib/lib/regcomp.c:164 +#, fuzzy +msgid "Invalid range end" +msgstr "argumento inválido %s para %s" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "" + +#: gnulib/lib/regcomp.c:170 +#, fuzzy +msgid "Invalid preceding regular expression" +msgstr "expressão inválida" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[yY]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "argumento '%s' inválido para '%s'" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "argumento '%s' inválido para '%s'" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "linha de argumentos demasiado longa" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "não é possível obter a pasta corrente" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "não é possível obter a pasta corrente" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "Aviso: o sistema de ficheiros %s foi desmontado recentemente." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "Aviso: o sistema de ficheiros %s foi montado recentemente." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s alterado durante a execution de %s (número do disposito antigo %ld, " +"novo número do disposito %ld, tipo do sistema de ficheiros é %s) [ref %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s alterado durante a execução de %s (número 'inode' antigo %ld, novo " +"número 'inode' %ld, tipo do sistema de ficheiros é %s) [ref %ld]" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, fuzzy, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" +"A ligação simbólica `%s' é parte de um ciclo na hierarquia de pastas; a " +"pasta para a qual aponta já foi visitada." + +#: find/find.c:1104 +#, fuzzy, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" +"Detectado um ciclo no sistema de ficheiros; '%s' tem o mesmo número de " +"dispositivo e 'inode' que uma directoria que é %d %s." + +#: find/find.c:1108 +#, fuzzy +msgid "level higher in the file system hierarchy" +msgstr "nível mais alto na hierarquia do sistema de ficheiros" + +#: find/find.c:1109 +#, fuzzy +msgid "levels higher in the file system hierarchy" +msgstr "níveis mais alto na hierarquia do sistema de ficheiros" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "aviso: a não seguir a ligação simbólica %s" + +#: find/find.c:1398 +#, fuzzy, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" +"AVISO: a contagem de ligações persistentes é errada para %s: isto pode ser " +"uma falha no 'driver' do seu sistema de ficheiros. A activar automaticamente " +"a opção '-noleaf'. Resultados anteriores podem ter falhado a inclusão de " +"pastas que deveriam ter sido pesquisadas." + +#: find/fstype.c:250 +msgid "unknown" +msgstr "desconhecido" + +#: find/ftsfind.c:298 +#, fuzzy, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" +"Detectado um ciclo no sistema de ficheiros; '%s' tem o mesmo número de " +"dispositivo e 'inode' que uma directoria que é %d %s." + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"aviso: especificou a opção %s após um argumento não opção %s, mas as opções " +"não são posicionais (%s afecta os testes especificados antes, assim como os " +"especificados após). Por favor, especifique as opções antes dos outros " +"argumentos.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"aviso: a opção -d está obsoleta; por favor, use -depth em substituição, uma " +"vez que esta é uma funcionalidade em conformidade POSIX." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"\n" +"o caminho padrão é a pasta corrente; a expressão predefinida é -print\n" +"a expressão deve consistir em: operadores, opções, testes e acções:\n" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"operadores (precedência decrescente; -and é implícito onde mais nenhum é " +"dado):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +"opções posicionais (sempre verdadeiras): -daystart -follow -regextype:\n" +"\n" +"opções normais (sempre verdadeiras, especificadas antes de outras " +"expressões):\n" +" -depth --help -maxdepth NÍVEIS -mindepth NÍVEIS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +"testes (N can be +N or -N or N): -amin N -anewer FICH -atime N -cmin N\n" +" -cnewer FICH -ctime N -empty -false -fstype TIPO -gid N -group NOME\n" +" -ilname PADRÃO -iname PADRÃO -inum N -iwholename PADRÃO -iregex " +"PADRÃO\n" +" -links N -lname PADRÃO -mmin N -mtime N -name PADRÃO -newer FICH" + +#: find/parser.c:1078 +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path PADRÃO -perm [+-]MODO -regex PADRÃO\n" +" -readable -writable -executable\n" +" -wholename PADRÃO -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NOME -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" +"acções: -delete -print0 -printf FORMATO -fprintf FICHEIRO FORMATO -print \n" +" -fprint0 FICHEIRO -fprint FICHEIRO -ls -fls FICHEIRO -prune -quit\n" +" -exec COMANDO ; -exec COMANDO {} + -ok COMANDO ;\n" +" -execdir COMANDO ; -execdir COMANDO {} + -okdir COMANDO ;\n" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"Relate erros (e acompanhe o progresso de solução) via página situada em\n" +"http://savannah.gnu.org/ ou, caso não tenha acesso, enviando um\n" +"correio electrónico para ." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "a verificação de sanidade da função de biblioteca fnmatch() falhou." + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" +"aviso: normalmente, os ficheiros Unix não contêm barras. Isso significa que " +"'%s %s' será sempre avaliado como falso neste sistema. Poderá achar o teste " +"'-wholename' mais útil, ou talvez '-samefile'. Alternativamente, se estiver " +"a usar o GNU grep, pode usar 'find ... -print0 | grep -FzZ %s'." + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, fuzzy, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "Não é possível abrir o ficheiro de entrada '%s'" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "modo '%s0 inválido" + +#: find/parser.c:1807 +#, fuzzy, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" +"aviso: especificou um padrão de modo %s que é equivalente a 000. O " +"significado de -perm /000 seá mudado em breve para ser consistente com -perm " +"-000; isto é, por agora não combina com qualquer ficheiro mas em breve será " +"alterado para combinar com todos." + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "argumento vazio para -size inválido" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "Tipo -size '%c' inválido" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "argumento '%s' inválido para '%s'" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" +"A opção -show-control-chars requere um único parâmetro que deve ser " +"'literal' ou 'seguro'" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "argumento inválido %s para %s" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "Funcionalidades activadas: " + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "aviso: escape '\\%c' não reconhecido" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "erro: %s no fim de expressão de formato" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "aviso: directiva de formatação '%%%c' não reconhecida" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" +"A pasta corrente está incluída na variável de ambiente 'PATH', o que é " +"inseguro quando combinado com a acção %s do 'find'. Por favor, remova a " +"pasta corrente do seu '$PATH' (isto é, remova \".\")" + +#: find/parser.c:2921 +#, fuzzy, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" +"A pasta corrente está incluída na variável de ambiente 'PATH', o que é " +"inseguro quando combinado com a acção %s do 'find'. Por favor, remova a " +"pasta corrente do seu '$PATH' (isto é, remova \".\")" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" +"Pode não usar {} no nome do utilitário para '-execdir' e '-okdir', uma vez " +"que se trata de um potencial problema de segurança." + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "Apenas uma instância de {} é suportada com -exec%s ... +" + +#: find/parser.c:3066 +msgid "The environment is too large for exec()." +msgstr "O ambiente é demasiado grande para exec()." + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "não é possível bifurcar (fork)" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "erro ao aguardar por %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s terminado pelo sinal %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "expressão inválida" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "expressão inválida: utilizou um operador binário '%s' sem nada atrás." + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "esperava-se uma expressão entre '%s' e ')'" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "esperada uma expressão após '%s'" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "expressão inválida; tem demasiados ')'" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" +"expressão inválida; esperava-se ')' mas não foi encontrado. Talvez necessite " +"de um predicado extra após '%s'" + +#: find/tree.c:149 +msgid "invalid expression; empty parentheses are not allowed." +msgstr "expressão inválida; parêntesis vazios não são permitidos.'" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "expressão inválida; ')' esperado algures mas não encontrado." + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "ops -- tipo de expressão inválido" + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "tipo de expressão inválido (%d)!" + +#: find/tree.c:1228 +#, c-format +msgid "paths must precede expression: %s" +msgstr "caminhos devem preceder a expressão: %s" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "predicado inválido '%s'" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "predicado inválido '%s'" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "argumento '%s' inválido para '%s'" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "argumento em falta para '%s'" + +#: find/tree.c:1344 +msgid "you have too many ')'" +msgstr "tem demasiados ')'" + +#: find/tree.c:1349 +#, c-format +msgid "unexpected extra predicate '%s'" +msgstr "predicado extra '%s' inesperado" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "predicado extra inesperado" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "ops -- inserção por omissão de and inválida!" + +#: find/util.c:157 +#, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Utilização: %s [-H] [-L] [-P] [-Olevel] [-D " + +#: find/util.c:159 +#, c-format +msgid "] [path...] [expression]\n" +msgstr "] [caminho...] [expressão]\n" + +#: find/util.c:748 +#, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "A ignorar opção de depuração %s não reconhecida" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "Parâmetro vazio para o opção -D." + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "A opção -O deve ser imediatamente seguida por um inteiro decimal" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "Por favor especifique um number decimal imediatamente após -O" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "Nível deoptimização %s inválido" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" +"O nível de optimização %lu é muito elevado. Se deseja encontrar ficheiros " +"rapidamente, considere a utilização do GNU locate." + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"A variável de ambiente FIND_BLOCK_SIZE não é suportada, a única coisa que " +"afecta o tamanho de bloco é a variável de ambiente POSIXLY_CORRECT" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" + +#: lib/buildcmd.c:293 +#, fuzzy +msgid "argument list too long" +msgstr "linha de argumentos demasiado longa" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU findutils versão %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Utilização: %s [--version | --help]\n" +"ou %s bigramas_mais_comuns < lista-ficheiros > base-de-dados-" +"locate\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Envie erros para .\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "dias" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "argumento inválido %s para %s" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "argumento inválido %s para %s" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, fuzzy, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "a base de dados do locate '%s' está corrompida ou é inválida" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "Tamanho da base de dados 'locate': %s bytes\n" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "Ficheiros Resultantes: %s" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "Todos os Ficheiros: %s" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "com um tamanho acumulado de %s B" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" +"\n" +"\tdos quais %s contêm espaços em branco, " + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" +"\n" +"\t%s contêm caracteres de nova linha, " + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" +"\n" +"\te %s contêm caracteres com o bit alto activado.\n" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" +"Alguns ficheiros podem ter sido deixados de fora, pelo que não é possível " +"calcular a taxa de compressão.\n" + +#: locate/locate.c:934 +#, fuzzy, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "Taxa de compressão %4.2f%%\n" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "Taxa de compressão indefinida\n" + +#: locate/locate.c:996 +#, fuzzy, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" +"a base de dados locate '%s' parece uma base de dados slocate mas aparenta " +"ter nível de segurança %c, o qual não é actualmente suportado" + +#: locate/locate.c:1113 +#, fuzzy, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" +"'%s' é uma base de dados slocate. Suporte para este tipo é recente, espere " +"problemas por enquanto (está, de qualquer modo, a usar código CVS)." + +#: locate/locate.c:1127 +#, fuzzy, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "'%s' é uma base de dados slocate. A activar a opção '-e'." + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" +"Especificou a opção -E, mas a mesma não pode ser usada com bases de dados " +"slocate-format com nível de segurança não zero. Não serão gerados resultados " +"para esta base de dados.\n" + +#: locate/locate.c:1155 +#, fuzzy, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "'%s' é uma base de dados slocate. A activar a opção '-e'." + +#: locate/locate.c:1193 +#, fuzzy, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "a base de dados do locate '%s' está corrompida ou é inválida" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "A base de dados %s está no formato %s.\n" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, fuzzy, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Utilização: %s [-d caminho | --database=caminho] [-e | -E | --[non-]" +"existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --" +"count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TIPO]\n" +" [-version] [--help]\n" +" padrão...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "erro ao descartar privilégios de grupo" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "erro ao descartar privileges setuid" + +#: locate/locate.c:1504 +#, fuzzy +msgid "Failed to fully drop privileges" +msgstr "Erro aos descartar privilégios" + +#: locate/locate.c:1522 +#, fuzzy +msgid "failed to drop setgid privileges" +msgstr "erro ao descartar privileges setuid" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" +"aviso: a base de dados locate pode ser lida da entrada padrão apenas uma vez." + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "aviso: a base de dados '%s' tem mais de %d %s" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "predicado extra '%s' inesperado" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "erro ao aguardar por %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" +"Sequência de escape %s inválida na especificação de delimitador de entrada." + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" +"Sequência de escape %s inválida na especificação de delimitador de entrada; " +"os caracteres não devem exceder %lx." + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" +"Sequência de escape %s inválida na especificação de delimitador de entrada; " +"os caracteres não devem exceder %lo." + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" +"Sequência de escape %s inválida na especificação de delimitador de entrada; " +"caracteres finais %s não reconhecidos." + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" +"Especificação de delimitador de entrada %s inválida: o delimitador deve ser " +"um carácter simples ou uma sequência de escape iniciada por \\." + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "o ambiente é demasiado grande para o exec" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" +"aviso: o valor %ld para a opção -s é demasiado grande, a usar %ld ao invés" + +#: xargs/xargs.c:652 +#, fuzzy, c-format +msgid "Cannot open input file %s" +msgstr "Não é possível abrir o ficheiro de entrada '%s'" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "As suas variáveis de ambiente ocupam %lu bytes\n" + +#: xargs/xargs.c:691 +#, fuzzy, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "Limites inferior e superior POSIX de tamanho de argumentos: %lu, %lu\n" + +#: xargs/xargs.c:694 +#, fuzzy, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "Limites inferior e superior POSIX de tamanho de argumentos: %lu, %lu\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "tamanho máximo do comando possível de usar: %ld\n" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Tamanho da memória de comandos actualmente em uso: %lu\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"citação %s não correspondida; por omissão, as citações são especiais para lo " +"xargs, a não ser que use a opção -0" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "duplo" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "simples" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "linha de argumentos demasiado longa" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "erro ao esperar pelo processo filho" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: saída com estado 255; a abortar" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: parado pelo sinal %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: terminado pelo sinal %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: número inválido para a opção -%c\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: valor para a opção -%c deveria ser >= %ld\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: vaor para a opção -%c deveria ser < %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Util.: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E exp-fdf] [-e[exp-fdf]] [--eof[=exp-fdf]]\n" +" [-L máx-linhas] [-l[máx-linhas]] [--max-lines[=máx-linhas]]\n" +" [-I exp-subst] [-i[exp-subst]] [--replace[=exp-subst]]\n" +" [-n máx-args] [--max-args=máx-args]\n" +" [-s máx-cars] [--max-chars=máx-cars]\n" +" [-P máx-procs] [--max-procs=máx-procs] [[--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=ficheiro]\n" +" [--version] [--help] [comando [argumentos-iniciais]]\n" + +#~ msgid "block size" +#~ msgstr "tamanho do bloco" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "aviso: o predicate -ipath está obsoleto: por favor, use -iwholename em " +#~ "substituição" + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find versão %s\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU findutils versão %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate versão %s\n" + +#~ msgid "argument to --limit" +#~ msgstr "argumento para --limit" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs versão %s\n" + +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "tipo de expressão inválido em mark_stat!" + +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "tipo de expressão inválido em mark_type!" diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100644 index 0000000..17e39a9 --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,1315 @@ +# Brazilian portuguese messages for findutils. +# Copyright (C) 1999, 2000, 2002, 2004 Free Software Foundation, Inc. +# This file is distributed under the same license as the findutils package. +# Alexandre Folle de Menezes , 2002, 2004. +# based on the previous translation to pt_BR (v4.1.5) by +# Rodrigo Parra Novo , 1999, 2000. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.1.20\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2004-02-08 18:00-0200\n" +"Last-Translator: Alexandre Folle de Menezes \n" +"Language-Team: Brazilian Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +# c-format +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "argumento %s inválido para %s" + +# c-format +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "argumento %s ambíguo para %s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Argumentos válidos são:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Erro de sistema desconhecido" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: opção `%s' é ambígua\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: opção `--%s' não permite um argumento\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: opção `%c%s' não permite um argumento\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: opção `%s' requer um argumento\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: a opção `--%s' não é conhecida\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: a opção `%c%s' não é conhecida\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: opção ilegal -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: opção inválida -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: opção requer um argumento -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: opção `-W %s' é ambígua\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: opção `-W %s' não permite um argumento\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "não foi possível obter o diretório atual" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "`" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "'" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Sucesso" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "Não há associações" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "expressão regularinválida" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Caractere de colagem inválido" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Nome da classe de caractere inválida" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Contrabarra precedente" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Referência reversa inválida" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "[ ou ^[ não correspondido" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "( ou \\( não correspondido" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "\\{ não correspondido" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Conteúdo de \\{\\} inválido" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Fim do comprimento inválido" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "memória exaurida" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Expressão regular precedente inválida" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Fim prematuro de expressão regular" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Expressão regular muito comprida" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr ") ou \\) não correspondido" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "Não há uma expressão regular prévia" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[sS]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "memória exaurida" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "argumento inválido `%s' para `%s'" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "argumento inválido `%s' para `%s'" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "lista de argumentos muito longa" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "não foi possível obter o diretório atual" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "não foi possível obter o diretório atual" + +#: find/find.c:384 +#, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "" + +#: find/find.c:394 +#, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "" + +#: find/find.c:490 +#, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:527 +#, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "desconhecido" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +#, fuzzy +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"o caminho padrão é o diretório atual; a expressão padrão é -print\n" +"expressões poden consistir de:\n" +"operadores (precedência decrescente; -and é implícito onde nenhum outro é " +"explícitado):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" + +#: find/parser.c:1064 +#, fuzzy +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"o caminho padrão é o diretório atual; a expressão padrão é -print\n" +"expressões poden consistir de:\n" +"operadores (precedência decrescente; -and é implícito onde nenhum outro é " +"explícitado):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" + +#: find/parser.c:1073 +#, fuzzy +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +" -cnewer ARQUIVO -ctime N -empty -false -fstype TIPO -gid N -group " +"NOME\n" +" -ilname PADRÃO -iname PADRÃO -inum N -ipath PADRÃO -iregex PADRÃO\n" +" -links N -lname PADRÃO -mmin N -mtime N -name PADRÃO -newer ARQUIVO\n" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path PADRÃO -perm [+-]MODO -regex PADRÃO\n" +" -size N[bckw] -true -type [bcdpfls] -uid N -used N -user NOME\n" +" -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "" + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "modo inválido `%s'" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "argumento nulo inválido para -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "tipo inválido `%c' para -size" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "argumento inválido `%s' para `%s'" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +# c-format +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "argumento %s inválido para %s" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "aviso: controle (escape) não reconhecido `\\%c'" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "aviso: diretiva de formatação desconhecida `%%%c'" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "ambiente de execução é muito grande" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "não consigo duplicar o processo (fork())" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "erro esperando por %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s terminado pelo sinal %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "expressão inválida" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "" + +#: find/tree.c:121 +#, fuzzy +msgid "invalid expression; you have too many ')'" +msgstr "expressão inválida" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "expressão inválida" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "oops -- tipo inválido de expressão!" + +#: find/tree.c:231 +#, fuzzy, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "oops -- tipo inválido de expressão!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "os caminhos devem preceder a expressão" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "predicado inválido `%s'" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "predicado inválido `%s'" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "argumento inválido `%s' para `%s'" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "faltando argumento para `%s'" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "expressão inválida" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "predicado inválido `%s'" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "oops -- inserção padrão de and! inválida" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Uso: %s [caminho...] [expressão]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Uso: %s [caminho...] [expressão]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "aviso: controle (escape) não reconhecido `\\%c'" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "comando muito longo" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" +"não foi possível incluir argumento simples devido ao limite de tamanho da " +"lista de argumentos" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "lista de argumentos muito longa" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU find versão %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, fuzzy, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "Uso: %s bigrams_mais_comuns < lista > lista_codificada\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +#, fuzzy +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Reporte erros para ." + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "dias" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "argumento inválido `%s' para `%s'" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "argumento inválido `%s' para `%s'" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "aviso: banco de dados `%s' é mais antigo que %d %s" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "predicado inválido `%s'" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "erro esperando por %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "ambiente de execução é muito grande" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "duplo" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "simples" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "linha com argumentos muito longa" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "erro esperando por processo filho" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: saiu com status 255; abortando" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: desativado pelo sinal %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: terminado pelo sinal %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: número inválido para opção -%c\n" + +#: xargs/xargs.c:1274 +#, fuzzy, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: valor para opção -%c deve ser >= %ld\n" + +#: xargs/xargs.c:1288 +#, fuzzy, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: valor para opção -%c deve ser < que %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Uso: %s [-0prtx] [-e[eof-str]] [-i[replace-str]] [-l[max-linhas]]\n" +" [-n max-args] [-s max-chars] [-P max-procs] [--null] [--eof[=eof-" +"str]]\n" +" [--replace[=replace-str]] [--max-lines[=max-lines]] [--interactive]\n" +" [--max-chars=max-chars] [--verbose] [--exit] [--max-procs=max-procs]\n" +" [--max-args=max-args] [--no-run-if-empty] [--version] [--help]\n" +" [command [argumentos iniciais]]\n" + +#~ msgid "block size" +#~ msgstr "tamanho do bloco" + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find versão %s\n" + +#, fuzzy +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU find versão %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate versão %s\n" + +#, fuzzy +#~ msgid "argument to --limit" +#~ msgstr "linha com argumentos muito longa" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs versão %s\n" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "oops -- tipo inválido de expressão!" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "oops -- tipo inválido de expressão!" + +#, fuzzy +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "ações: -exec COMANDO ; -fprint ARQUIVO -fprint0 ARQUIVO -fprintf ARQUIVO " +#~ "FORMATO\n" +#~ " -ok COMANDO ; -print -print0 -printf FORMATO -prune -ls\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "Lista dos predicados:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "Árvore de avaliação:\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Árvore de avaliação otimizada:\n" + +#, fuzzy +#~ msgid "Optimized command line:\n" +#~ msgstr "Árvore de avaliação otimizada:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "memória virtual exaurida" + +#~ msgid "inserting %s\n" +#~ msgstr "inserindo %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " tipo: %s %s " + +#~ msgid "left:\n" +#~ msgstr "esquerda:\n" + +#~ msgid "right:\n" +#~ msgstr "direita:\n" + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Árvore de avaliação normalizada:\n" + +#~ msgid "%s changed during execution of %s" +#~ msgstr "%s alterado durante a execução de %s" + +#~ msgid "%s/.. changed during execution of %s" +#~ msgstr "%s/.. alterado durante a execução de %s" + +#~ msgid "error in %s: %s" +#~ msgstr "erro em %s: %s" + +#~ msgid "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "options (always true): -daystart -depth -follow --help\n" +#~ " -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev\n" +#~ "tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +#~ msgstr "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "opções (sempre verdadeiras): -daystart -depth -follow --help\n" +#~ " -maxdepth NIVEIS -mindepth NIVEIS -mount -noleaf --version --xdev\n" +#~ "testes (N pode ser +N ou -N ou N): -amin N -anewer ARQUIVO -atime N -cmin " +#~ "N\n" + +#~ msgid "" +#~ "Usage: %s [-d path | --database=path] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] pattern...\n" +#~ msgstr "" +#~ "Uso: %s [-d caminho] [--database=caminho] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] padrão...\n" + +#~ msgid "unmatched %s quote" +#~ msgstr "citação %s não encontrada" diff --git a/po/quot.sed b/po/quot.sed new file mode 100644 index 0000000..0122c46 --- /dev/null +++ b/po/quot.sed @@ -0,0 +1,6 @@ +s/"\([^"]*\)"/“\1”/g +s/`\([^`']*\)'/‘\1’/g +s/ '\([^`']*\)' / ‘\1’ /g +s/ '\([^`']*\)'$/ ‘\1’/g +s/^'\([^`']*\)' /‘\1’ /g +s/“”/""/g diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin new file mode 100644 index 0000000..2436c49 --- /dev/null +++ b/po/remove-potcdate.sin @@ -0,0 +1,19 @@ +# Sed script that remove the POT-Creation-Date line in the header entry +# from a POT file. +# +# The distinction between the first and the following occurrences of the +# pattern is achieved by looking at the hold space. +/^"POT-Creation-Date: .*"$/{ +x +# Test if the hold space is empty. +s/P/P/ +ta +# Yes it was empty. First occurrence. Remove the line. +g +d +bb +:a +# The hold space was nonempty. Following occurrences. Do nothing. +x +:b +} diff --git a/po/ro.po b/po/ro.po new file mode 100644 index 0000000..532f5c1 --- /dev/null +++ b/po/ro.po @@ -0,0 +1,1375 @@ +# Mesajele în limba românã pentru findutils. +# Copyright (C) 2005 Free Software Foundation, Inc. +# Acest fiºier este distribuit sub aceeaºi licenþã ca ºi pachetul findutils. +# Laurentiu Buzdugan , 2003,2004,2005 +# +# +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.2.24\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2005-08-01 12:00-0500\n" +"Last-Translator: Laurentiu Buzdugan \n" +"Language-Team: Romanian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "argument invalid %s pentru %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "argument ambiguu %s pentru %s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Argumente valide sunt:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Eroare de sistem necunoscutã" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: opþiunea `%s' este ambiguã\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: opþiunea `--%s' nu permite un argument\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: opþiunea `%c%s' nu permite un argument\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: opþiunea `%s' necesitã un argument\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: opþiune nerecunoscutã `--%s'\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: opþiune nerecunoscutã `%c%s'\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: opþiune ilegalã -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: opþiune ilegalã -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: opþiunea necesitã un argument -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: opþiunea `-W %s' este ambiguã\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: opþiunea `-W %s' nu permite un argument\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "nu pot obþine directorul curent" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "`" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "'" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Succes" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "Nici o potrivire" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Expresiei regularã invalidã" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Caracter colatare invalid" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Nume clasã caractere invalid" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Trailing backslash" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Referinþã înapoi invalidã" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "[ sau [^ fãrã pereche" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "( sau \\( fãrã pereche" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "\\{ fãrã pereche" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Conþinut invalid pentru \\{\\}" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Capãt interval invalid" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Memorie epuizatã" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Invalid precedând expresie regularã" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Sfârºit prematur al expresiei regulare" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Expresie regularã prea mare" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr ") sau \\) fãrã pereche" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "Nici o expresie regularã anterioarã" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[yY]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +#, fuzzy +msgid "memory exhausted" +msgstr "Memorie epuizatã" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "argument invalid `%s' pentru `%s'" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "argument invalid `%s' pentru `%s'" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "listã argumente prea lungã" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "nu pot obþine directorul curent" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "nu pot obþine directorul curent" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "Avertisment: sistemul de fiºiere %s de fost demontat de curând." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "Avertisment: sistemul de fiºiere %s de fost montat de curând." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s s-a schimbat în timpul execuþiei lui %s (vechiul nr. dispozitiv %ld, " +"noul nr. dispozitiv %ld, tipul sistemului de fiºiere este %s) [ref %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s s-a schimbat în timpul execuþiei lui %s (vechiul nr. inode %ld, noul " +"nr. inode %ld, tipul sistemului de fiºiere este %s) [ref %ld]" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, fuzzy, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" +"Legãtura simbolicã `%s' este parte a unei bucle în ierarhia de directoare; " +"am vizitat deja directorul cãtre care þinteºte." + +#: find/find.c:1104 +#, fuzzy, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" +"Am detectat o buclã în sistemul de fiºiere; `%s' are acelaºi numãr de " +"unitate ºi inode ca ºi un director care este %d %s." + +#: find/find.c:1108 +#, fuzzy +msgid "level higher in the file system hierarchy" +msgstr "nivel mai înalt în ierarhia sistemului de fiºiere" + +#: find/find.c:1109 +#, fuzzy +msgid "levels higher in the file system hierarchy" +msgstr "nivele mai înalte în ierarhia sistemului de fiºiere" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "avertisment: nu urmez legãtura simbolicã %s" + +#: find/find.c:1398 +#, fuzzy, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" +"AVERTISMENT: Numãrul de legãturi hard este greºit pentru %s: acesta ar putea " +"fi un bug în driverul dvs. pentru sistemul de fiºiere. Pornesc automat " +"opþiunea -noleaf a lui find. Rezultatele precedente ar fi putut eºua sã " +"includã directoare care ar fi trebuit cãutate." + +#: find/fstype.c:250 +msgid "unknown" +msgstr "necunoscut" + +#: find/ftsfind.c:298 +#, fuzzy, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" +"Am detectat o buclã în sistemul de fiºiere; `%s' are acelaºi numãr de " +"unitate ºi inode ca ºi un director care este %d %s." + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"avertisment: aþi specificat opþiunea %s dupã un argument non-opþiune %s, dar " +"opþiunile nu sunt poziþionale (%s afecteazã testele specificate înainte de " +"el ca ºi cele specificate dupã el). Vã rugãm specificaþi opþiunile înainte " +"de alte argumente.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"avertisment: opþiunea -d nu mai este validã; vã rugãm folosiþi -depth în " +"locul lui, pentru cã aceasta din urmã respectã standardul POSIX." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"\n" +"calea implicitã este directorul curent; expresia implicitã este -print\n" +"expresia poate fi compusã din: operatori opþiuni, teste ºi acþiuni:\n" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"operatori (precedenþa în scãdere; -and este implicit când alþii nu sunt " +"precizaþi):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +"opþiuni poziþionale (întotdeauna adevãrat): -daystart -follow -regextype\n" +"\n" +"opþiuni normale (întotdeauna adevãrat, specificate înaintea altor " +"expresii):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +"teste (N poate fi +N sau -N sau N): -amin N -anewer FIªIER -atime N -cmin N\n" +" -cnewer FIªIER -ctime N -empty -false -fstype TIP -gid N -group NUME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FIªIER" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path PATTERN -perm [+-]MOD -regex PATTERN\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NUME -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" +"acþiuni: -delete -print0 -printf FORMAT -fprintf FORMAT FIªIER -print \n" +" -fprint0 FIªIER -fprint FIªIER -ls -fls FIªIER -prune -quit\n" +" -exec COMANDà ; -exec COMANDà {} + -ok COMANDà ;\n" +" -execdir COMANDà ; -execdir COMANDà {} + -okdir COMANDà ;\n" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"Raportaþi (ºi urmãriþi progresul reparãrii) bug-urilor folosind pagina de\n" +"raportare a bug-urilor din findutils de la http://savannah.gnu.org/ sau,\n" +"dacã nu aveþi acces la internet, trimiþând email la ." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "verificarea corectitudinii funcþie de bibliotecã fnmatch() a eºuat." + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" +"avertisment: de obicei, numele de fiºiere în Unix nu conþin shash-uri (dar " +"numele de cãi da). Aceasta înseamnã cã '%s %s' va fi evaluat ca fals tot " +"timpul pe acest sistem. Aþi putea gãsi testul '-wholename' mai folositor, " +"sau probabil '-samefile'. Alternativ, dacã folosiþi GNU grep, puteþi folosi " +"'find ... -print0 | grep -FzZ %s'." + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, fuzzy, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "Nu pot deschide fiºierul de intrare `%s'" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "mod invalid `%s'" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "argument null invalid pentru -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "tip -size invalid `%c'" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "argument invalid `%s' pentru `%s'" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "argument invalid %s pentru %s" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "Capabilitãþi activate: " + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "avertisment: escape nerecunoscut `\\%c'" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "avertisment: directivã format nerecunoscutã `%%%c'" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" +"Directorul curent este inclus în variabila de mediu PATH, ceea ce este " +"periculos (insecure) în combinaþie cu acþiune %s a lui find. Vã rugãm " +"îndepãrtaþi directorul curent din $PATH (adicã îndepãrtaþi \".\" sau primul " +"sau ultimul \":\")" + +#: find/parser.c:2921 +#, fuzzy, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" +"Directorul curent este inclus în variabila de mediu PATH, ceea ce este " +"periculos (insecure) în combinaþie cu acþiune %s a lui find. Vã rugãm " +"îndepãrtaþi directorul curent din $PATH (adicã îndepãrtaþi \".\" sau primul " +"sau ultimul \":\")" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" +"Nu puteþi folosi {} în cadrul numelui utilitarului pentru -execdir ºi -" +"okdir, pentru cã aceasta este o potenþialã problemã de securitate." + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "Numai o singurã instanþã de {} este suportatã cu -exec%s ... +" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "mediul (environment) este prea larg pentru exec" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, fuzzy, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "Nu pot deschide fiºierul de intrare `%s'" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "nu pot executa fork" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "eroare aºteptând pentru %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s terminat de semnal %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "expresie invalidã" + +#: find/tree.c:99 +#, fuzzy, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "expresie invalidã; aþi folosit un operator binar cu nimic înaintea sa." + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, fuzzy, c-format +msgid "expected an expression after '%s'" +msgstr "predicat adiþional neaºteptat" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "expresie invalidã; aveþi prea multe ')'" + +#: find/tree.c:143 +#, fuzzy, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" +"expresie invalidã; aºteptam sã gãsesc o ')' pe undeva, dar nu am gãsit-o." + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "expresie invalidã; aveþi prea multe ')'" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" +"expresie invalidã; aºteptam sã gãsesc o ')' pe undeva, dar nu am gãsit-o." + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "hopa -- tip expresie invalid!" + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "hopa -- tip expresie invalid (%d)!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "cãile trebuie specificate înaintea expresiei" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "predicat invalid `%s'" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "predicat invalid `%s'" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "argument invalid `%s' pentru `%s'" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "argument lipsã pentru `%s'" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "expresie invalidã; aveþi prea multe ')'" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "predicat adiþional neaºteptat" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "predicat adiþional neaºteptat" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "hopa -- inserare implicitã invalidã de and!" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Folosire : %s [-H] [-L] [-P] [cale...] [expresie]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Folosire : %s [cale...] [expresie]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "avertisment: escape nerecunoscut `\\%c'" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"Variabila de mediu FIND_BLOCK_SIZE nu este suportatã, singurul lucru care " +"afecteazã dimensiunea blocului esre variabila de mediu POSIXLY_CORRECT" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "comandã prea lungã" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" +"nu pot potrivi un singur argument în limita dimensiunii listei de argumente" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "listã argumente prea lungã" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU findutils versiunea %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Folosire: %s [--version | --help]\n" +"sau %s cele_mai_comune_bigrame < listã-fisiere > baza-de-date-locate\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Raportaþi bug-uri la .\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "zile" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "argument invalid `%s' pentru `%s'" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "argument invalid `%s' pentru `%s'" + +#: locate/locate.c:472 +#, fuzzy, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" +"avertisment: calea bazei de date locate `%s' conþine în faþa un caracter " +"`:', care nu este un nume de bazã de date valid" + +#: locate/locate.c:607 +#, fuzzy, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "baza de date locate `%s' este coruptã sau invalidã" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "Dimensiune baza de date locate: %s octeþi\n" + +#: locate/locate.c:899 +#, fuzzy, c-format +msgid "Matching Filenames: %s " +msgstr "Nume fiºiere: %s " + +#: locate/locate.c:900 +#, fuzzy, c-format +msgid "All Filenames: %s " +msgstr "Nume fiºiere: %s " + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "cu o lungime cumulativã de %s octeþi" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" +"\n" +"\tdin care %s conþin spaþii albe, " + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" +"\n" +"\t%s conþin caractele linie-nouã, " + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" +"\n" +"\tºi %s conþin caractere cu bitul înalt setat.\n" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, fuzzy, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "Raport de compresie %4.2f%%\n" + +#: locate/locate.c:941 +#, fuzzy, c-format +msgid "Compression ratio is undefined\n" +msgstr "Raport de compresie %4.2f%%\n" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, fuzzy, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "baza de date locate `%s' este coruptã sau invalidã" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "Baza de date %s este în formatul %s.\n" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, fuzzy, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Folosire: %s [-d cale | --database=cale] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholepath] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--version] [--help]\n" +" pattern...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" +"avertisment: baza de date locate poate fi doar cititã de la stdin o datã." + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "avertisment: baza de date `%s' este mai veche de %d %s" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "predicat adiþional neaºteptat" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "eroare aºteptând pentru %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "mediul (environment) este prea larg pentru exec" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, fuzzy, c-format +msgid "Cannot open input file %s" +msgstr "Nu pot deschide fiºierul de intrare `%s'" + +#: xargs/xargs.c:688 +#, fuzzy, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "Variabile dvs. de mediu ocupã %ld octeþi\n" + +#: xargs/xargs.c:691 +#, fuzzy, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "limitele POSIX min ºi max pentru lungimea unui argument: %ld, %ld\n" + +#: xargs/xargs.c:694 +#, fuzzy, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "limitele POSIX min ºi max pentru lungimea unui argument: %ld, %ld\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "Lungimea mazimã a unei comenzi pe care o putem în fapt folosi: %ld\n" + +#: xargs/xargs.c:701 +#, fuzzy, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Dimensiune unui bufer pe care o folosim de fapt: %ld\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"ghilimele %s fãrã pereche; în mod implicit ghilimelele sunt speciale pentru " +"xargs, în afarã de cazul în care folosiþi opþiunea -0" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "dublu" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "singur" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "linie argumente prea lungã" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "eroare aºteptând pentru procese copil" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: a terminat cu starea 255; renunþ" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: oprit de semnalul %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: terminat de semnalul %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: numãr invalid pentru opþiunea -%c\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: valoarea pentru opþiunea -%c ar trebui sã fie >= %ld\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: valoarea pentru opþiunea -%c ar trebui sã fie < %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Folosire: %s [-0prtx] [-e[ºir-eof]] [-i[ºir-înlocuire]] [-l[max-linii]]\n" +" [-n arg-max] [-s max-caractere] [-P max-procese] [--null] [--eof[=ºir-" +"eof]]\n" +" [--replace[=ºir-înlocuire]] [--max-lines[=linii-max]] [--interactive]\n" +" [--max-chars=max-caractere] [--verbose] [--exit] [--max-procs=max-" +"proc]\n" +" [--max-args=max-arg] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [argumente-iniþiale]]\n" + +#~ msgid "block size" +#~ msgstr "dimensiune bloc" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "avertisment: predicatul -ipath nu mai este valid; vã rugã sã folosiþi -" +#~ "iwholename în locul lui." + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find versiunea %s\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU findutils versiunea %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate versiunea %s\n" + +#~ msgid "argument to --limit" +#~ msgstr "argument pentru --limit" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs versiunea %s\n" + +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "hopa -- tip expresie invalid în mark_stat!" + +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "hopa -- tip expresie invalid în mark_type!" + +#~ msgid "old" +#~ msgstr "vechi" + +#, fuzzy +#~ msgid "Reducing arg_max (%lu) to arg_size (%lu)\n" +#~ msgstr "Reducem arg_max (%ld) la arg_size (%ld)\n" + +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "acþiuni: -exec COMANDà ; -fprint FIªIER -fprint0 FIªIER\n" +#~ " -fprintf FIªIER FORMAT -fls FILE -ok COMANDà ; -print -print0\n" +#~ " -printf FORMAT -prune -ls -delete -quit\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "Listã Directive:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "Arbore Eval:\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Arbore Eval Optimizat:\n" + +#~ msgid "Optimized command line:\n" +#~ msgstr "Linie de comandã optimizatã:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "memorie virtualã epuizatã" + +#~ msgid "inserting %s\n" +#~ msgstr "inserez %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " tip: %s %s " + +#~ msgid "left:\n" +#~ msgstr "stânga:\n" + +#~ msgid "right:\n" +#~ msgstr "dreapta:\n" + +#~ msgid "[stat called here] " +#~ msgstr "[stat apelat aici] " + +#~ msgid "[type needed here] " +#~ msgstr "[tip necesar aici] " + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Arbore Eval Normalizat:\n" + +#~ msgid "error in %s: %s" +#~ msgstr "eroare în %s: %s" + +#~ msgid "" +#~ "warning: locate database path `%s' contains a trailing colon, which is " +#~ "not a valid database name" +#~ msgstr "" +#~ "avertisment: calea bazei de date locate `%s' conþine în coadã un caracter " +#~ "`:', care nu este un nume de bazã de date valid" diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000..408ae27 --- /dev/null +++ b/po/ru.po @@ -0,0 +1,1309 @@ +# ìÏËÁÌÉÚÁÃÉÑ findutils 4.1.5 +# Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +# Denis Perchine , 1997, 1998, 1999, 2000. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.1.7\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2002-01-07 18:43GMT+06\n" +"Last-Translator: Denis Perchine \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=KOI8-R\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 0.9.5\n" + +#: gnulib/lib/argmatch.c:133 +#, fuzzy, c-format +msgid "invalid argument %s for %s" +msgstr "ÎÅ×ÅÒÎÙÊ ÁÒÇÕÍÅÎÔ %s Õ `%s'" + +#: gnulib/lib/argmatch.c:134 +#, fuzzy, c-format +msgid "ambiguous argument %s for %s" +msgstr "ÎÅ×ÅÒÎÙÊ ÁÒÇÕÍÅÎÔ %s Õ `%s'" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "÷ÅÒÎÙÅ ÁÒÇÕÍÅÎÔÙ:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÓÉÓÔÅÍÎÁÑ ÏÛÉÂËÁ" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: ËÌÀÞ `%s' ÎÅÏÄÎÏÚÎÁÞÅÎ\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: ËÌÀÞ `--%s' ÉÓÐÏÌØÚÕÅÔÓÑ ÂÅÚ ÁÒÇÕÍÅÎÔÁ\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: ËÌÀÞ `%c%s' ÉÓÐÏÌØÚÕÅÔÓÑ ÂÅÚ ÁÒÇÕÍÅÎÔÁ\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: ËÌÀÞ `%s' ÔÒÅÂÕÅÔ ÁÒÇÕÍÅÎÔ\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ËÌÀÞ `--%s'\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ËÌÀÞ `%c%s'\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÙÊ ËÌÀÞ -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: ÎÅ×ÅÒÎÙÊ ËÌÀÞ -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: ËÌÀÞ ÔÒÅÂÕÅÔ ÁÒÇÕÍÅÎÔ -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: ËÌÀÞ `-W %s' ÎÅÏÄÎÏÚÎÁÞÅÎ\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: ËÌÀÞ `-W %s' ÉÓÐÏÌØÚÕÅÔÓÑ ÂÅÚ ÁÒÇÕÍÅÎÔÁ\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "ÎÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÔÅËÕÝÉÊ ËÁÔÁÌÏÇ" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "`" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "'" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "õÓÐÅÈ" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "îÅÔ ÓÏ×ÐÁÄÅÎÉÊ" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "îÅ×ÅÒÎÏÅ ÒÅÇÕÌÑÒÎÏÅ ×ÙÒÁÖÅÎÉÅ" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "îÅ×ÅÒÎÙÊ ÚÎÁË ÓÏÐÏÓÔÁ×ÌÅÎÉÑ" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "îÅ×ÅÒÎÏÅ ÉÍÑ ËÌÁÓÓÁ ÚÎÁËÏ×" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "úÁ×ÅÒÛÁÀÝÉÊ ÏÂÒÁÔÎÙÊ ÓÌÜÛ" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "îÅ×ÅÒÎÁÑ ÏÂÒÁÔÎÁÑ ÓÓÙÌËÁ" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "îÅÓÂÁÌÁÎÓÉÒÏ×ÁÎÎÁÑ [ ÉÌÉ [^" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "îÅÓÂÁÌÁÎÓÉÒÏ×ÁÎÎÁÑ ( ÉÌÉ \\(" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "îÅÓÂÁÌÁÎÓÉÒÏ×ÁÎÎÁÑ \\{" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "îÅ×ÅÒÎÏÅ ÓÏÄÅÒÖÉÍÏÅ \\{\\}" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "îÅ×ÅÒÎÙÊ ËÏÎÅà ÐÒÏÍÅÖÕÔËÁ" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "îÅ È×ÁÔÁÅÔ ÐÁÍÑÔÉ" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "îÅ×ÅÒÎÏÅ ÐÒÅÄÛÅÓÔ×ÕÀÝÅÅ ÒÅÇÕÌÑÒÎÏÅ ×ÙÒÁÖÅÎÉÅ" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "îÅÏÖÉÄÁÎÎÙÊ ËÏÎÅà ÒÅÇÕÌÑÒÎÏÇÏ ×ÙÒÁÖÅÎÉÑ" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "òÅÇÕÌÑÒÎÏÅ ×ÙÒÁÖÅÎÉÅ ÓÌÉÛËÏÍ ÂÏÌØÛÏÅ" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "îÅÓÂÁÌÁÎÓÉÒÏ×ÁÎÎÁÑ ) ÉÌÉ \\)" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "îÅÔ ÐÒÅÄÙÄÕÝÅÇÏ ÒÅÇÕÌÑÒÎÏÇÏ ×ÙÒÁÖÅÎÉÑ" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[yYÄä]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nNÎî]" + +#: gnulib/lib/xalloc-die.c:34 +#, fuzzy +msgid "memory exhausted" +msgstr "îÅ È×ÁÔÁÅÔ ÐÁÍÑÔÉ" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "ÎÅ×ÅÒÎÙÊ ÁÒÇÕÍÅÎÔ `%s' Õ `%s'" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "ÎÅ×ÅÒÎÙÊ ÁÒÇÕÍÅÎÔ `%s' Õ `%s'" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "ÓÐÉÓÏË ÁÒÇÕÍÅÎÔÏ× ÓÌÉÛËÏÍ ×ÅÌÉË" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "ÎÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÔÅËÕÝÉÊ ËÁÔÁÌÏÇ" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "ÎÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÔÅËÕÝÉÊ ËÁÔÁÌÏÇ" + +#: find/find.c:384 +#, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "" + +#: find/find.c:394 +#, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "" + +#: find/find.c:490 +#, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:527 +#, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +#, fuzzy +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"ÐÕÔØ ÐÏ ÕÍÏÌÞÁÎÉÀ: ÔÅËÕÝÉÊ ÐÏÄËÁÔÁÌÏÇ; ×ÙÒÁÖÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ: -print\n" +"×ÙÒÁÖÅÎÉÑ ÍÏÇÕÔ ÓÏÓÔÏÑÔØ ÉÚ:\n" +"ÏÐÅÒÁÔÏÒÏ× (× ÎÉÓÈÏÄÑÝÅÍ ÐÏÒÑÄËÅ; -and ÂÅÒÅÔÓÑ ÐÏ ÕÍÏÌÞÁÎÉÀ, ÅÓÌÉ ÎÅ ÄÁÎÏ " +"ÄÒÕÇÉÈ):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" + +#: find/parser.c:1064 +#, fuzzy +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"ÐÕÔØ ÐÏ ÕÍÏÌÞÁÎÉÀ: ÔÅËÕÝÉÊ ÐÏÄËÁÔÁÌÏÇ; ×ÙÒÁÖÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ: -print\n" +"×ÙÒÁÖÅÎÉÑ ÍÏÇÕÔ ÓÏÓÔÏÑÔØ ÉÚ:\n" +"ÏÐÅÒÁÔÏÒÏ× (× ÎÉÓÈÏÄÑÝÅÍ ÐÏÒÑÄËÅ; -and ÂÅÒÅÔÓÑ ÐÏ ÕÍÏÌÞÁÎÉÀ, ÅÓÌÉ ÎÅ ÄÁÎÏ " +"ÄÒÕÇÉÈ):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" + +#: find/parser.c:1073 +#, fuzzy +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -ipath PATTERN -iregex PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE\n" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -size N[bckw] -true -type [bcdpfls] -uid N -used N -user NAME\n" +" -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "" + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "ÎÅ×ÅÒÎÙÊ ÒÅÖÉÍ '%s'" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "ÏÔÓÕÔÓÔ×ÕÅÔ ÁÒÇÕÍÅÎÔ Õ -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "ÎÅ×ÅÒÎÙÊ ÔÉÐ '%c' ÄÌÑ -size" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "ÎÅ×ÅÒÎÙÊ ÁÒÇÕÍÅÎÔ `%s' Õ `%s'" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "ÎÅ×ÅÒÎÙÊ ÁÒÇÕÍÅÎÔ %s Õ `%s'" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅÒÁÓÐÏÚÎÁ×ÁÅÍÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ '\\%c'" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "ÐÒÅÄyÐÒÅÖÄÅÎÉÅ: ÎÅÒÁÓÐÏÚÎÁ×ÁÅÍÙÊ ÆÏÒÍÁÔ ÄÉÒÅËÔÉ×Ù '%%%c'" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "ÏËÒÕÖÅÎÉÅ ÓÌÉÛËÏÍ ×ÅÌÉËÏ ÄÌÑ ÉÓÐÏÌÎÅÎÉÑ" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "ÎÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÐÒÏÃÅÓÓ" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "ÏÛÉÂËÁ ÏÖÉÄÁÎÉÑ %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s ÐÒÅÒ×ÁÎ ÐÏ ÓÉÇÎÁÌÕ %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "ÎÅ×ÅÒÎÏÅ ×ÙÒÁÖÅÎÉÅ" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "" + +#: find/tree.c:121 +#, fuzzy +msgid "invalid expression; you have too many ')'" +msgstr "ÎÅ×ÅÒÎÏÅ ×ÙÒÁÖÅÎÉÅ" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "ÎÅ×ÅÒÎÏÅ ×ÙÒÁÖÅÎÉÅ" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "ÏÏÐÓ -- ÎÅ×ÅÒÎÙÊ ÔÉÐ ×ÙÒÁÖÅÎÉÑ!" + +#: find/tree.c:231 +#, fuzzy, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "ÏÏÐÓ -- ÎÅ×ÅÒÎÙÊ ÔÉÐ ×ÙÒÁÖÅÎÉÑ!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "ÐÕÔÉ ÄÏÌÖÎÙ ÂÙÔØ ÐÅÒÅÄ ×ÙÒÁÖÅÎÉÅÍ" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "ÎÅ×ÅÒÎÙÊ ÐÒÅÄÉËÁÔ `%s'" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "ÎÅ×ÅÒÎÙÊ ÐÒÅÄÉËÁÔ `%s'" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "ÎÅ×ÅÒÎÙÊ ÁÒÇÕÍÅÎÔ `%s' Õ `%s'" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "ÏÔÓÕÔÓÔ×ÕÅÔ ÁÒÇÕÍÅÎÔ Õ `%s'" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "ÎÅ×ÅÒÎÏÅ ×ÙÒÁÖÅÎÉÅ" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "ÎÅ×ÅÒÎÙÊ ÐÒÅÄÉËÁÔ `%s'" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "ÏÏÐÓ -- ÎÅ×ÅÒÎÁÑ ×ÓÔÁ×ËÁ ÐÏ ÕÍÏÌÞÁÎÉÀ ÏÐÅÒÁÔÏÒÁ 'é' (and)" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ÐÕÔØ...] [×ÙÒÁÖÅÎÉÅ]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ÐÕÔØ...] [×ÙÒÁÖÅÎÉÅ]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅÒÁÓÐÏÚÎÁ×ÁÅÍÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ '\\%c'" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "ËÏÍÁÎÄÁ ÓÌÉÛËÏÍ ×ÅÌÉËÁ" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "ÁÒÇÕÍÅÎÔ ÐÏ ÒÁÚÍÅÒÕ ×ÙÈÏÄÉÔ ÚÁ ÐÒÅÄÅÌÙ ÓÐÉÓËÁ ÁÒÇÕÍÅÎÔÏ×" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "ÓÐÉÓÏË ÁÒÇÕÍÅÎÔÏ× ÓÌÉÛËÏÍ ×ÅÌÉË" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU find ×ÅÒÓÉÉ %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, fuzzy, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"éÓÐÏÌØÚÏ×ÁÎÉÅ: %s most_common_bigrams < ÓÐÉÓÏË > ÚÁÛÉÆÒÏ×ÁÎÎÙÊ_ÓÐÉÓÏË\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +#, fuzzy +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"ðÏÓÙÌÁÊÔÅ ÏÔÞÅÔÙ Ï ÏÛÉÂËÁÈ ÎÁ ." + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "ÄÎÅÊ" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "ÎÅ×ÅÒÎÙÊ ÁÒÇÕÍÅÎÔ `%s' Õ `%s'" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "ÎÅ×ÅÒÎÙÊ ÁÒÇÕÍÅÎÔ `%s' Õ `%s'" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÂÁÚÁ ÄÁÎÎÙÈ '%s' ÕÓÔÁÒÅÌÁ ÂÏÌÅÅ ÞÅÍ ÎÁ %d %s" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "ÎÅ×ÅÒÎÙÊ ÐÒÅÄÉËÁÔ `%s'" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "ÏÛÉÂËÁ ÏÖÉÄÁÎÉÑ %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "ÏËÒÕÖÅÎÉÅ ÓÌÉÛËÏÍ ×ÅÌÉËÏ ÄÌÑ ÉÓÐÏÌÎÅÎÉÑ" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "Ä×ÏÊÎÁÑ" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "ÏÄÉÎÁÒÎÁÑ" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "ÓÔÒÏËÁ ÁÒÇÕÍÅÎÔÏ× ÓÌÉÛËÏÍ ×ÅÌÉËÁ" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "ÏÛÉÂËÁ ÏÖÉÄÁÎÉÑ ÄÏÞÅÒÎÅÇÏ ÐÒÏÃÅÓÓÁ" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: ÚÁ×ÅÒÛÅÎ ÓÏ ÓÔÁÔÕÓÏÍ 255; ÐÒÅÒÙ×ÁÀÓØ" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: ÏÓÔÁÎÏ×ÌÅÎ ÐÏ ÓÉÇÎÁÌÕ %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: ÚÁ×ÅÒÛÅÎ ÐÏ ÓÉÇÎÁÌÕ %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: ÎÅ×ÅÒÎÏÅ ÞÉÓÌÏ ÄÌÑ ÏÐÃÉÉ -%c\n" + +#: xargs/xargs.c:1274 +#, fuzzy, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: ÚÎÁÞÅÎÉÅ ÄÌÑ ÏÐÃÉÉ -%c ÄÏÌÖÎÏ ÂÙÔØ >= %ld\n" + +#: xargs/xargs.c:1288 +#, fuzzy, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: ÚÎÁÞÅÎÉÅ ÄÌÑ ÏÐÃÉÉ -%c ÄÏÌÖÎÏ ÂÙÔØ < %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [-0prtx] [-e[eof-str]] [-i[replace-str]] [-l[max-lines]]\n" +" [-n max-args] [-s max-chars] [-P max-procs] [--null] [--eof[=eof-" +"str]]\n" +" [--replace[=replace-str]] [--max-lines[=max-lines]] [--interactive]\n" +" [--max-chars=max-chars] [--verbose] [--exit] [--max-procs=max-procs]\n" +" [--max-args=max-args] [--no-run-if-empty] [--version] [--help]\n" +" [ËÏÍÁÎÄÁ [ÎÁÞÁÌØÎÙÅ-ÁÒÇÕÍÅÎÔÙ]]\n" + +#~ msgid "block size" +#~ msgstr "ÒÁÚÍÅÒ ÂÌÏËÁ" + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find ×ÅÒÓÉÉ %s\n" + +#, fuzzy +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU find ×ÅÒÓÉÉ %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate ×ÅÒÓÉÉ %s\n" + +#, fuzzy +#~ msgid "argument to --limit" +#~ msgstr "ÓÔÒÏËÁ ÁÒÇÕÍÅÎÔÏ× ÓÌÉÛËÏÍ ×ÅÌÉËÁ" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs ×ÅÒÓÉÉ %s\n" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "ÏÏÐÓ -- ÎÅ×ÅÒÎÙÊ ÔÉÐ ×ÙÒÁÖÅÎÉÑ!" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "ÏÏÐÓ -- ÎÅ×ÅÒÎÙÊ ÔÉÐ ×ÙÒÁÖÅÎÉÑ!" + +#, fuzzy +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "ÄÅÊÓÔ×ÉÑ: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE " +#~ "FORMAT\n" +#~ " -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "óÐÉÓÏË ÐÒÅÄÉËÁÔÏ×:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "äÅÒÅ×Ï ×ÙÞÉÓÌÅÎÉÊ:\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "ïÐÔÉÍÉÚÉÒÏ×ÁÎÎÏÅ ÄÅÒÅ×Ï ×ÙÞÉÓÌÅÎÉÊ:\n" + +#, fuzzy +#~ msgid "Optimized command line:\n" +#~ msgstr "ïÐÔÉÍÉÚÉÒÏ×ÁÎÎÏÅ ÄÅÒÅ×Ï ×ÙÞÉÓÌÅÎÉÊ:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "ÎÅ È×ÁÔÁÅÔ ×ÉÒÔÕÁÌØÎÏÊ ÐÁÍÑÔÉ" + +#~ msgid "inserting %s\n" +#~ msgstr "×ÓÔÁ×ÌÑÀ %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " ÔÉÐ: %s %s " + +#~ msgid "left:\n" +#~ msgstr "ÓÌÅ×Á:\n" + +#~ msgid "right:\n" +#~ msgstr "ÓÐÒÁ×Á:\n" + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "îÏÒÍÁÌÉÚÏ×ÁÎÎÏÅ äÅÒÅ×Ï:\n" + +#~ msgid "%s changed during execution of %s" +#~ msgstr "%s ÉÚÍÅÎÅÎ ×Ï ×ÒÅÍÑ ÉÓÐÏÌÎÅÎÉÑ %s" + +#~ msgid "%s/.. changed during execution of %s" +#~ msgstr "%s/.. ÉÚÍÅÎÅÎ ×Ï ×ÒÅÍÑ ÉÓÐÏÌÎÅÎÉÑ %s" + +#~ msgid "error in %s: %s" +#~ msgstr "ÏÛÉÂËÁ × %s: %s" + +#~ msgid "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "options (always true): -daystart -depth -follow --help\n" +#~ " -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev\n" +#~ "tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +#~ msgstr "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "ËÌÀÞÉ (×ÓÅÇÄÁ true): -daystart -depth -follow --help\n" +#~ " -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev\n" +#~ "tests (N ÍÏÖÅÔ ÂÙÔØ +N ÉÌÉ -N ÉÌÉ N): -amin N -anewer FILE -atime N -cmin " +#~ "N\n" + +#~ msgid "" +#~ "Usage: %s [-d path | --database=path] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] pattern...\n" +#~ msgstr "" +#~ "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [-d ÐÕÔØ] [--database=ÐÕÔØ] [-e | --existing] \n" +#~ " [-i | --ignore-case] [--version] [--help] ÍÁÓËÁ...\n" + +#~ msgid "unmatched %s quote" +#~ msgstr "îÅÓÂÁÌÁÎÓÉÒÏ×ÁÎÎÁÑ %s ËÁ×ÙÞËÁ" diff --git a/po/rw.po b/po/rw.po new file mode 100644 index 0000000..6fcefc3 --- /dev/null +++ b/po/rw.po @@ -0,0 +1,1337 @@ +# Kinyarwanda translations for findutils package. +# Copyright (C) 2005 Free Software Foundation, Inc. +# This file is distributed under the same license as the findutils package. +# Steve Murphy , 2005. +# Steve performed initial rough translation from compendium built from translations provided by the following translators: +# Philibert Ndandali , 2005. +# Viateur MUGENZI , 2005. +# Noëlla Mupole , 2005. +# Carole Karema , 2005. +# JEAN BAPTISTE NGENDAHAYO , 2005. +# Augustin KIBERWA , 2005. +# Donatien NSENGIYUMVA , 2005. +# Antoine Bigirimana , 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.2.6\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2005-04-04 10:55-0700\n" +"Last-Translator: Steven Michael Murphy \n" +"Language-Team: Kinyarwanda \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gnulib/lib/argmatch.c:133 +#, fuzzy, c-format +msgid "invalid argument %s for %s" +msgstr "Sibyo kugirango" + +#: gnulib/lib/argmatch.c:134 +#, fuzzy, c-format +msgid "ambiguous argument %s for %s" +msgstr "kugirango" + +#: gnulib/lib/argmatch.c:153 +#, fuzzy, c-format +msgid "Valid arguments are:" +msgstr "ingingo" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +#, fuzzy +msgid "Unknown system error" +msgstr "Sisitemu Ikosa" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, fuzzy, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s:Ihitamo ni" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, fuzzy, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s:Ihitamo Kwemerera" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, fuzzy, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s:Ihitamo Kwemerera" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, fuzzy, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s:Ihitamo" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, fuzzy, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s:Ihitamo" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, fuzzy, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s:Ihitamo" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, fuzzy, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s:Ihitamo" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, fuzzy, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s:Sibyo Ihitamo" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, fuzzy, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s:Ihitamo" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, fuzzy, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s:Ihitamo ni" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, fuzzy, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s:Ihitamo Kwemerera" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "Kubona KIGEZWEHO bushyinguro" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +# basctl/source\basicide\basidesh.src:RID_IMGBTN_REMOVEWATCH.text +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +#, fuzzy +msgid "`" +msgstr "`" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "'" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Ibyatunganye" + +#: gnulib/lib/regcomp.c:134 +#, fuzzy +msgid "No match" +msgstr "BIHUYE" + +#: gnulib/lib/regcomp.c:137 +#, fuzzy +msgid "Invalid regular expression" +msgstr "Ibisanzwe imvugo" + +#: gnulib/lib/regcomp.c:140 +#, fuzzy +msgid "Invalid collation character" +msgstr "Inyuguti" + +#: gnulib/lib/regcomp.c:143 +#, fuzzy +msgid "Invalid character class name" +msgstr "Inyuguti ishuri Izina:" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: gnulib/lib/regcomp.c:149 +#, fuzzy +msgid "Invalid back reference" +msgstr "Inyuma Indango" + +#: gnulib/lib/regcomp.c:152 +#, fuzzy +msgid "Unmatched [ or [^" +msgstr "Cyangwa" + +#: gnulib/lib/regcomp.c:155 +#, fuzzy +msgid "Unmatched ( or \\(" +msgstr "Cyangwa" + +#: gnulib/lib/regcomp.c:158 +#, fuzzy +msgid "Unmatched \\{" +msgstr "Cyangwa" + +#: gnulib/lib/regcomp.c:161 +#, fuzzy +msgid "Invalid content of \\{\\}" +msgstr "Ibikubiyemo Bya" + +#: gnulib/lib/regcomp.c:164 +#, fuzzy +msgid "Invalid range end" +msgstr "Urutonde Impera" + +#: gnulib/lib/regcomp.c:167 +#, fuzzy +msgid "Memory exhausted" +msgstr "Kitaboneka Ububiko" + +#: gnulib/lib/regcomp.c:170 +#, fuzzy +msgid "Invalid preceding regular expression" +msgstr "Ibisanzwe imvugo" + +#: gnulib/lib/regcomp.c:173 +#, fuzzy +msgid "Premature end of regular expression" +msgstr "Impera Bya Ibisanzwe imvugo" + +#: gnulib/lib/regcomp.c:176 +#, fuzzy +msgid "Regular expression too big" +msgstr "imvugo" + +#: gnulib/lib/regcomp.c:179 +#, fuzzy +msgid "Unmatched ) or \\)" +msgstr "Cyangwa" + +#: gnulib/lib/regcomp.c:680 +#, fuzzy +msgid "No previous regular expression" +msgstr "Ibanjirije Ibisanzwe imvugo" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "" + +#: gnulib/lib/xalloc-die.c:34 +#, fuzzy +msgid "memory exhausted" +msgstr "Kitaboneka Ububiko" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "Sibyo Kuri" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "Sibyo Kuri" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "Urutonde" + +#: find/find.c:200 find/ftsfind.c:730 +#, fuzzy +msgid "cannot get current directory" +msgstr "Kubona KIGEZWEHO bushyinguro" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "Kubona KIGEZWEHO bushyinguro" + +#: find/find.c:384 +#, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "" + +#: find/find.c:394 +#, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "" + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%sByahinduwe Bya ki/ bishaje APAREYE Umubare Gishya APAREYE Umubare Ubwoko " +"ni indango" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%sByahinduwe Bya ki/ bishaje Umubare Gishya Umubare Ubwoko ni indango" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "itazwi" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, fuzzy, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"Iburira i Ihitamo Nyuma a Ihitamo Amahitamo OYA Mbere Nka Nka Nyuma " +"Amahitamo Mbere Ikindi ingingo" + +#: find/parser.c:772 +#, fuzzy +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "Iburira i D Ihitamo ni Bitemewe. Gukoresha Ubujyakuzimu i ni a" + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +#, fuzzy +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"Mburabuzi Inzira ni i KIGEZWEHO bushyinguro Mburabuzi imvugo ni Gicurasi Bya " +"Mukoresha Na ni Oya Ibindi OYA a Na" + +#: find/parser.c:1064 +#, fuzzy +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"Mburabuzi Inzira ni i KIGEZWEHO bushyinguro Mburabuzi imvugo ni Gicurasi Bya " +"Mukoresha Na ni Oya Ibindi OYA a Na" + +#: find/parser.c:1068 +#, fuzzy +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +"o Cyangwa Amahitamo Buri gihe NIBYO Amahitamo Buri gihe NIBYO Mbere Ikindi " +"Ifashayobora Verisiyo Cyangwa Cyangwa" + +#: find/parser.c:1073 +#, fuzzy +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "-ubusa SIBYO Itsinda amahuza Izina:" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "-Inzira Ingano NIBYO Ubwoko UID Ukoresha:" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +#, fuzzy +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "org." + +#: find/parser.c:1143 +#, fuzzy +msgid "sanity check of the fnmatch() library function failed." +msgstr "Kugenzura... Bya i Isomero Umumaro Byanze" + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "Sibyo Ubwoko" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +#, fuzzy +msgid "invalid null argument to -size" +msgstr "Sibyo NTAGIHARI Kuri Ingano" + +#: find/parser.c:2052 +#, fuzzy, c-format +msgid "invalid -size type `%c'" +msgstr "Sibyo Ingano Ubwoko" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "Sibyo Kuri" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "Sibyo kugirango" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, fuzzy, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "Iburira" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, fuzzy, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "Iburira Imiterere" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "ni Binini kugirango" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, fuzzy, c-format +msgid "< %s ... %s > ? " +msgstr "<%s...%s>CYOSE" + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "" + +#: find/pred.c:1949 +#, fuzzy, c-format +msgid "error waiting for %s" +msgstr "Ikosa Tegereza kugirango" + +#: find/pred.c:1958 +#, fuzzy, c-format +msgid "%s terminated by signal %d" +msgstr "%sku" + +# sc/source\ui\src\namedlg.src:RID_SCDLG_NAMES.STR_INVALIDSYMBOL.text +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +#, fuzzy +msgid "invalid expression" +msgstr "Imvugo itariyo" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, fuzzy, c-format +msgid "expected an expression after '%s'" +msgstr "Birenga" + +# sc/source\ui\src\namedlg.src:RID_SCDLG_NAMES.STR_INVALIDSYMBOL.text +#: find/tree.c:121 +#, fuzzy +msgid "invalid expression; you have too many ')'" +msgstr "Imvugo itariyo" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +# sc/source\ui\src\namedlg.src:RID_SCDLG_NAMES.STR_INVALIDSYMBOL.text +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "Imvugo itariyo" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +#: find/tree.c:159 find/tree.c:788 +#, fuzzy +msgid "oops -- invalid expression type!" +msgstr "Sibyo imvugo Ubwoko" + +#: find/tree.c:231 +#, fuzzy, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "Sibyo imvugo Ubwoko" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "Inzira imvugo" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "Sibyo" + +#: find/tree.c:1257 +#, fuzzy, c-format +msgid "invalid predicate `%s'" +msgstr "Sibyo" + +#: find/tree.c:1262 +#, fuzzy, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "Sibyo Kuri" + +#: find/tree.c:1269 +#, fuzzy, c-format +msgid "missing argument to `%s'" +msgstr "Ibuze Kuri" + +# sc/source\ui\src\namedlg.src:RID_SCDLG_NAMES.STR_INVALIDSYMBOL.text +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "Imvugo itariyo" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "Birenga" + +#: find/tree.c:1351 +#, fuzzy +msgid "unexpected extra predicate" +msgstr "Birenga" + +#: find/tree.c:1467 +#, fuzzy +msgid "oops -- invalid default insertion of and!" +msgstr "Sibyo Mburabuzi Iyinjizamo Bya Na" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "H Inzira imvugo" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Inzira imvugo" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "Iburira" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +#, fuzzy +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "IMPINDURAGACIRO ni OYA i i Funga Ingano ni i IMPINDURAGACIRO" + +#: lib/buildcmd.c:196 +#, fuzzy +msgid "command too long" +msgstr "Komandi:" + +#: lib/buildcmd.c:288 +#, fuzzy +msgid "can not fit single argument within argument list size limit" +msgstr "OYA UMWE muri Urutonde Ingano" + +#: lib/buildcmd.c:293 +#, fuzzy +msgid "argument list too long" +msgstr "Urutonde" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "Verisiyo" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, fuzzy, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "Verisiyo Ifashayobora Cyangwa IDOSIYE Urutonde" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +#, fuzzy +msgid "" +"\n" +"Report bugs to .\n" +msgstr "org." + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "iminsi" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "Sibyo Kuri" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "Sibyo Kuri" + +#: locate/locate.c:472 +#, fuzzy, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" +"Iburira Ububikoshingiro Inzira Kirimo a Nyobora ni OYA a Byemewe " +"Ububikoshingiro Izina:" + +#: locate/locate.c:607 +#, fuzzy, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "Ububikoshingiro ni Cyangwa Sibyo" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, fuzzy, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "Ububikoshingiro ni Cyangwa Sibyo" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, fuzzy, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"D Inzira Ububikoshingiro Inzira E i Kwirengagiza L Verisiyo Ifashayobora " +"Ishusho" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "Iburira Ububikoshingiro ni Birenzeho ki/ bishaje" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "Birenga" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "Ikosa Tegereza kugirango" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +#, fuzzy +msgid "environment is too large for exec" +msgstr "ni Binini kugirango" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "" + +#: xargs/xargs.c:688 +#, fuzzy, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "Ibihinduka Hejuru" + +#: xargs/xargs.c:691 +#, fuzzy, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "Ntoya Na Nkuru Imbibi ku Uburebure" + +#: xargs/xargs.c:694 +#, fuzzy, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "Ntoya Na Nkuru Imbibi ku Uburebure" + +#: xargs/xargs.c:697 +#, fuzzy, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "Uburebure Bya Komandi: Twebwe Gukoresha" + +#: xargs/xargs.c:701 +#, fuzzy, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Bya Komandi: Twebwe ikoresha" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, fuzzy, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"Gushyiraho akugarizo ku Mburabuzi Bidasanzwe Kuri Gukoresha i 0 Ihitamo" + +# #-#-#-#-# officecfg.pot (PACKAGE VERSION) #-#-#-#-# +# officecfg/registry\schema\org\openoffice\Office\Common.xcs:....Font.UnderLine..2.text +# #-#-#-#-# officecfg.pot (PACKAGE VERSION) #-#-#-#-# +# officecfg/registry\schema\org\openoffice\Office\Common.xcs:....Font.Strikeout..2.text +#: xargs/xargs.c:842 xargs/xargs.c:935 +#, fuzzy +msgid "double" +msgstr "MAHARAKUBIRI" + +# #-#-#-#-# officecfg.pot (PACKAGE VERSION) #-#-#-#-# +# officecfg/registry\schema\org\openoffice\Office\Common.xcs:....Font.UnderLine..1.text +# #-#-#-#-# officecfg.pot (PACKAGE VERSION) #-#-#-#-# +# officecfg/registry\schema\org\openoffice\Office\Common.xcs:....Font.Strikeout..1.text +#: xargs/xargs.c:842 xargs/xargs.c:935 +#, fuzzy +msgid "single" +msgstr "UMWE" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +#, fuzzy +msgid "argument line too long" +msgstr "Umurongo" + +#: xargs/xargs.c:1194 +#, fuzzy +msgid "error waiting for child process" +msgstr "Ikosa Tegereza kugirango" + +#: xargs/xargs.c:1210 +#, fuzzy, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s:Na: Imimerere" + +#: xargs/xargs.c:1212 +#, fuzzy, c-format +msgid "%s: stopped by signal %d" +msgstr "%s:Kyahagariswe ku" + +#: xargs/xargs.c:1214 +#, fuzzy, c-format +msgid "%s: terminated by signal %d" +msgstr "%s:ku" + +#: xargs/xargs.c:1267 +#, fuzzy, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s:Sibyo Umubare kugirango" + +#: xargs/xargs.c:1274 +#, fuzzy, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s:Agaciro kugirango Ihitamo" + +#: xargs/xargs.c:1288 +#, fuzzy, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s:Agaciro kugirango Ihitamo" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"E i Gusimbura L KININI Imirongo N KININI S KININI KININI NTAGIHARI Gusimbura " +"Gusimbura KININI Imirongo KININI Imirongo Biganira KININI KININI Gusohoka " +"KININI KININI KININI KININI Oya Gukoresha NIBA ubusa Verisiyo Ifashayobora " +"Komandi: ingingo" + +#, fuzzy +#~ msgid "block size" +#~ msgstr "Funga Ingano" + +#, fuzzy +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "Iburira i ni Bitemewe. Gukoresha" + +#, fuzzy +#~ msgid "GNU find version %s\n" +#~ msgstr "Gushaka Verisiyo" + +#, fuzzy +#~ msgid "GNU findutils version %s\n" +#~ msgstr "Verisiyo" + +#, fuzzy +#~ msgid "GNU locate version %s\n" +#~ msgstr "Verisiyo" + +#, fuzzy +#~ msgid "argument to --limit" +#~ msgstr "Kuri" + +#, fuzzy +#~ msgid "GNU xargs version %s\n" +#~ msgstr "Verisiyo" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "Sibyo imvugo Ubwoko" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "Sibyo imvugo Ubwoko" + +#, fuzzy +#~ msgid "Reducing arg_max (%lu) to arg_size (%lu)\n" +#~ msgstr "Kuri" + +#, fuzzy +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "YEGO Gucapa LS" + +# #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-# +# #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-# +#, fuzzy +#~ msgid " type: %s %s " +#~ msgstr "Ubwoko" + +#, fuzzy +#~ msgid "left:\n" +#~ msgstr "Ibumoso:" + +#, fuzzy +#~ msgid "right:\n" +#~ msgstr "Iburyo:" + +#, fuzzy +#~ msgid "error in %s: %s" +#~ msgstr "Ikosa in" + +#, fuzzy +#~ msgid "" +#~ "warning: locate database path `%s' contains a trailing colon, which is " +#~ "not a valid database name" +#~ msgstr "" +#~ "Iburira Ububikoshingiro Inzira Kirimo a ni OYA a Byemewe Ububikoshingiro " +#~ "Izina:" diff --git a/po/sk.po b/po/sk.po new file mode 100644 index 0000000..0ad521b --- /dev/null +++ b/po/sk.po @@ -0,0 +1,1321 @@ +# findutils sk.po +# Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +# Marcel Telka , 2002, 2003, 2004, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.2.24\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2005-08-02 05:56+0200\n" +"Last-Translator: Marcel Telka \n" +"Language-Team: Slovak \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "neplatný parameter %s pre %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "nejednoznačný parameter %s pre %s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Platné parametre sú:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Neznáma systémova chyba" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: voľba `%s' je nejednoznačná\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: voľba `--%s' neumožňuje parameter\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: voľba `%c%s' neumožňuje parameter\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: voľba `%s' vyžaduje parameter\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: nerozpoznaná voľba `--%s'\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: nerozpoznaná voľba `%c%s'\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: nepovolená voľba -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: neplatná voľba -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: voľba vyžaduje parameter -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: voľba `-W %s' je nejednoznačná\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: voľba `-W %s' neumožňuje použiť parameter\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "nemôžem zistiť aktuálny adresár" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "`" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "'" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "" + +#: gnulib/lib/regcomp.c:137 +#, fuzzy +msgid "Invalid regular expression" +msgstr "neplatný výraz" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: gnulib/lib/regcomp.c:149 +#, fuzzy +msgid "Invalid back reference" +msgstr "neplatný výraz" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: gnulib/lib/regcomp.c:164 +#, fuzzy +msgid "Invalid range end" +msgstr "neplatný výraz" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "" + +#: gnulib/lib/regcomp.c:170 +#, fuzzy +msgid "Invalid preceding regular expression" +msgstr "neplatný výraz" + +#: gnulib/lib/regcomp.c:173 +#, fuzzy +msgid "Premature end of regular expression" +msgstr "neplatný výraz" + +#: gnulib/lib/regcomp.c:176 +#, fuzzy +msgid "Regular expression too big" +msgstr "neplatný výraz" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "" + +#: gnulib/lib/regcomp.c:680 +#, fuzzy +msgid "No previous regular expression" +msgstr "neplatný výraz" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[yYaAáÁ]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "neplatný parameter `%s' pre `%s'" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "neplatný parameter `%s' pre `%s'" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "riadok s parametrom je príliš dlhý" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "nemôžem zistiť aktuálny adresár" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "nemôžem zistiť aktuálny adresár" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "Upozornenie: súborový systém %s bol nedávno odpojený." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "Upozornenie: súborový systém %s bol nedávno pripojený." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s zmenený počas vykonávania %s (staré číslo zariadenia %ld, nové číslo " +"zariadenia %ld, typ súborového systému je %s) [odk %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s zmenený počas vykonávania %s (staré číslo i-uzla %ld, nové číslo i-uzla " +"%ld, typ súborového systému je %s) [odk %ld]" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, fuzzy, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" +"Symbolický odkaz `%s' je časťou slučky v hierarchii adresárov; už sme " +"navštívili adresár, na ktorý ukazuje." + +#: find/find.c:1104 +#, fuzzy, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" +"Zdetekovaná slučka na súborovom systéme; `%s' má rovnaké číslo zariadenia a " +"i-uzil ako adresár %d %s." + +#: find/find.c:1108 +#, fuzzy +msgid "level higher in the file system hierarchy" +msgstr "vyššia úroveň v hierarchii súborového systému" + +#: find/find.c:1109 +#, fuzzy +msgid "levels higher in the file system hierarchy" +msgstr "úrovne nad hierarchiou súborového systému" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "upozornenie: nenasledujem symbolický odkaz %s" + +#: find/find.c:1398 +#, fuzzy, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" +"UPOZORNENIE: Počet hardvérových odkazov je zlý pre %s: to môže byť chybou vo " +"vašom ovládači súborového systému. Automaticky zappnúť voľbu -noleaf pre " +"find. Predchádzajúce výsledky mohli zlyhať pri vkladaní adresárov, ktoré " +"mali byť prehľadané." + +#: find/fstype.c:250 +msgid "unknown" +msgstr "neznámy" + +#: find/ftsfind.c:298 +#, fuzzy, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" +"Zdetekovaná slučka na súborovom systéme; `%s' má rovnaké číslo zariadenia a " +"i-uzil ako adresár %d %s." + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"upozornenie: zadali ste voľbu %s po parametri %s, ktorý nemá voľby, ale " +"voľby nie sú pozičné (%s postihuje testy zadané predtým a tiež tie, ktoré sú " +"zadané potom). Prosím, zadajte voľby pred ostatnými parametrami.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"upozornenie: voľby -d je neodporúčaná; prosím použite namiesto nej -depth, " +"pretože táto spĺňa požiadavky POSIX." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"\n" +"implicitná cesta je aktuálny adresár; implicitný výraz je -print\n" +"výraz môže pozostávať z: operátorov, volieb, testov a akcií:\n" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"operátory (klesajúca priorita; -and je implicitný, ak nie je zadaný iný):\n" +" ( VÝRAZ ) ! VÝRAZ -not VÝRAZ VÝRAZ1 -a VÝRAZ2 VÝRAZ1 -and VÝRAZ2\n" +" VÝRAZ1 -o VÝRAZ2 VÝRAZ1 - or VÝRAZ2 VÝRAZ1 , VÝRAZ2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +"pozičné voľby (vždy pravda): -daystart -follow -regextype\n" +"\n" +"obyčajné voľby (vždy pravda, zadané pred ostatnými výrazmi):\n" +" -depth --help -maxdepth ÚROVNE -mindepth ÚROVNE -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +"testy (N môže byt +N alebo -N alebo N): -amin N -anewer SÚBOR -atime N -cmin " +"N\n" +" -cnewer SÚBOR -ctime N -empty -false -fstype TYP -gid N -group NÁZOV\n" +" -ilname VZOR -iname VZOR -inum N -iwholename VZOR -iregex VZOR\n" +" -links N -lname VZOR -mmin N -mtime N -name VZOR -newer SÚBOR" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path VZOR -perm [+-]MÓD -regex VZOR\n" +" -wholename VZOR -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user MENO -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" +"akcie: -delete -print0 -printf FORMÁT -fprintf SÚBOR FORMÁT -print \n" +" -fprint0 SÚBOR -fprint SÚBOR -ls -fls SÚBOR -prune -quit\n" +" -exec PRÍKAZ ; -exec PRÍKAZ {} + -ok PRÍKAZ ;\n" +" -execdir PRÍKAZ ; - execdir PRÍKAZ {} + -okdir PRÍKAZ ;\n" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"Chyby môžete oznamovať (a sledovať postup ich odstraňovania) pomocou " +"stránky\n" +"oznamovania chýb pre findutils na http://savannah.gnu.org/ (iba anglicky),\n" +"alebo, ak nemáte prístup k www, odoslaním elektronickej pošty na adresu\n" +" (iba anglicky).\n" +"Komentáre k slovenskému prekladu zasielajte na adresu ." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "kontrola správnosti knižničnej funkcie fnmatch() zlyhala." + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" +"upozornenie: Unixové názvy súborov väčšinou neobsahujú lomky (hoci názvy " +"ciest áno). To znamená, že '%s %s' bude pravdepodobne stále vyhodnotené ako " +"zlyhanie v tomto systéme. Viac použiteľným testom môže byť '-wholename', " +"alebo možno '-samefile'. Alebo, ak používate GNU grep, môžete použiť " +"'find ... -print0 | grep -FzZ %s'." + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, fuzzy, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "Nepodarilo sa otvoriť vstupný súbor `%s'" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "neplatný mód `%s'" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "neplatný prázdny parameter pre -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "neplatný typ -size `%c'" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "neplatný parameter `%s' pre `%s'" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "neplatný parameter %s pre %s" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "Povolené vlastnosti: " + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "upozornenie: nerozlíšený prepínací znak `\\%c'" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "upozornenie: nerozpoznaná formátovacia direktíva '%%%c'" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" +"Aktuálny adresár je súčasťou premennej prostredia PATH, čo nie je bezpečné v " +"kombinácii s akciou %s vyhľadania. Prosím, odstráňte aktuálny adresár z " +"vašej premennej $PATH (to znamená, že odstráňte \".\" alebo začiatočné alebo " +"koncové dvojbodky)" + +#: find/parser.c:2921 +#, fuzzy, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" +"Aktuálny adresár je súčasťou premennej prostredia PATH, čo nie je bezpečné v " +"kombinácii s akciou %s vyhľadania. Prosím, odstráňte aktuálny adresár z " +"vašej premennej $PATH (to znamená, že odstráňte \".\" alebo začiatočné alebo " +"koncové dvojbodky)" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" +"Nemôžete použiť {} vo vnútri názvu nástroja pre -execdir a -okdir, pretože " +"toto je potenciálny bezpečnostný problém." + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "Len jeden výskyt {} je podporovaný s -exec%s ... +" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "prostredie je príliš veľké na vykonanie" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, fuzzy, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "Nepodarilo sa otvoriť vstupný súbor `%s'" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "nemôžem vykonať fork" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "chyba pri čakaní na %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s ukončený signálom %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "neplatný výraz" + +#: find/tree.c:99 +#, fuzzy, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "neplatný výraz; použili ste binárny operátor bez operandu pred ním." + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, fuzzy, c-format +msgid "expected an expression after '%s'" +msgstr "neočakávaný predikát navyše" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "neplatný výraz; máte príliš veľa ')'" + +#: find/tree.c:143 +#, fuzzy, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "neplatný výraz; očakával som, že niekde nájdem ')', ale nenašiel som." + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "neplatný výraz; máte príliš veľa ')'" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "neplatný výraz; očakával som, že niekde nájdem ')', ale nenašiel som." + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "ach -- neplatný typ výrazu!" + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "ach -- neplatný typ výrazu (%d)!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "cesty musia byť pred výrazom" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "neplatný predikát `%s'" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "neplatný predikát `%s'" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "neplatný parameter `%s' pre `%s'" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "chýbajúci parameter pre `%s'" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "neplatný výraz; máte príliš veľa ')'" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "neočakávaný predikát navyše" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "neočakávaný predikát navyše" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "chyba -- neplatné implicitné vloženie logického súčinu (and)!" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Použitie: %s [-H] [-L] [-P] [cesta...] [výraz]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Použitie: %s [cesta...] [výraz]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "upozornenie: nerozlíšený prepínací znak `\\%c'" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"Premenná prostredia FIND_BLOCK_SIZE je nepodporovaná, jediná vec, ktorá " +"ovplyvňuje veľkosť bloku je premenná prostredia POSIXLY_CORRECT" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" + +#: lib/buildcmd.c:293 +#, fuzzy +msgid "argument list too long" +msgstr "riadok s parametrom je príliš dlhý" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU findutils verzia %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Použitie: %s [--version | --help]\n" +"alebo %s most_common_bigrams < zoznam-súborov > databáza-umiestnení\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Správy o chybách zasielajte na adresu (iba " +"anglicky).\n" +"Komentáre k slovenskému prekladu zasielajte na adresu .\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "dní" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "neplatný parameter `%s' pre `%s'" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "neplatný parameter `%s' pre `%s'" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, fuzzy, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "databáza pre locate `%s' je poškodená alebo neplatná" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "Veľkosť databázy vyhľadávania: %s bajtov\n" + +#: locate/locate.c:899 +#, fuzzy, c-format +msgid "Matching Filenames: %s " +msgstr "Názvy súborov: %s " + +#: locate/locate.c:900 +#, fuzzy, c-format +msgid "All Filenames: %s " +msgstr "Názvy súborov: %s " + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "s celkovou dĺžkou %s bajtov" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" +"\n" +"\tz ktorých %s obsahuje medzery, " + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" +"\n" +"\t%s obsahuje znak konca riadku, " + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" +"\n" +"\ta %s obsahujú znaky s nastaveným najvyšším bitom.\n" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, fuzzy, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "Kompresný pomer %4.2f%%\n" + +#: locate/locate.c:941 +#, fuzzy, c-format +msgid "Compression ratio is undefined\n" +msgstr "Kompresný pomer %4.2f%%\n" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, fuzzy, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "databáza pre locate `%s' je poškodená alebo neplatná" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "Databáza %s je vo formáte %s.\n" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, fuzzy, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Použitie: %s [-d cesta | --database=cesta] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex] [--regextype=TYP]\n" +" [--version] [--help]\n" +" vzor...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" +"upozornenie: databáza umiestnení môže byť načítaná len raz zo štandardného " +"vstupu." + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "upozornenie: databáza `%s' je staršia ako %d %s" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "neočakávaný predikát navyše" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "chyba pri čakaní na %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "prostredie je príliš veľké na vykonanie" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, fuzzy, c-format +msgid "Cannot open input file %s" +msgstr "Nepodarilo sa otvoriť vstupný súbor `%s'" + +#: xargs/xargs.c:688 +#, fuzzy, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "Vaše premenné prostredia zaberajú %ld byjtov\n" + +#: xargs/xargs.c:691 +#, fuzzy, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "Dolné a horné POSIX limity pre dĺžku parametrov: %ld, %ld\n" + +#: xargs/xargs.c:694 +#, fuzzy, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "Dolné a horné POSIX limity pre dĺžku parametrov: %ld, %ld\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "Maximálna dĺžka príkazu, ktorú môžeme momentálne používať: %ld\n" + +#: xargs/xargs.c:701 +#, fuzzy, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Veľkosť vyrovnávacej pamäte príkazov, ktorú práve používame: %ld\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"nezodpovedajúce úvodzovky %s; štandardne sú úvodzovky špeciálne pre xargs, " +"pokiaľ nepoužijete voľbu -0" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "dvojitý" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "jednoduchý" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "riadok s parametrom je príliš dlhý" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "chyba pri zápise do procesu potomka" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: ukončený so stavom 255; prerušujem" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: zastavený signálom %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: ukončený signálom %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: neplatné číslo pre voľbu -%c\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: hodnota pre voľbu -%c by mala byť >= %ld\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: hodnota pre voľbu -%c by mala byť < %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Použitie: %s [-0prtx] [-e[eof-reť]] [-i[nahr-reť]] [-l[max-riadkov]]\n" +" [-n max-param] [-s max-znakov] [-P max-proc] [--null] [--eof[=eof-" +"reť]]\n" +" [--replace[=nahr-reť]] [--max-lines[=max-riadkov]] [--interactive]\n" +" [--max-chars=max-znakov] [--verbose] [--exit] [--max-procs=max-proc]\n" +" [--max-args=max-param] [--no-run-if-empty] [--arg-file=súbor]\n" +" [--version] [--help] [príkaz [počiatočné-parametre]]\n" + +#~ msgid "block size" +#~ msgstr "veľkosť bloku" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "upozornenie: predikát -ipath neodporúčaný; použite namiesto neho -" +#~ "iwholename." + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find verzia %s\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU findutils verzia %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locale verzia %s\n" + +#~ msgid "argument to --limit" +#~ msgstr "parameter pre --limit" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs verzia %s\n" + +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "ach -- neplatný typ výrazu v mark_stat!" + +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "ach -- neplatný typ výrazu v mark_type!" + +#~ msgid "old" +#~ msgstr "staré" + +#, fuzzy +#~ msgid "Reducing arg_max (%lu) to arg_size (%lu)\n" +#~ msgstr "Zmenšenie arg_max (%ld) na arg_size (%ld)\n" diff --git a/po/sl.po b/po/sl.po new file mode 100644 index 0000000..2ebbadd --- /dev/null +++ b/po/sl.po @@ -0,0 +1,1394 @@ +# -*- mode:po; coding:utf-8; -*- Slovenian messages for findutils. +# Copyright (C) 1996, 2000, 2001, 2005, 2006 Free Software Foundation, Inc. +# Primož Peterlin , 2000, 2001, 2005, 2006. +# $Id: sl.po,v 1.62 2007/11/13 11:14:55 jay Exp $ +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.2.27\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2006-09-28 13:49+0200\n" +"Last-Translator: Primož Peterlin \n" +"Language-Team: Slovenian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "neveljaven argument %s za %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "dvoumen argument %s za %s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Veljavni argumenti so:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Neznana sistemska napaka" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: izbira »%s« je dvoumna\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: izbira »--%s« ne dovoljuje argumenta\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: izbira »%c%s« ne dovoljuje argumenta\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: izbira »%s« zahteva argument\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: neprepoznana izbira »--%s«\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: neprepoznana izbira »%c%s«\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: nedovoljena izbira -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: neveljavna izbira -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: izbira zahteva argument -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: izbira »-W %s« je dvoumna\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: izbira »-W %s« ne dovoljuje argumenta\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "trenutnega imenika ni mogoče ugotoviti" + +#: gnulib/lib/openat-die.c:46 +#, fuzzy +msgid "failed to return to initial working directory" +msgstr "vrnitev v začetni imenik ni možna" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "»" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "«" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Uspešno" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "Brez zadetkov" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Neveljavni regularni izraz" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Neveljavni znak za primerjavo" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Neveljavno ime razreda znakov" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Zaključna nagibnica" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Neveljavni povratni sklic" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Nezaključen [ ali [^" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Nezaključen ( ali \\(" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Nezaključen \\[" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Neveljavna vsebina \\[\\]" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Neveljavni konec obsega" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Pomnilnik porabljen" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Neveljavni predhodni regularni izraz" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Prezgodnji konec regularnega izraza" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Regularni izraz je prevelik" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Odvečni ) ali \\)" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "Prejšnji regularni izraz manjka" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[DdJj]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[Nn]" + +#: gnulib/lib/xalloc-die.c:34 +#, fuzzy +msgid "memory exhausted" +msgstr "Pomnilnik porabljen" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "neveljaven argument »%s« za »%s«" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "neveljaven argument »%s« za »%s«" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "seznam argumentov je predolg" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "trenutnega imenika ni mogoče ugotoviti" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "trenutnega imenika ni mogoče ugotoviti" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "Opozorilo: datotečni sistem %s je bil nedavno odklopljen." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "Opozorilo: datotečni sistem %s je bil nedavno priklopljen." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s se je spremenila med izvajanjem %s (stara številka enote %ld, nova " +"številka enote %ld, vrsta datotečnega sistema %s) [ref %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s se je spremenila med izvajanjem %s (stara številka inoda %ld, nova " +"številka inoda %ld, vrsta datotečnega sistema %s) [ref %ld]<" + +#: find/find.c:992 +#, fuzzy, c-format +msgid "Failed to safely change directory into %s" +msgstr "vrnitev v začetni imenik ni možna" + +#: find/find.c:1089 find/ftsfind.c:284 +#, fuzzy, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" +"Simbolna povezava »%s« je del zanke v drevesu imenikov; imenik, na katerega " +"kaže, smo že obiskali." + +#: find/find.c:1104 +#, fuzzy, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" +"Odkrita zanka v datotečnem sistemu: »%s« ima isto številko enote in inoda " +"kot imenik %d %s." + +#: find/find.c:1108 +#, fuzzy +msgid "level higher in the file system hierarchy" +msgstr "raven višje v datotečni hierarhiji" + +#: find/find.c:1109 +#, fuzzy +msgid "levels higher in the file system hierarchy" +msgstr "ravni višje v datotečni hierarhiji" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "opozorilo: simbolni povezavi %s ne sledimo" + +#: find/find.c:1398 +#, fuzzy, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" +"OPOZORILO: Število trdih povezav za %s je napačno: lahko gre za napako v " +"gonilniku za vaš datotečni sistem. Samodejno vklapljamo izbiro -noleaf. " +"Prejšnji rezultati so lahko bili napačni, ker v iskanje niso bili vključeni " +"vsi potrebni imeniki." + +#: find/fstype.c:250 +msgid "unknown" +msgstr "neznano" + +#: find/ftsfind.c:298 +#, fuzzy, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" +"Odkrita zanka v datotečnem sistemu: »%s« ima isto številko enote in inoda " +"kot imenik %d %s." + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"opozorilo: izbiro %s ste navedli za neizbirnim argumentom %s, vendar izbire " +"niso pozicijske (%s vpliva na teste, navadene pred njo in za njo). Prosimo, " +"navedite izbire pred drugimi argumenti.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"opozorilo: raba izbire -d je odsvetovana; zaradi skladnosti s POSIX namesto " +"nje priporočamo -depth." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"\n" +"privzeta pot je trenutni imenik; privzeti izraz je -print\n" +"izraz lahko sestavljajo: operatorji, izbire, testi in dejanja:\n" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"operatorji (po padajoči prednosti; če ni podano nič drugega, se privzame -" +"and):\n" +" ( IZRAZ ) ! IZRAZ -not IZRAZ IZRAZ1 -a IZRAZ2 IZRAZ1 -and -" +"IZRAZ2\n" +" IZRAZ1 -o IZRAZ2 IZRAZ1 -or IZRAZ2 IZRAZ1 , IZRAZ2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +"pozicijske izbire (vedno resnične): -daystart -follow -regextype\n" +"\n" +"navadne izbire (vedno resnične, navedene pred drugimi izrazi): \n" +" -depth --help -maxdepth RAVNI -mindepth RAVNI -mount -noleaf \n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +"testi (N can be +N or -N or N): -amin N -anewer DATOTEKA -atime N -cmin N\n" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +"testi (N je lakko +N, -N ali N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer DATOTEKA -ctime N -empty -false -fstype TIP -gid N -group IME\n" +" -ilname VZOREC -iname VZOREC -inum N -iwholename VZOREC -iregex " +"VZOREC\n" +" -links N -lname VZOREC -mmin N -mtime N -name VZOREC -newer DATOTEKA" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path VZOREC -perm [+-]ZAŠČITA -regex VZOREC\n" +" -wholename VZOREC -size N[bckw] -true -type [bcdpfls] -uid N \n" +" -used N -user IME -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" +"actions: -delete -print0 -printf FORMAT -fprintf DATOTEKA FORMAT -print\n" +" -fprint0 DATOTEKA -fprint DATOTEKA -ls -fls DATOTEKA -prune -quit\n" +" -exec UKAZ ; -exec UKAZ {} + -ok UKAZ ;\n" +" -execdir UKAZ ; -execdir UKAZ {} + -okdir UKAZ ;\n" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"Napake lahko sporočate (in sledite napredek pri popravljanju) na spletni " +"strani\n" +"za prijavljanje napak findutils, http://savannah.gnu.org/, ali, če nimate\n" +"dostopa do spleta, po elektronski pošti na naslov ." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "preizkus koherentnosti knjižnične funkcije fnmatch() ni uspel." + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" +"opozorilo: Imena datotek v Unixu navadno ne vsebujejo poševnic (poti pa " +"jih). To pomeni, da se bo »%s %s« na tem sistemu najverjetneje vedno " +"ovrednotilo kot neresnično. Testa »-wholename« ali »-samefile« bosta morda " +"uporabnejša. Če uporabljate GNU grep, lahko uporabite tudi »find ... -print0 " +"| grep -FzZ %s«." + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, fuzzy, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "Vhodne datoteke »%s« ni mogoče odpreti" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "neveljave način »%s«" + +#: find/parser.c:1807 +#, fuzzy, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" +"opozorilo: določili ste vzorec %s, ki je enakovreden 000. Pomen -perm /000 " +"se bo v prihodnjem spremenil, da bo skladen z -perm -000, zategadelj se za " +"zdaj ne ujema z nobeno datoteke, v prihodnje pa se bo z vsemi." + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "neveljaven prazni argument pri -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "neveljaven tip -size: »%c«" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "neveljaven argument »%s« za »%s«" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "neveljaven argument %s za %s" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "Omogočene možnosti: " + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "opozorilo: neprepoznano ubežno zaporedje »\\%c«" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "opozorilo: neprepoznano formatno določilo »%%%c»" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" +"Trenutni imenik je naveden v spremenljivki PATH, kar je nevarno v " +"kombinaciji z dejanjem %s programa find. Prosim, odstranite trenutni imenik " +"iz spremenljivke $PATH - odstranite ».« ter uvodna ali zaključna dvopičja." + +#: find/parser.c:2921 +#, fuzzy, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" +"Trenutni imenik je naveden v spremenljivki PATH, kar je nevarno v " +"kombinaciji z dejanjem %s programa find. Prosim, odstranite trenutni imenik " +"iz spremenljivke $PATH - odstranite ».« ter uvodna ali zaključna dvopičja." + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" +"Raba {} znotraj imena pomožnega programa za -execdir in -okdir zaradi " +"mogočih varnostnih problemov ni dovoljena." + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "Podprta je le enkratna navedba {} v kombinaciji z -exec%s ... +" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "okolje je preobsežno za klic exec" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, fuzzy, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "Vhodne datoteke »%s« ni mogoče odpreti" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +#, fuzzy +msgid "Failed to change directory" +msgstr "vrnitev v začetni imenik ni možna" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "vejitev ni mogoča" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "napaka pri čakanju na %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s zaključen s signalom %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "neveljaven izraz" + +#: find/tree.c:99 +#, fuzzy, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" +"neveljaven izraz: uporabili ste binarni operator, pred katerim ni argumenta" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, fuzzy, c-format +msgid "expected an expression after '%s'" +msgstr "nepričakovan dodatni predikat" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "neveljaven izraz; preveč zaklepajev »)«" + +#: find/tree.c:143 +#, fuzzy, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "neveljaven izraz: manjkajoč zaklepaj »)«." + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "neveljaven izraz; preveč zaklepajev »)«" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "neveljaven izraz: manjkajoč zaklepaj »)«." + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "opla -- neveljaven tip izraza!" + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "opla -- neveljaven tip izraza (%d)!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "poti morajo biti navedene pred izrazom" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "neveljaven predikat »%s«" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "neveljaven predikat »%s«" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "neveljaven argument »%s« za »%s«" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "manjkajoč argument k »%s«" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "neveljaven izraz; preveč zaklepajev »)«" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "nepričakovan dodatni predikat" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "nepričakovan dodatni predikat" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "opla - neveljavno privzeto vstavljanje logičnega ALI!" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Uporaba: %s [-H] [-L] [-P] [POT...] [IZRAZ]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Uporaba: %s [POT]... [IZRAZ]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "opozorilo: neprepoznano ubežno zaporedje »\\%c«" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"Spremenljivka FIND_BLOCK_SIZE ni podprta; na velikost bloka vpliva " +"spremenljivka POSIXLY_CORRECT" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "ukaz je predolg" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "posameznega argumenta ni možno umestiti v obseg seznama argumentov" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "seznam argumentov je predolg" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU findutils, različica %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Uporaba: %s [--version | --help]\n" +"ali %s najpogostejši_bigrami < seznam > kodiran_seznam\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Morebitne napake javite na naslov .\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "dni" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "neveljaven argument »%s« za »%s«" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "neveljaven argument »%s« za »%s«" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, fuzzy, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "datoteka locate »%s« je poškodovana ali neveljavna" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "Velikost datoteke locate: %s bajtov\n" + +#: locate/locate.c:899 +#, fuzzy, c-format +msgid "Matching Filenames: %s " +msgstr "Imena datotek: %s " + +#: locate/locate.c:900 +#, fuzzy, c-format +msgid "All Filenames: %s " +msgstr "Imena datotek: %s " + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "s skupno dolžino %s bajtov" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" +"\n" +" med katerimi %s vsebuje presledke, " + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" +"\n" +" %s vsebuje znake za novo vrstico, " + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" +"\n" +" in %s vsebuje znake s postavljenim osmim bitom.\n" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, fuzzy, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "Razmerje stisnjenja %4.2f%%\n" + +#: locate/locate.c:941 +#, fuzzy, c-format +msgid "Compression ratio is undefined\n" +msgstr "Razmerje stisnjenja %4.2f%%\n" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, fuzzy, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "datoteka locate »%s« je poškodovana ali neveljavna" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "Zbirka %s je v %s obliki.\n" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, fuzzy, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Uporaba: %s [-d path | --database=pot] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename]\n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TIP]\n" +" [--version] [--help] \n" +" vzorec...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" +"opozorilo: datoteko locate lahko preberemo s standardnega vhoda le enkrat." + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "opozorilo: zbirka »%s« je starejša od %d %s" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "nepričakovan dodatni predikat" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "napaka pri čakanju na %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "Neveljavno ubežno zaporedje %s v specifikaciji vhodnega razmejilnika." + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" +"Neveljavno ubežno zaporedje %s v specifikaciji vhodnega razmejilnika; " +"vrednost znaka ne sme presegati %lx." + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" +"Neveljavno ubežno zaporedje %s v specifikaciji vhodnega razmejilnika; " +"vrednost znaka ne sme presegati %lo." + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" +"Neveljavno ubežno zaporedje %s v specifikaciji vhodnega razmejilnika; " +"neprepoznan sledilni znak %s." + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" +"Neveljavno specifikacija vhodnega razmejilnika %s: razmejilnim mora biti " +"bodisi en sam znak, bodisi ubežno zaporedje, ki se začenja z \\." + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "okolje je preobsežno za klic exec" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, fuzzy, c-format +msgid "Cannot open input file %s" +msgstr "Vhodne datoteke »%s« ni mogoče odpreti" + +#: xargs/xargs.c:688 +#, fuzzy, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "Spremenljivke okolja zasedajo %ld bajtov\n" + +#: xargs/xargs.c:691 +#, fuzzy, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "Zgornja in spodnja meja POSIX za dolžino argumenta: %ld, %ld\n" + +#: xargs/xargs.c:694 +#, fuzzy, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "Zgornja in spodnja meja POSIX za dolžino argumenta: %ld, %ld\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "Največja dolžina ukaza, ki ga lahko uporabimo: %ld\n" + +#: xargs/xargs.c:701 +#, fuzzy, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Velikost ukaznega medpomnilnika, ki ga dejansko uporabljamo: %ld\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"%s narekovaj brez para; privzeto so narekovaji za xargs posebni, razen če " +"vključite izbiro -O" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "dvojni" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "enojni" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "vrstica z argumenti je predolga" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "napaka pri čakanju na proces naslednik" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: izhod s statusom 255; prekinjamo" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: ustavljeno s signalom %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: zaključeno s signalom %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: neveljavno število za izbiro -%c\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: vrednost za izbiro -%c mora biti >= %ld\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: vrednost za izbiro -%c mora biti < %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Uporaba: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=razmejilnik]\n" +" [-E eof-str] [-e[niz-eof]] [--eof[=niz-eof]]\n" +" [-L največ-vrstic] [-l[največ-vrstic]] [--max-lines[=največ-vrstic]]\n" +" [-I nadomestni-niz] [-i[nadomestni-niz]] [--replace[=nadomestni-" +"niz]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s največ-znakov] [--max-chars=največ-znakov]\n" +" [-P največ-procesov] [--max-procs=največ-procesov]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=datoteka]\n" +" [--version] [--help] [ukaz [začetni-argumenti]]\n" + +#~ msgid "block size" +#~ msgstr "velikost bloka" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "opozorilo: predikat -ipath odsvetujemo; priporočamo zamenjavo z -" +#~ "iwholename." + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find, različica %s\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU findutils, različica %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate, izdaja %s\n" + +#~ msgid "argument to --limit" +#~ msgstr "argument za --limit" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs, izdaja %s\n" + +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "opla -- neveljaven tip izraza v mark_stat!" + +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "opla -- neveljaven tip izraza v mark_type!" + +#~ msgid "old" +#~ msgstr "stari" + +#~ msgid "Reducing arg_max (%ld) to arg_size (%ld)\n" +#~ msgstr "Zmanjšujemo arg_max (%ld) na vrednost arg_size (%ld)\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "Seznam predikatov:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "Drevo ovrednotenj:\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Optimizirano drevo ovrednotenj:\n" + +#~ msgid "%s changed during execution of %s" +#~ msgstr "%s spremenjen med izvajanjem %s" + +#~ msgid "virtual memory exhausted" +#~ msgstr "virtualni pomnilnik porabljen" + +#~ msgid "%s/.. changed during execution of %s" +#~ msgstr "%s/.. spremenjen med izvajanjem %s" + +#~ msgid "error in %s: %s" +#~ msgstr "napaka v %s: %s" + +#~ msgid "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "options (always true): -daystart -depth -follow --help\n" +#~ " -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev\n" +#~ "tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +#~ msgstr "" +#~ " IZRAZ1 -o IZRAZ2 IZRAZ1 -or IZRAZ2 IZRAZ1 , IZRAZ2\n" +#~ "izbire (vedno vklapljamo): -daystart -depth -follow --help\n" +#~ " -maxdepth RAVNI -mindepth RAVNI -mount -noleaf --version -xdev\n" +#~ "testi (N can be +N or -N or N): -amin N -anewer DATOTEKA -atime N -cmin " +#~ "N\n" + +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls\n" +#~ msgstr "" +#~ "dejanja: -exec UKAZ ; -fprint DATOTEKA -fprint0 DATOTEKA -fprintf " +#~ "DATOTEKA FORMAT\n" +#~ " -ok UKAZ ; -print -print0 -printf FORMAT -prune -ls\n" + +#~ msgid "inserting %s\n" +#~ msgstr "vrivamo %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " tip: %s %s " + +#~ msgid "left:\n" +#~ msgstr "levo:\n" + +#~ msgid "right:\n" +#~ msgstr "desno:\n" + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Normalizirano drevo ovrednotenj:\n" + +#~ msgid "" +#~ "Usage: %s [-d path | --database=path] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] pattern...\n" +#~ msgstr "" +#~ "Uporaba: %s [-d path | --database=pot] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] vzorec...\n" + +#~ msgid "unmatched %s quote" +#~ msgstr "%s narekovaj brez para" + +#~ msgid "cannot open current directory" +#~ msgstr "trenutnega imenika ni možno odpreti" diff --git a/po/sr.po b/po/sr.po new file mode 100644 index 0000000..ad894b0 --- /dev/null +++ b/po/sr.po @@ -0,0 +1,1338 @@ +# Serbian translation of findutils +# Copyright (C) 2003 Free Software Foundation, Inc. +# Danilo Segan , 2003. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.2.6\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2004-11-24 14:16+0100\n" +"Last-Translator: Danilo Segan \n" +"Language-Team: Serbian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "неисправан аргумент %s за %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "неједнозначан аргумент %s за %s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Допуштени аргументи су:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Непозната системска грешка" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: опција „%s“ је неједнозначна\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: опција „--%s“ не дозвољава аргумент\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: опција „%c%s“ не дозвољава аргумент\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: опција „%s“ захтева аргумент\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: непозната опција „--%s“\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: непозната опција „%c%s“\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: неисправна опција — %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: недозвољена опција — %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: опција захтева аргумент — %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: опција „-W %s“ је неједнозначна\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: опција „-W %s“ не дозвољава аргумент\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "не могу да сазнам текући директоријум" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "„" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "“" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Успех" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "Нема поклапања" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Неисправан регуларни израз" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Неисправни знак за ређање" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Неисправно име класе знака" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Пратећа обрнута коса црта" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Неисправно позивање" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Неупарени [ или [^" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Неупарени ( или \\(" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Неупарени \\{" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Неисправан садржај \\{\\}" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Неисправан крај опсега" + +# исцрпљена? ;-) +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Меморија истрошена" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Неисправан претходни регуларни израз" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Превремен крај регуларног израза" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Регуларни израз превелик" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Неупарени ) или \\)" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "Нема претходног регуларног израза" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[yYдДdD]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nNнН]" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "меморија истрошена" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "неисправан аргумент „%s“ за „%s“" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "неисправан аргумент „%s“ за „%s“" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "списак аргумената предугачак" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "не могу да сазнам текући директоријум" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "не могу да сазнам текући директоријум" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "Систем датотека %s је недавно искључен." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "Систем датотека %s је недавно прикључен." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s је измењен при извршавању %s (стари број уређаја %ld, нови број %ld, " +"врста система датотека је %s) [реф %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s је измењен при извршавању %s (стари број чвора %ld, нови број %ld, " +"врста система датотека је %s) [реф %ld]" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "непознато" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"упозорење: навели сте опцију %s након аргумента %s који није опција, а " +"опције не зависе од положаја (%s утиче на провере наведене пре њега као и " +"после њега). Наведите опције пре осталих аргумената.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"упозорење: опција -d је застарела; уместо ње користите -depth, пошто је ова " +"друга у сагласности са POSIX-ом." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +#, fuzzy +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"подразумевана путања је текући директоријум; подразумевани израз је -print\n" +"израз се може састојати од:\n" +"оператора (према опадајућем првенству; -and је имплицитно када није дат неки " +"други):\n" +" ( ИЗРАЗ ) ! ИЗРАЗ -not ИЗРАЗ ИЗРАЗ1 -a ИЗРАЗ2 ИЗРАЗ1 -and ИЗРАЗ2" + +#: find/parser.c:1064 +#, fuzzy +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"подразумевана путања је текући директоријум; подразумевани израз је -print\n" +"израз се може састојати од:\n" +"оператора (према опадајућем првенству; -and је имплицитно када није дат неки " +"други):\n" +" ( ИЗРАЗ ) ! ИЗРАЗ -not ИЗРАЗ ИЗРАЗ1 -a ИЗРАЗ2 ИЗРАЗ1 -and ИЗРАЗ2" + +#: find/parser.c:1068 +#, fuzzy +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +" ИЗРАЗ1 -o ИЗРАЗ2 ИЗРАЗ1 -or ИЗРАЗ2 ИЗРАЗ1 , ИЗРАЗ2\n" +"опције (увек тачне): -daystart -depth -follow --help\n" +" -maxdepth НИВОА -mindepth НИВОА -mount -noleaf --version -xdev\n" +"провере (N може бити +N, -N или N): -amin N -anewer ДАТОТЕКА -atime N -cmin N" + +#: find/parser.c:1073 +#, fuzzy +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +" -cnewer ДАТОТЕКА -ctime N -empty -false -fstype ВРСТА -gid N -group " +"ИМЕ\n" +" -ilname ШАБЛОН -iname ШАБЛОН -inum N -iwholename ШАБЛОН -iregex " +"ШАБЛОН\n" +" -links N -lname ШАБЛОН -mmin N -mtime N -name ШАБЛОН -newer ДАТОТЕКА" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path ШАБЛОН -perm [+-]МОД -regex ШАБЛОН\n" +" -wholename ШАБЛОН -size N[bckwMG] -true -type [bcdpfls] -uid N\n" +" -used N -user ИМЕ -xtype [bcdpfls]" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"Пријавите (и пратите напредак у исправљању) грешке путем стране за пријаву\n" +"findutils грешака на http://savannah.gnu.org/ или, ако немате приступ вебу,\n" +"слањем е-писма на ." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "провера разумности функције fnmatch() библиотеке неуспешна." + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "неисправан режим „%s“" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "неисправан нула-аргумент за -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "неисправна врста „%c“ за -size" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "неисправан аргумент „%s“ за „%s“" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "неисправан аргумент %s за %s" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "упозорење: непознато истицање „\\%c“" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "упозорење: непозната директива форматирања „%%%c“" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "окружење је превелико за извршење" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "не могу да расцепим" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "грешка при чекању %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s окончан сигналом %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "неисправан израз" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, fuzzy, c-format +msgid "expected an expression after '%s'" +msgstr "неочекивани допунски предикат" + +#: find/tree.c:121 +#, fuzzy +msgid "invalid expression; you have too many ')'" +msgstr "неисправан израз" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "неисправан израз" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "упс — неисправна врста израза!" + +#: find/tree.c:231 +#, fuzzy, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "упс — неисправна врста израза!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "путање морају претходити изразу" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "неисправан предикат „%s“" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "неисправан предикат „%s“" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "неисправан аргумент „%s“ за „%s“" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "недостаје аргумент за „%s“" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "неисправан израз" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "неочекивани допунски предикат" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "неочекивани допунски предикат" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "упс — неисправно подразумевано уметање „и“!" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Употреба: %s [-H] [-L] [-P] [путања...] [израз]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Употреба: %s [путања...] [израз]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "упозорење: непознато истицање „\\%c“" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"Променљива окружења FIND_BLOCK_SIZE није подржана, једина ствар која утиче " +"на величину блока је променљива окружења POSIXLY_CORRECT" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "наредба предугачка" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" +"не могу да углавим један аргумент у ограничење величине списка аргумената" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "списак аргумената предугачак" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "ГНУ findutils издање %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Употреба: %s [--version | --help]\n" +"или %s најчешћи_биграми < списак-датотека > locate-база\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Пријавите грешке на .\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +# bug: plural-forms +#: locate/locate.c:150 +msgid "days" +msgstr "дана" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "неисправан аргумент „%s“ за „%s“" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "неисправан аргумент „%s“ за „%s“" + +#: locate/locate.c:472 +#, fuzzy, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" +"упозорење: путања locate базе „%s“ садржи водећу двотачку, што није исправно " +"име базе" + +#: locate/locate.c:607 +#, fuzzy, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "locate база „%s“ је покварена или неисправна" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, fuzzy, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "locate база „%s“ је покварена или неисправна" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, fuzzy, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Употреба: %s [-d путања | --database=путања] [-e | --existing]\n" +" [-i | --ignore-case] [--wholepath] [--basename] [--limit=N | -l N]\n" +" [--version] [--help] шаблон...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +# bug: plural-forms +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "упозорење: база „%s“ је стара више од %d %s" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "неочекивани допунски предикат" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "грешка при чекању %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "окружење је превелико за извршење" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "" + +# bug: plural-forms +#: xargs/xargs.c:688 +#, fuzzy, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "Ваше променљиве окружења заузимају %ld бајтова\n" + +#: xargs/xargs.c:691 +#, fuzzy, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "Горње и доње POSIX границе за дужину аргумента: %ld, %ld\n" + +#: xargs/xargs.c:694 +#, fuzzy, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "Горње и доње POSIX границе за дужину аргумента: %ld, %ld\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "Највећа дужина наредбе коју заправо можемо користити: %ld\n" + +#: xargs/xargs.c:701 +#, fuzzy, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Величина бафера наредби који заправо користимо: %ld\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"неупарен наводник %s; уобичајено су наводници нарочити за xargs осим ако " +"користите опцију -0" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "двоструки" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "једноструки" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "ред аргумената предугачак" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "грешка при чекању на подређени процес" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: завршио са стањем 255; обустављам" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: заустављен сигналом %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: окончан сигналом %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: неисправан број за опцију -%c\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: вредност за опцију -%c мора бити >= %ld\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: вредност за опцију -%c мора бити < %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Употреба: %s [-0prtx] [-e[ниска-краја]] [-i[ниска-замене]] [-l[макс-" +"редова]]\n" +" [-n макс-арг] [-s макс-знакова] [-P макс-проц] [--null] \n" +" [--eof[=ниска-краја]] [--replace[=ниска-замене]] \n" +" [--max-lines[=макс-редова]] [--interactive] [--max-chars=макс-" +"знакова] \n" +" [--verbose] [--exit] [--max-procs=макс-проц] [--max-args=макс-арг] \n" +" [--no-run-if-empty] [--version] [--help] [command [почетни-" +"аргументи]]\n" + +#~ msgid "block size" +#~ msgstr "величина блока" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "упозорење: предикат -ipath је застарео; уместо њега користите -iwholename." + +#~ msgid "GNU find version %s\n" +#~ msgstr "ГНУ find издање %s\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "ГНУ findutils издање %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "ГНУ locate издање %s\n" + +#~ msgid "argument to --limit" +#~ msgstr "аргумент за --limit" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "ГНУ xargs издање %s\n" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "упс — неисправна врста израза!" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "упс — неисправна врста израза!" + +#, fuzzy +#~ msgid "Reducing arg_max (%lu) to arg_size (%lu)\n" +#~ msgstr "Умањујем arg_max (%ld) на arg_size (%ld)\n" + +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "акције: -exec НАРЕДБА ; -fprint ДАТОТЕКА -fprint0 ДАТОТЕКА \n" +#~ " -fprintf ДАТОТЕКА ФОРМАТ -ok НАРЕДБА ; -print -print0 -printf " +#~ "ФОРМАТ \n" +#~ " -prune -ls -delete -quit\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "Списак предиката:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "Стабло вредновања:\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Оптимизовано стабло вредновања:\n" + +#, fuzzy +#~ msgid "Optimized command line:\n" +#~ msgstr "Оптимизовано стабло вредновања:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "виртуелна меморија истрошена" + +#~ msgid "inserting %s\n" +#~ msgstr "умећем %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " врста: %s %s " + +#~ msgid "left:\n" +#~ msgstr "лево:\n" + +#~ msgid "right:\n" +#~ msgstr "десно:\n" + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Нормализовано стабло вредновања:\n" + +#~ msgid "error in %s: %s" +#~ msgstr "грешка у %s: %s" + +#~ msgid "" +#~ "warning: locate database path `%s' contains a trailing colon, which is " +#~ "not a valid database name" +#~ msgstr "" +#~ "упозорење: путања locate базе „%s“ садржи завршну двотачку, што није " +#~ "исправно име базе" + +#~ msgid "%s changed during execution of %s" +#~ msgstr "%s измењен приликом извршавања %s" + +#~ msgid "%s/.. changed during execution of %s" +#~ msgstr "%s/.. измењен приликом извршавања %s" + +#~ msgid "unmatched %s quote" +#~ msgstr "неупарени %s наводник" diff --git a/po/sv.po b/po/sv.po new file mode 100644 index 0000000..7b973e8 --- /dev/null +++ b/po/sv.po @@ -0,0 +1,1463 @@ +# Swedish messages for findutils. +# Copyright (C) 1996, 2001, 2004, 2006, 2007 Free Software Foundation, Inc. +# Daniel Nylander , 2006, 2007. +# Johan Linde , 1996. +# Christian Rose , 2001, 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.3.7\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2007-06-24 22:32+0200\n" +"Last-Translator: Daniel Nylander \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "ogiltigt argument %s för %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "tvetydigt argument %s för %s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Giltiga argument är:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "skrivfel" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Okänt systemfel" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: flaggan \"%s\" är tvetydig\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: flaggan \"--%s\" tar inget argument\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: flaggan \"%c%s\" tar inget argument\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: flaggan \"%s\" kräver ett argument\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: okänd flagga \"--%s\"\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: okänd flagga \"%c%s\"\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: otillåten flagga -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: ogiltig flagga -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: flaggan kräver ett argument -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: flaggan \"-W %s\" är tvetydig\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: flaggan \"-W %s\" tillåter inget argument\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "kan inte få tag i aktuell katalog" + +#: gnulib/lib/openat-die.c:46 +#, fuzzy +msgid "failed to return to initial working directory" +msgstr "Misslyckades med att byta katalog" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "\"" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "\"" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "Lyckades" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "Ingen träff" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Ogiltigt reguljärt uttryck" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Ogiltigt sorteringstecken" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Ogiltigt namn på teckenklass" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Eftersläpande omvänt snedstreck" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Ogiltig bakåtreferens" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Omaka [ eller [^" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Omaka ( eller \\(" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Omaka \\{" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Ogiltigt innehåll i \\{\\}" + +#: gnulib/lib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Ogiltigt slut på intervall" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Minnet slut" + +#: gnulib/lib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Ogiltigt föregående reguljärt uttryck" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "För tidigt slut på reguljärt uttryck" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Reguljärt uttryck är för stort" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Omaka ) eller \\)" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "Inget föregående reguljärt uttryck" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[jJyY]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "minnet slut" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "ogiltigt argument \"%s\" till \"%s\"" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "ogiltigt argument \"%s\" till \"%s\"" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "argumentlistan är för lång" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "kan inte få tag i aktuell katalog" + +#: find/find.c:204 +msgid "cannot stat current directory" +msgstr "kan inte läsa av aktuell katalog" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "Varning: filsystemet %s har nyligen avmonterats." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "Varning: filsystemet %s har nyligen monterats." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s ändrades under exekvering av %s (gammalt enhetsnummer %ld, nytt " +"enhetsnummer %ld, filsystemstypen är %s) [ref %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s ändrades under exekvering av %s (gammalt inodsnummer %ld, nytt " +"inodsnummer %ld, filsystemstypen är %s) [ref %ld]" + +#: find/find.c:992 +#, fuzzy, c-format +msgid "Failed to safely change directory into %s" +msgstr "Misslyckades med att byta katalog" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" +"Symboliska länken %s är en del av en slinga i kataloghierarkin; vi har redan " +"besökt katalogen till vilken den pekar." + +# Osäker på %d %s +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" +"Filsystemsslinga upptäcktes; %s har samma enhetsnummer och inod som en " +"katalog vilken är %d %s." + +#: find/find.c:1108 +#, fuzzy +msgid "level higher in the file system hierarchy" +msgstr "nivå högre i filsystemshierarkin" + +#: find/find.c:1109 +#, fuzzy +msgid "levels higher in the file system hierarchy" +msgstr "nivåer högre i filsystemshierarkin" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "varning: följer inte den symboliska länken %s" + +#: find/find.c:1398 +#, fuzzy, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" +"VARNING: Antalet hårda länkar är fel för %s (såg endast st_nlink=%d men vi " +"har redan sett %d underkataloger): detta kan vara ett fel i din " +"filsystemdrivrutin. Slår automatiskt på alternativet -noleaf i find. " +"Tidigare resultat kan har misslyckats att inkludera kataloger som skulle ha " +"sökts igenom." + +#: find/fstype.c:250 +msgid "unknown" +msgstr "okänd" + +# Osäker på %d %s +#: find/ftsfind.c:298 +#, fuzzy, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" +"Filsystemsslinga upptäcktes; %s har samma enhetsnummer och inod som en " +"katalog vilken är %d %s." + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "Varning: filen %s verkar ha läget 0000" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"varning: du har angivit flaggan %s efter argumentet %s som inte är en " +"flagga, men flaggor beror inte på position (%s påverkar test som är angivna " +"före den, liksom de som är angivna efter den). Ange flaggor före andra " +"argument.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"varning: flaggan -d är föråldrad; använd -depth istället, eftersom den " +"senare stöds enligt POSIX." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" +"%s är inte namnet på en befintlig grupp och det ser inte ut som ett " +"numeriskt grupp-id därför att det har det oväntade ändelsen %s" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "%s är inte namnet på en befintlig grupp" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "argumentet till -group är tomt, men bör vara ett gruppnamn" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"\n" +"standardsökväg är aktuell katalog; standarduttryck är -print\n" +"uttryck kan bestå av: operatorer, flaggor, tester och åtgärder:\n" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"operatorer (avtagande prioritetsordning; -and underförstås när inga andra\n" +"anges):\n" +" ( UTTR ) ! UTTR -not UTTR UTTR1 -a UTTR2 UTTR1 -and UTTR2\n" +" UTTR1 -o UTTR2 UTTR1 -or UTTR2 UTTR1 , UTTR2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +"positionsberoende flaggor (alltid sanna): -daystart -follow -regextype\n" +"\n" +"normala flaggor (alltid sanna, anges före andra uttryck):\n" +" -depth --help -maxdepth NIVÅER -mindepth NIVÅER -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +"tests (N kan vara +N, -N eller N): -amin N -anewer FIL -atime N -cmin N\n" +" -cnewer FIL -ctime N -empty -false -fstype TYP -gid N -group NAMN\n" +" -ilname MÖNSTER -iname MÖNSTER -inum N -iwholename MÖNSTER -iregex " +"MÖNSTER\n" +" -links N -lname MÖNSTER -mmin N -mtime N -name MÖNSTER -newer FIL" + +#: find/parser.c:1078 +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path MÖNSTER -perm [+-]LÄGE -regex MÖNSTER\n" +" -readable -writable -executable\n" +" -wholename MÖNSTER -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAMN -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" +"åtgärder: -delete -print0 -printf FORMAT -fprintf FIL FORMAT -print \n" +" -fprint0 FIL -fprint FIL -ls -fls FIL -prune -quit\n" +" -exec KOMMANDO ; -exec KOMMANDO {} + -ok KOMMANDO ;\n" +" -execdir KOMMANDO ; -execdir KOMMANDO {} + -okdir KOMMANDO ;\n" + +# Lade till att man bör skriva felrapporten på engelska. +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"Rapportera (och följ rättningen av) fel genom felrapporteringssidan för\n" +"findutils på http://savannah.gnu.org/ eller, om du inte har tillgång till\n" +"webben, genom att skicka e-post till . Skriv\n" +"felrapporter på engelska om möjligt.\n" +"Skicka synpunkter på översättningen till sv@li.org." + +# Osäker... hur översätta "sanity check"? +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "funktionskontroll av biblioteksfunktionen fnmatch() misslyckades." + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" +"varning: Unix-filnamn innehåller normalt sett inte snedstreck (även om " +"sökvägar gör det). Det betyder att \"%s %s\" antagligen kommer alltid att " +"bli falsk på detta system. Du kanske tycker testet \"-wholename\" är " +"användbart, eller kanske \"-samefile\". Alternativt, om du använder GNU " +"grep, kunde du använda \"'find ... -print0 | grep -FzZ %s\"." + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "Förväntade ett positivt decimalt heltalsargument till %s, men fick %s" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" +"Det här systemet tillhandahåller inte ett sätt att hitta födelsetiden för en " +"fil." + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" +"Jag kan inte lista ut om jag ska tolka %s som ett datum eller klockslag" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "Kan inte läsa av födelsetid för filen %s" + +#: find/parser.c:1788 +#, c-format +msgid "invalid mode %s" +msgstr "ogiltigt läge %s" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" +"varning: du måste ange ett lägesmönster %s (som är likvärdigt med /000). " +"Betydelsen av -perm /000 kommer har nu ändrats för att överensstämma med -" +"perm 000; alltså, det brukade inte matcha några fil men nu matchar det alla " +"filer." + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "tomt argument till -size ogiltigt" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "ogiltig typ \"%c\" för -size" + +#: find/parser.c:2058 +#, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "Ogiltigt argument \"%s%c\" till -size" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" +"Flaggan -show-control-chars tar ett argument som måste vara \"literal\" " +"eller \"safe\"" + +#: find/parser.c:2348 +#, c-format +msgid "Invalid argument %s to -used" +msgstr "Ogiltigt argument %s till -used" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "Aktiverade funktioner: " + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "Argument till -type bör endast innehålla en bokstav" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "Okänt argument till -type: %c" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "varning: okänd kontrollsekvens \"\\%c\"" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "fel: %s på slutet av formatsträng" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "varning: okänt formatdirektiv \"%%%c\"" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "fel: formatdirektivet \"%%%c\" är reserverat för framtida användning" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" +"Den aktuella katalogen är inkluderad i miljövariabeln PATH, vilket är " +"osäkert i kombination med åtgärden %s för find. Ta bort aktuell katalog från " +"din $PATH (alltså, ta bort \".\", inledande eller avslutande kolon)" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" +"Relativa sökvägen %s är inkluderad i miljövariabeln PATH, vilket är osäkert " +"i kombination med åtgärden %s för find. Ta bort den posten från $PATH" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" +"Du kan inte använda {} inom verktygsnamnet för -execdir och -okdir, på grund " +"av att det innebär en möjlig säkerhetsrisk." + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "Endast en instans av {} stöds med -exec%s ... +" + +#: find/parser.c:3066 +msgid "The environment is too large for exec()." +msgstr "Miljön är för stor för exec()." + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "aritmiskt överflöde vid försök att beräkna dagens slut" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "standard fel" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "standard ut" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "Varning: kan inte bestämma födelsetiden för filen %s" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "Kan inte stänga standard in" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "Misslyckades med att byta katalog" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "kan inte grena" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "fel vid väntande på %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s avslutades av signal %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "ogiltigt uttryck" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" +"ogiltigt uttryck; du har använt en binäroperator \"%s\" utan någonting före " +"den." + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "förväntade ett uttryck mellan \"%s\" och \")\"" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "förväntade ett uttryck efter \"%s\"" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "ogiltigt uttryck; du har för många \")\"" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" +"ogiltigt uttryck; förväntade att hitta ett \")\"-tecken men kunde inte se " +"ett. Kanske behöver du ett extra predikat efter \"%s\"" + +#: find/tree.c:149 +msgid "invalid expression; empty parentheses are not allowed." +msgstr "ogiltigt uttryck; tomma paranteser tillåts inte." + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" +"ogiltigt uttryck; Jag förväntade mig att hitta ett \")\"-tecken någonstans " +"men kunde inte se ett." + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "hoppsan -- ogiltig uttryckstyp!" + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "hoppsan -- ogiltig uttryckstyp (%d)!" + +#: find/tree.c:1228 +#, c-format +msgid "paths must precede expression: %s" +msgstr "sökvägar måste komma före uttryck: %s" + +#: find/tree.c:1237 +#, c-format +msgid "unknown predicate `%s'" +msgstr "okänt predikat \"%s\"" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "ogiltigt predikat \"%s\"" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "ogiltigt argument \"%s\" till \"%s\"" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "argument till \"%s\" saknas" + +#: find/tree.c:1344 +msgid "you have too many ')'" +msgstr "du har för många \")\"" + +#: find/tree.c:1349 +#, c-format +msgid "unexpected extra predicate '%s'" +msgstr "oväntat extra predikat \"%s\"" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "oväntat extra predikat" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "hoppsan -- ogiltig standardinsättning av \"and\"!" + +#: find/util.c:157 +#, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Användning: %s [-H] [-L] [-P] [-Onivå] [-D " + +#: find/util.c:159 +#, c-format +msgid "] [path...] [expression]\n" +msgstr "] [sökväg...] [uttryck]\n" + +#: find/util.c:748 +#, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "Ignorerar okänd felsökningsflagga %s" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "Tomt argument till flaggan -D." + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "Flaggan -O måste omedelbart efterföljas av ett decimalt heltal" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "Ange ett decimaltal omedelbart efter -O" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "Ogiltig optimeringsnivå %s" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" +"Optimeringsnivån %lu är för hög. Om du mycket snabbt vill hitta filer bör " +"du överväga att använda GNU locate." + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"Miljövariabeln FIND_BLOCK_SIZE stöds inte, det enda som påverkar " +"blockstorleken är miljövariabeln POSIXLY_CORRECT" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "kommandot är för långt" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" +"får inte plats med ett ensamt argument inom gränsen för argumentlistans " +"storlek" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "argumentlistan är för lång" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "Byggd med GNU gnulib version %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Användning: %s [--version | --help]\n" +"eller %s vanligaste_bigram < fillista > locate-databas\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Rapportera fel till \n" +"och synpunkter på översättningen till .\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +#, fuzzy +msgid "Failed to write to standard output" +msgstr "standard ut" + +#: locate/locate.c:150 +msgid "days" +msgstr "dagar" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "Argumentet argument för flaggan --max-database-age får inte vara tom" + +#: locate/locate.c:213 locate/locate.c:220 +#, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "Ogiltigt argument %s för flaggan --max-database-age" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" +"locate-databasen %s innehåller ett filnamn som är längre än vad locate kan " +"hantera" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "locate-databasen %s är skadad eller ogiltig" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "Storlek på locate-databasen: %s byte\n" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "Matchande filnamn: %s " + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "Alla filnamn: %s " + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "med en sammanlagd längd på %s byte" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" +"\n" +"\tav vilken %s innehåller blanksteg, " + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" +"\n" +"\t%s innehåller nyradstecken, " + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" +"\n" +"\toch %s innehåller tecken med den höga biten satt.\n" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" +"Några filnamn kan har filtrerats bort, så vi kan inte beräkna " +"komprimeringsförhållandet.\n" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "Komprimeringsförhållande %4.2f% % (högre är bättre)\n" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "Komprimeringsförhållandet är odefinierat\n" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" +"locate-databasen %s ser ut som en slocate-databas men den verkar har " +"säkerhetsnivån %c, som GNU findutils för närvarande inte har stöd för" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" +"%s är en slocate-databas. Stödet för dessa är nytt så förvänta dig problem " +"för tillfället." + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" +"%s är en slocate-databas med säkerhetsnivån %d som inte stöds; hoppar över " +"den." + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" +"Du angav flaggan -E men den flaggan kan inte användas med databaser med " +"slocate-format med en säkerhetsnivå högre än 0. Inga resultat kommer att " +"genereras för den här databasen.\n" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "%s är en slocate-databas. Slår på flaggan \"-e\"." + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "locate-databasen %s med gammalt format är för kort för att vara giltig" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "Databasen %s är i formatet %s.\n" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "Databasen har ordkodning för little-endian-maskiner.\n" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "Databasen har ordkodning för big-endian-maskiner.\n" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "Ordningen för databasens maskinordskodning är inte självklar.\n" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Användning: %s [-d path | --database=sökväg] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYP]\n" +" [--max-database-age D] [--version] [--help]\n" +" mönster...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "misslyckades med att släppa grupprättigheter" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "misslyckades med att släppa setuid-rättigheter" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "Misslyckades med att fullständigt släppa rättigheter" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "misslyckades med att släppa setgid-rättigheter" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "varning: locate-databasen kan endast läsas en gång från standard in." + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "" +"varning: databasen %s är mer än %d %s gammal (faktisk ålder är %.1f %s)" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "oväntat extra predikat \"%s\"" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "fel vid väntande på %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "Ogiltig specialsekvens %s i inmatningsavskiljarspecifikationen." + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" +"Ogiltig specialsekvens %s i inmatningsavskiljarspecifikationen; teckenvärden " +"får inte överstiga %lx." + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" +"Ogiltig specialsekvens %s i inmatningsavskiljarspecifikationen; teckenvärden " +"får inte överstiga %lo." + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" +"Ogiltig specialsekvens %s i inmatningsavskiljarspecifikationen; " +"efterföljande tecknen %s är okända." + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" +"Ogiltig inmatningsavskiljarspecifikation %s: avskiljaren måste vara antingen " +"ett enstaka tecken eller en specialsekvens som börjar med \\." + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "miljön är för stor för exec" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "varning: värdet %ld för flaggan -s är för stort, använder %ld istället" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "Kan inte öppna inmatningsfilen %s" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "Dina miljövariabler tar upp %lu byte\n" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "Övre POSIX-gräns för argumentlängd (det här systemet): %lu\n" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" +"Minsta tillåtna övre POSIX-gräns för argumentlängd (alla system): %lu\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "Maximal längd på kommando som vi faktiskt kan använda: %ld\n" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Storlek på kommandobufferten som vi faktiskt använder: %lu\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" +"\n" +"Körningen av xargs kommer att fortsätta nu och den kommer att försöka läsa " +"dess inmatning och köra kommandon; om det här inte är vad du ville skulle " +"hända kan du trycka på tangentkombinationen för filslut.\n" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" +"Varning: %s kommer att köras minst en gång. Om du inte vill att det här ska " +"hända kan du trycka på tangentkombinationen för avbrott.\n" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"citattecknet %s är oavslutat; som standard är citattecken speciella för " +"xargs såvida du inte använder flaggan -0" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "dubbelt" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "enkelt" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" +"varning: ett NUL-tecken förekommer i inmatningen. Det kan inte skickas " +"genom till argumentlistan. Ville du använda flaggan --null?" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "argumentraden är för lång" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "fel vid väntande på barnprocess" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: avslutades med status 255; avbryter" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: stoppades av signal %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: avslutades av signal %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: ogiltigt tal för flaggan -%c\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: värdet på flaggan -%c ska vara >= %ld\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: värdet på flaggan -%c ska vara < %ld\n" + +#: xargs/xargs.c:1306 +#, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Användning: %s [-0prtx] [--interactive] [--null] [-d|--" +"delimiter=avgränsare]\n" +" [-E filslutssträng] [-e[filslutssträng]] [--eof[=filslutssträng]]\n" +" [-L max-rader] [-l[max-rader]] [--max-lines[=max-rader]]\n" +" [-I ersättningsträng] [-i[ersättningsträng]] [--replace" +"[=ersättningsträng]]\n" +" [-n max-argument] [--max-args=max-argument]\n" +" [-s max-tecken] [--max-chars=max-tecken]\n" +" [-P max-processer] [--max-procs=max-processer] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=fil]\n" +" [--version] [--help] [kommando [initiala-argument]]\n" + +#~ msgid "block size" +#~ msgstr "blockstorlek" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "varning: predikatet -ipath är föråldrat; använd -iwholename istället." + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find version %s\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU findutils version %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate version %s\n" + +#~ msgid "argument to --limit" +#~ msgstr "argument till --limit" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs version %s\n" + +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "hoppsan -- ogiltig uttryckstyp i mark_stat!" + +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "hoppsan -- ogiltig uttryckstyp i mark_type!" + +#~ msgid "old" +#~ msgstr "gammalt" + +#~ msgid "Reducing arg_max (%ld) to arg_size (%ld)\n" +#~ msgstr "Reducerar arg_max (%ld) till arg_size (%ld)\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "Predikatlista:\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "Evalueringsträd:\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "Optimerat evalueringsträd:\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "virtuellt minne slut" + +#~ msgid "error in %s: %s" +#~ msgstr "fel i %s: %s" + +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "åtgärder: -exec KOMMANDO ; -fprint FIL -fprint0 FIL -fprintf FIL " +#~ "FORMAT\n" +#~ " -fls FIL -ok KOMMANDO ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" + +#~ msgid "inserting %s\n" +#~ msgstr "infogar %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " typ: %s %s " + +#~ msgid "left:\n" +#~ msgstr "vänster:\n" + +#~ msgid "right:\n" +#~ msgstr "höger:\n" + +#~ msgid "Normalized Eval Tree:\n" +#~ msgstr "Normaliserat evalueringsträd:\n" + +#~ msgid "" +#~ "Usage: %s [-d path | --database=path] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--wholepath] [--basename] [--limit=N | -l N]\n" +#~ " [--version] [--help] pattern...\n" +#~ msgstr "" +#~ "Användning: %s [-d sökväg] [--database=sökväg] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--wholepath] [--basename]\n" +#~ " [--limit=N | -l N] [--version] [--help] mönster...\n" + +#~ msgid "" +#~ "warning: locate database path `%s' contains a trailing colon, which is " +#~ "not a valid database name" +#~ msgstr "" +#~ "varning: sökvägen \"%s\" till locate-databasen innehÃ¥ller ett efterslÃ" +#~ "¤pande kolon, vilket inte är ett giltigt databasnamn" + +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit" +#~ msgstr "" +#~ "åtgärder: -exec KOMMANDO ; -fprint FIL -fprint0 FIL -fprintf FIL " +#~ "FORMAT\n" +#~ " -fls FIL -ok KOMMANDO ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to ." +#~ msgstr "" +#~ "\n" +#~ "Rapportera fel till \n" +#~ "och synpunkter på översättningen till ." + +#~ msgid "Report bugs to ." +#~ msgstr "" +#~ "Rapportera fel till \n" +#~ "och synpunkter på översättningen till ." + +#~ msgid "%s changed during execution of %s" +#~ msgstr "%s ändrad under körning av %s" + +#~ msgid "%s/.. changed during execution of %s" +#~ msgstr "%s/.. ändrad under körning av %s" + +#~ msgid "unmatched %s quote" +#~ msgstr "omaka %s citattecken" + +#~ msgid "invalid argument %s for \"%s\"" +#~ msgstr "ogiltigt argument %s för \"%s\"" + +#~ msgid "ambiguous argument %s for \"%s\"" +#~ msgstr "tvetydigt argument %s för \"%s\"" diff --git a/po/tr.po b/po/tr.po new file mode 100644 index 0000000..7cd605a --- /dev/null +++ b/po/tr.po @@ -0,0 +1,1349 @@ +# Turkish translations for findutils messages. +# Copyright (C) 2007 Free Software Foundation, Inc. +# +# Nilgün Belma Bugüner , 2001,...,2007. +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.3.8\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2007-07-09 11:01+0300\n" +"Last-Translator: Nilgün Belma Bugüner \n" +"Language-Team: Turkish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "%2$s için %1$s argümanı geçersiz" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "%2$s için %1$s argümanı anlamsız" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Geçerli argümanlar:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "yazma hatası" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Bilinmeyen sistem hatası" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: `%s' seçeneği belirsiz\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: `--%s' seçeneği argümansız kullanılır\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: seçenek `%c%s' argümansız kullanılır\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: `%s' seçeneği bir argümanla kullanılır\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: `--%s' seçeneği bilinmiyor\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: `%c%s' seçeneği tanınmıyor\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: kuraldışı seçenek -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: geçersiz seçenek -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: seçenek bir argümanla kullanılır -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: `-W %s' seçeneği belirsiz\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: `-W %s' seçeneği argümansız kullanılır\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "çalışılan dizin alınamadı" + +#: gnulib/lib/openat-die.c:46 +#, fuzzy +msgid "failed to return to initial working directory" +msgstr "Dizin değiştirilemedi" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "“" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "”" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "" + +#: gnulib/lib/regcomp.c:137 +#, fuzzy +msgid "Invalid regular expression" +msgstr "ifade geçersiz" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: gnulib/lib/regcomp.c:164 +#, fuzzy +msgid "Invalid range end" +msgstr "-used için argüman olarak %s geçersiz" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "" + +#: gnulib/lib/regcomp.c:170 +#, fuzzy +msgid "Invalid preceding regular expression" +msgstr "ifade geçersiz" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[eE]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[hH]" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "`%s' argümanı `%s'de geçersiz" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "`%s' argümanı `%s'de geçersiz" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "argüman satırı çok uzun" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "çalışılan dizin alınamadı" + +#: find/find.c:204 +msgid "cannot stat current directory" +msgstr "çalışılan dizin durumlanamadı" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "Uyarı: %s dosya sistemi zaten ayrılmıştı." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "Uyarı: %s dosya sistemi zaten bağlanmıştı." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s, %s yürütülürken değişti (eski aygıt numarası: %ld, yeni aygıt " +"numarası: %ld, dosya sistemi türü: %s) [ref %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s, %s yürütülürken değişti (eski dosya indisi: %ld, yeni dosya indisi: %" +"ld, dosya sistemi türü: %s) [ref %ld]" + +#: find/find.c:992 +#, fuzzy, c-format +msgid "Failed to safely change directory into %s" +msgstr "Dizin değiştirilemedi" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" +"%s sembolik bağı dizin hiyerarşisinde bir döngünün parçası ve gösterdiği " +"dizini zaten ziyaret etmiştik." + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" +"Dosya sisteminde döngü saptandı; %s, bir dizin gibi %d %s olarak aynı aygıt " +"ve düğüm numarasına sahip." + +#: find/find.c:1108 +#, fuzzy +msgid "level higher in the file system hierarchy" +msgstr "seviye, dosya sistemi hiyerarşisinde daha yüksek" + +#: find/find.c:1109 +#, fuzzy +msgid "levels higher in the file system hierarchy" +msgstr "seviyeler, dosya sistemi hiyerarşisinde daha yüksek" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "uyarı: %s sembolik bağı izlenemiyor" + +#: find/find.c:1398 +#, fuzzy, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" +"UYARI: Sabit bağ sayısı %s için hatalı (st_nlink=%d ve biz zaten %d " +"altdizine baktık): bu dosya sistemi sürücünüzle ilgili bir yazılım hatası " +"olabilir. Find'in -noleaf seçeneği etkinleştiriliyor. Önceki sonuçlar " +"evvelce araştırılan dizinleri de içererek başarısız olmuş olabilir." + +#: find/fstype.c:250 +msgid "unknown" +msgstr "bilinmeyen" + +#: find/ftsfind.c:298 +#, fuzzy, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" +"Dosya sisteminde döngü saptandı; %s, bir dizin gibi %d %s olarak aynı aygıt " +"ve düğüm numarasına sahip." + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "Uyarı: %s dosyasının kipi 0000 olarak görünüyor" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"uyarı: %s seçeneğini bir seçeneğin argümanı olmayan %s argümanından sonra " +"belirttiniz, ama seçenekler konuma bağlı değil ( %s kendinden önce de sonra " +"da belirtilse sınamaları etkiler). Lütfen seçenekleri diğer argümanlardan " +"önce belirtin.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"uyarı: -d seçeneği artık önerilmiyor; lütfen yerine POSIX uyumlu olan -depth " +"seçeneğini kullanın." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" +"%s mevcut bir grubun ismi değil ve bir sayısal grup kimliği gibi de " +"görünmüyor, çünkü beklenmedik bir %s sonekine sahip" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "%s mevcut bir grubun ismi değil" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "-group için argüman boş, ama bir grup ismi olmalı" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"\n" +"öntanımlı dosya yolu çalışılan dizindir; öntanımlı ifade ise -print\n" +"ifade şundan ibaret olabilir:\n" +"operatörler, seçenekler, sınamalar ve eylemler:\n" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"operatörler (önceliği azaltan; -and başka bir şey verilmediğinden " +"örtüktür):\n" +" ( İFADE ) ! İFADE -not İFADE İFADE1 -a İFADE2\n" +" İFADE1 -and İFADE2 İFADE1 -o İFADE2 İFADE1 -or İFADE2\n" +" İFADE1 , İFADE2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +"konumsal seçenekler (daima `true'): -daystart -follow -regextype\n" +"normal seçenekler (daima `true', diğer ifadelerden önce belirtilirler):\n" +" -depth --help -maxdepth DÜZEYLER -mindepth DÜZEYLER -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +"sınamalar (N, +N veya -N ya da N olabilir): -amin N -anewer DOSYA -" +"atime N -cmin N -cnewer DOSYA -ctime N -empty\n" +" -false -fstype TÜR -gid N -group İSİM -ilname KALIP -iname KALIP\n" +" -inum N --iwholename KALIP -iregex KALIP -links N -lname KALIP -mmin " +"N\n" +" -mtime N -name KALIP -newer DOSYA" + +#: find/parser.c:1078 +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path KALIP -perm [+-]KİP -regex KALIP\n" +" -readable -writable -executable\n" +" -wholename KALIP -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user İSİM -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" +"eylemler: -delete -print0 -printf BİÇİM -fprintf DOSYA BİÇİM -print \n" +" -fprint0 DOSYA -fprint DOSYA -ls -fls DOSYA -prune -quit\n" +" -exec KOMUT ; -exec KOMUT {} + -ok KOMUT ;\n" +" -execdir KOMUT ; -execdir KOMUT {} + -okdir KOMUT ;\n" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"Yazılım hatalarını http://savannah.gnu.org/ adresindeki hata raporlama\n" +"sayfasından ya da eğer http erişiminiz yoksa \n" +"adresine raporlayınız.\n" +"Çeviri hatalarını ise adresine bildiriniz." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "fnmatch() kütüphane işlevinin tutarlılık sınaması başarısız oldu." + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" +"Uyarı: Unix dosya isimleri genellikle / içermezler (dosya yolları içerir). " +"Bu, '%s %s' ifadesinin bu sistemde her zaman yanlış olarak sonuçlanacağı " +"anlamına gelir. '-wholename' veya '-samefile' sınamalarını daha kullanışlı " +"bulabilirsiniz. Ayrıca, eğer GNU grep kullanıyorsanız, 'find ... -print0 | " +"grep -FzZ %s' kullanabilirdiniz." + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "%s için bir pozitif onluk tamsayı argüman umuluyordu, fakat %s alındı" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "Bu sistem dosyanın doğum tarihini bulmak için bir yöntem sağlamıyor." + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "%s nasıl tarih ve saat olarak yorumlanacak, bilinmiyor" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "%s için doğum tarihi saptanamadı" + +#: find/parser.c:1788 +#, c-format +msgid "invalid mode %s" +msgstr "geçersiz kip %s" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" +"uyarı: %s ile /000'a eşdeğer bir kip şablonu belirttiniz. -perm /000 kalıcı " +"olarak -perm -000 ile değiştirilmiş olacaktır; yani, hiçbir dosya ile " +"eşleşmemek üzere kullanılmıştı, artık bütün dosyalarla eşleşecek." + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "-size için boş (null) argüman geçersiz" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "-size türü `%c' geçersiz" + +#: find/parser.c:2058 +#, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "-size için argüman olarak `%s%c' geçersiz" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" +"-show-control-chars seçeneği ya 'literal' ya da 'safe' olması gereken tek " +"bir argüman alır" + +#: find/parser.c:2348 +#, c-format +msgid "Invalid argument %s to -used" +msgstr "-used için argüman olarak %s geçersiz" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "Etkin özellikler:" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "-type için argümanlar tek bir harf içermemeli" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "-type için bilinmeyen argüman: %c" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "uyarı: tanınmayan öncelem `\\%c'" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "hata: biçim dizgesi sonunda %s" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "uyarı: tanınmayan biçem yönergesi `%%%c'" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" +"hata: biçem yönergesi `%%%c' gelecekte kullanmak üzere yedeğe ayrılmıştır" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" +"Çalışma dizini PATH ortam değişkeninde bulunuyor ve find'in %s eylemi ile " +"birlikte güvensiz oluyor. Lütfen bu dizini PATH ortam değişkeninizden " +"kaldırın (yani, \".\" ile bunun önündeki ve ardındaki iki nokta üstüste " +"işaretlerini kaldırın)" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" +"%s göreli yolu PATH ortam değişkeninde bulunuyor ve find'in %s eylemi ile " +"birlikte güvensiz oluyor. Lütfen bu girdiyi $PATH ortam değişkeninizden " +"kaldırın" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" +"-execdir ve -okdir seçeneklerinde uygulama ismi içinde {} kullanmamalısınız, " +"çünkü bu potensiyel bir güvenlik açığıdır." + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "-exec%s ... + ile sadece bir {} desteklenmektedir" + +#: find/parser.c:3066 +msgid "The environment is too large for exec()." +msgstr "exec() için ortam çok geniş." + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "bugünün sonu bulunmaya çalışılırken aritmetiksel üstten taşma oluştu" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "standart hata" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "standart çıktı" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "Uyarı: %s dosyasının doğum günü saptanamadı" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "Standart girdi kapatılamıyor" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "Dizin değiştirilemedi" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "ayrılamaz" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "%s beklenirken hata oluştu" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s, %d sinyali ile sonlandırıldı" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "ifade geçersiz" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" +"geçersiz ifade; öncesinde başka hiçbirşey olmaksızın bir iki terimli '%s' " +"işleci kullanmalısınız" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "'%s' ile ')' arasında bir ifade umuluyordu" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "'%s' sonrasında bir ifade umuluyordu" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "geçersiz ifade; çok fazla ')' var" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" +"geçersiz ifade; bir ')' umuluyordu ama yok. Belki de '%s' sonrasında ek bir " +"dayanağa ihtiyacınız var" + +#: find/tree.c:149 +msgid "invalid expression; empty parentheses are not allowed." +msgstr "geçersiz ifade; boş parantezlere izin yok" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "geçersiz ifade; bir ')' olmalıydı ama hiç yok." + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "hooop -- geçersiz ifade türü!" + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "hooop -- geçersiz ifade türü (%d)!" + +#: find/tree.c:1228 +#, c-format +msgid "paths must precede expression: %s" +msgstr "dosya yolları ifadeyi öncelemelidir: %s" + +#: find/tree.c:1237 +#, c-format +msgid "unknown predicate `%s'" +msgstr "geçersiz yüklem `%s'" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "geçersiz dayanak `%s'" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "`%s' argümanı `%s'de geçersiz" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "`%s'de argüman eksik" + +#: find/tree.c:1344 +msgid "you have too many ')'" +msgstr "çok fazla ')' var" + +#: find/tree.c:1349 +#, c-format +msgid "unexpected extra predicate '%s'" +msgstr "umulmayan ek dayanak '%s'" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "umulmayan ek dayanak" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "Hoop -- öntanımlı `and' yerleştirme geçersiz!" + +#: find/util.c:157 +#, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Kullanımı: %s [-H] [-L] [-P] [-Oseviye] [-D " + +#: find/util.c:159 +#, c-format +msgid "] [path...] [expression]\n" +msgstr "] [dosyaYolu...] [ifade]\n" + +#: find/util.c:748 +#, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "Tanınmayan hata ayıklama seçeneği %s yoksayılıyor" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "-D seçeneğine boş argüman." + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "-O seçeneği ile bir ondalık tamsayı verilmelidir" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "-O'nun ardına lütfen bir ondalık sayı yazın" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "En iyileme seviyesi %s geçersiz" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" +"En iyileme seviyesi %lu çok büyük. Dosyaları çabucak bulmak istiyorsanız, " +"GNU locate kullanmayı düşünebilirsiniz" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"FIND_BLOCK_SIZE ortam değişkeni destekenmiyor, blok boyunu etkileyen tek şey " +"POSIXLY_CORRECT ortam değişkenidir" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" + +#: lib/buildcmd.c:293 +#, fuzzy +msgid "argument list too long" +msgstr "argüman satırı çok uzun" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU gnulib sürüm %s kullanarak derlenmiş\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Kullanımı: %s [--version | --help]\n" +"veya %s most_common_bigrams < dosya-listesi > konum-veritabanı\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Yazılım hatalarını adresine bildiriniz.\n" +"Çeviri hatalarını ise adresine bildirin.\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +#, fuzzy +msgid "Failed to write to standard output" +msgstr "standart çıktı" + +#: locate/locate.c:150 +msgid "days" +msgstr "gün" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "--max-database-age seçeneğinin argümanı boş olmamalı" + +#: locate/locate.c:213 locate/locate.c:220 +#, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "--max-database-age seçeneği için %s argümanı geçersiz" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" +"locate veritabanı %s locate'in artık çalışmadığı bir dosya türünün ismini " +"içeriyor" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "locate veritabanı %s ya bozuk ya da geçersiz" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "Locate veritabanı boyu: %s bayt\n" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "Eşleşen Dosya isimleri: %s " + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "Tüm Dosya isimleri: %s " + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "%s baytlık bir birikimli uzunluk ile" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" +"\n" +"\t%s boşluk içeriyor, " + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" +"\n" +"\t%s satırsonu karakteri içeriyor, " + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" +"\n" +"\tve %s yüksek bitli karakterler içeriyor.\n" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" +"Bazı dosyalar süzülüp atılmış olabilir, bu nedenle sıkıştırma oranını " +"hesaplayamayız.\n" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "Sıkıştırma oranı %%%4.2f (daha yükseği daha iyidir)\n" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "Sıkıştırma oranı tanımlanmamış\n" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" +"locate veritabanı %s bir slocate veritabanı gibi görünüyor ama GNU findutils " +"tarafından desteklenmeyen %c güvenlik seviyesine de sahipmiş gibi görünüyor" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" +"%s bir slocate veritabanıdır. Henüz yeni yeni desteklenmektedir, şu an " +"sorunları olabilir." + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" +"%s desteklenmeyen %d güvenlik seviyeli bir slocate veritabanıdır; atlanıyor" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" +"-E seçeneğini belirttiniz ama bu seçenek sıfırdan farklı güvenlik seviyeli " +"slocate biçimli veritabanları ile kullanılmamalıdır. Bu veritabanı için " +"hiçbir sonuç üretilmeyecek.\n" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "%s bir slocate veritabanıdır. '-e' seçeneği etkin kılınıyor." + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "eski biçim locate veritabanı %s geçerli olmak için çok kısa" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "%s veritabanı %s biçiminde.\n" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "Veritabanı kıymetsiz baytın başta olduğu bayt sıralamasına sahip\n" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "Veritabanı kıymetli baytın başta olduğu bayt sıralamasına sahip\n" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "Veritabanın bayt sıralamasının ne olduğu belli değil.\n" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Kullanımı: %s [-d DosyaYolu | --database=DosyaYolu]\n" +" [-e | | -E | --[non-]existing] [-i | --ignore-case] [-w | --" +"wholename]\n" +" [-b | --basename] [--limit=N | -l N] [-S | --statistics] [-0 | --" +"null]\n" +" [-c | --count] [-P | -H | --nofollow] [-L | --follow] [-m | --" +"mmap ]\n" +" [ -s | --stdio ] [-A | --all] [-p | --print] [-r | --regex ]\n" +" [--regextype=TÜR] [--max-database-age D] [--version] [--help]\n" +" KALIP...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "grup izinleri kaldırılamadı" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "setuid izinleri kaldırılamadı" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "İzinler tamamen kaldırılamadı" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "setgid izinleri kaldırılamadı" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "Uyarı: locate veritabanı standart girdiden sadece bir kere okunabilir" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "uyarı: %s veritabanı %d den %s daha eski (aslında %.1f %s yaşında)" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "umulmayan ek dayanak '%s'" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "%s beklenirken hata oluştu" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "Girdi sınırlayıcı belirtimindeki %s önceleme dizgesi geçersiz." + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" +"Girdi sınırlayıcı belirtimindeki %s önceleme dizgesi geçersiz; karakter " +"değerleri %lx değerini aşmamalı." + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" +"Girdi sınırlayıcı belirtimindeki %s önceleme dizgesi geçersiz; karakter " +"değerleri %lo değerini aşmamalı." + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" +"Girdi sınırlayıcı belirtimindeki %s önceleme dizgesi geçersiz; ardındaki %s " +"karakterleri tanınmıyor." + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" +"Girdi sınırlayıcı belirtimi %s geçersiz: sınırlanan şey ya tek bir karakter " +"ya da \\ ile öncelenmiş bir dizge olmalı." + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "icra edilebilir olarak ortam çok geniş" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "uyarı: %ld değeri -s seçeneği için çok büyük, yerine %ld kullanılıyor" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "Girdi dosyası %s açılamıyor" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "Ortam değişkenleriniz %lu bayt tutuyor\n" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "Argüman uzunluğunun POSIX üst sınırı (bu sistem): %lu\n" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" +"Argüman uzunluğu için izin verilen en küçük POSIX üst sınırı (tüm sistemler: " +"%lu\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "Kullanabileceğimiz asgari komut uzunluğu: %ld\n" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Kullanmakta olduğumuz komut tamponunun boyu: %lu\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" +"\n" +"xargs şimdi çalışmaya devam edecek ve girdisini okumayı ve komutları " +"çalıştırmayı deneyecek; eğer istediğiniz bu değilse lütfen dosyasonu " +"tuşlayınız.\n" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" +"Uyarı: %s en azından bir kere çalışacak. İstediğiniz bu değilse kesme " +"tuşlarına basınız.\n" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"%s karşılığı ile eşleşmiyor; -0 seçeneği ile belirtilmedikçe öntanımlı " +"olarak sarmalayıcı karakterler xarg'lara özeldir" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "çift" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "tek" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" +"Uyarı: girdide bir NUL karakter algılandı. Argüman listesi üzerinden " +"aktarılamaz. --null seçeneğini kullanmayı düşündünüz mü?" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "argüman satırı çok uzun" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "ast süreç beklenirken hata oluştu" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: durum 255 ile çıkıldı; bırakılıyor" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: %d sinyali ile durduruldu" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: %d sinyali ile sonlandırıldı" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: -%c seçeneği için geçersiz sayı\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: -%c seçeneği için değer >= %ld olmalı\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: -%c seçeneği için değer < %ld olmalı\n" + +#: xargs/xargs.c:1306 +#, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Kullanımı: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=ayraç]\n" +" [-E eof-dizgesi] -e[eof-dizgesi]] [--eof[=eof-dizgesi]]\n" +" [-L azami-satır-sayısı] [-l[azami-satır-sayısı]]\n" +" [--max-lines[=azami-satır-sayısı]] [-I değiştirme-dizgesi]\n" +" [-i[değiştirme-dizgesi]] [--replace[=değiştirme-dizgesi]]\n" +" [-n azami-arg-sayısı] [--max-args=azami-arg-sayısı]\n" +" [-s azami-karakter-sayısı] [--max-chars=azami-karakter-sayısı]\n" +" [-P azami-işlem-sayısı] [--max-procs=azami-işlem-sayısı]\n" +" [--show-limits] [--verbose] [--exit] [--no-run-if-empty]\n" +" [--arg-file=dosya] [--version] [--help] [komut [ilk-argümanlar]]\n" + +#~ msgid "block size" +#~ msgstr "blok uzunluğu" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "uyarı: -ipath dayanağının kullanımı önerilmiyor; yerine lütfen -" +#~ "iwholename kullanın." + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find sürüm %s\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU findutils sürüm %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate sürüm %s\n" + +#~ msgid "argument to --limit" +#~ msgstr "--limit argümanı" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs sürüm %s\n" diff --git a/po/uk.po b/po/uk.po new file mode 100644 index 0000000..9def31e --- /dev/null +++ b/po/uk.po @@ -0,0 +1,1351 @@ +# Ukrainian translation to findutils. +# Copyright (C) 2006 Free Software Foundation, Inc. +# This file is distributed under the same license as the findutils package. +# Maxim V. Dziumanenko , 2006,2007. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.3.8\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2007-07-03 13:55+0300\n" +"Last-Translator: Maxim V. Dziumanenko \n" +"Language-Team: Ukrainian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "некоректний аргумент %s для `%s'" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "некоректний аргумент %s для `%s'" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Припустимі аргументи:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "помилка при записі" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Невідома системна помилка" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: ключ `%s' неоднозначний\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: ключ `--%s' використовується без аргументів\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: ключ `%c%s' використовується без аргументів\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: для ключа `%s' потрібно вказати аргумент\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: невідомий ключ `--%s'\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: невідомий ключ `%c%s'\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: невідомий ключ -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: некоректний ключ -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: для ключа потрібно вказати аргумент -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: ключ `-W %s' неоднозначний\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: ключ `-W %s' використовується без аргументів\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "не вдається отримати поточний каталог" + +#: gnulib/lib/openat-die.c:46 +#, fuzzy +msgid "failed to return to initial working directory" +msgstr "Помилка при зміні каталогу" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "`" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "'" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "" + +#: gnulib/lib/regcomp.c:137 +#, fuzzy +msgid "Invalid regular expression" +msgstr "неправильний вираз" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: gnulib/lib/regcomp.c:164 +#, fuzzy +msgid "Invalid range end" +msgstr "Некоректний аргумент %s для -used" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "" + +#: gnulib/lib/regcomp.c:170 +#, fuzzy +msgid "Invalid preceding regular expression" +msgstr "неправильний вираз" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[yYтТ]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nNнН]" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "неправильний аргумент `%s' у `%s'" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "неправильний аргумент `%s' у `%s'" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "рядок аргументів надто великий" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "не вдається отримати поточний каталог" + +#: find/find.c:204 +msgid "cannot stat current directory" +msgstr "не вдається отримати інформацію про поточний каталог" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "Попередження: файлову систему %s відключено." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "Попередження: файлову систему %s підключено." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s змінено під час виконання %s (старий номер пристрою %ld, новий номер " +"пристрою %ld, файлова система %s) [посилань %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s змінено під час виконання %s (старий inode %ld, новий inode %ld, " +"файлова система %s) [посилань %ld]" + +#: find/find.c:992 +#, fuzzy, c-format +msgid "Failed to safely change directory into %s" +msgstr "Помилка при зміні каталогу" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" +"Символічне посилання %s є частиною циклу в ієрархії каталогів; у каталозі на " +"який воно вказує, пошук вже відбувався." + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" +"Зациклення у файловій системі; `%s' має той самий номер пристрою та inode, " +"що й каталог %d %s." + +#: find/find.c:1108 +#, fuzzy +msgid "level higher in the file system hierarchy" +msgstr "рівнем вище у ієрархії файлової системи" + +#: find/find.c:1109 +#, fuzzy +msgid "levels higher in the file system hierarchy" +msgstr "рівнями вище у ієрархії файлової системи" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "попередження: не відбувся перехід за символічним посиланням %s" + +#: find/find.c:1398 +#, fuzzy, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" +"ПОПЕРЕДЖЕННЯ: Некоректна кількість жорстких посилань %s (видно лише st_nlink=" +"%d але вже було видно %d підкаталогів): можливо, це помилка драйвера " +"файлової системи. Автоматично включено параметр -noleaf. У попередні " +"результати можуть не бути включені каталоги, у яких мав би бути проведений " +"пошук." + +#: find/fstype.c:250 +msgid "unknown" +msgstr "невідомо" + +#: find/ftsfind.c:298 +#, fuzzy, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" +"Зациклення у файловій системі; `%s' має той самий номер пристрою та inode, " +"що й каталог %d %s." + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "Попередження: файл %s має режим 0000" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"попередження: ви вказали ключ %s після звичайного аргументу %s, але ключі не " +"є залежними від позиції (%s впливає на перевірки вказані перед ним, а також " +"на ті, що вказані після). Вказуйте ключі перед іншими аргументами.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"попередження: ключ -d застарів; натомість використовуйте -depth, оскільки " +"він є POSIX-сумісним." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" +"%s не є назвою існуючої групи та не схожа на ідентифікатор групи, оскільки " +"має несподіваний суфікс %s" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "%s не є назвою існуючої групи" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "порожній аргумент параметра -group, потрібно вказати назву групи" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"\n" +"типовий шлях: поточний каталог; типовий вираз: -print\n" +"вирази можуть складатись з: операторів, ключів, перевірок та дій:\n" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"оператори (у спадному порядку; неявно вважається -and, якщо не вказано " +"інше):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +"залежні від позиції ключі (завжди true): -daystart -follow -regextype\n" +"\n" +"звичайні параметри (завжди true, вказані перед іншими виразами):\n" +" -depth --help -maxdepth РІВНІВ -mindepth РІВНІВ -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +"перевірки (N може бути +N або -N чи N): -amin N -anewer ФАЙЛ -atime N -cmin " +"N\n" +" -cnewer ФАЙЛ -ctime N -empty -false -fstype TYPE -gid N -group НАЗВА\n" +" -ilname ШАБЛОН -iname ШАБЛОН -inum N -iwholename ШАБЛОН -iregex " +"ШАБЛОН\n" +" -links N -lname ШАБЛОН -mmin N -mtime N -name ШАБЛОН -newer ФАЙЛ" + +#: find/parser.c:1078 +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path ШАБЛОН -perm [+-]РЕЖИМ -regex ШАБЛОН\n" +" -readable -writable -executable\n" +" -wholename ШАБЛОН -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user НАЗВА -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" +"дії: -delete -print0 -printf ФОРМАТ -fprintf ФАЙЛ ФОРМАТ -print \n" +" -fprint0 ФАЙЛ -fprint ФАЙЛ -ls -fls ФАЙЛ -prune -quit\n" +" -exec КОМАНДА ; -exec КОМАНДА {} + -ok КОМАНДА ;\n" +" -execdir КОМАНДА ; -execdir КОМАНДА {} + -okdir КОМАНДА ;\n" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"Сповіщайте про помилки у findutils (та слідкуйте за виправленням) на " +"сторінці\n" +"http://savannah.gnu.org/ або, якщо у вас немає доступу до веб, надсилайте\n" +"поштою за адресою ." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "помилка перевірки бібліотечною функцією fnmatch()." + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" +"попередження: назви файлів Unix зазвичай не містять зворотних косих рисок " +"(хоча вони містяться у шляхах). Це означає, що '%s %s' буде вважатись " +"завжди false на цій системі.Більш корисним буде вказати '-wholename' чи, " +"можливо, '-samefile'. Якщо ж ви користуєтесь GNU grep, можете " +"використовувати 'find ... -print0 | grep -FzZ %s'." + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" +"У аргументі %s очікувалось додатне десяткове ціле число, але вказано %s" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "Система не підтримує пошук за часом створення файлу. " + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "Не вдається визначити, як інтерпретувати дату чи час у формі %s" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "Не вдається отримати час створення файлу %s" + +#: find/parser.c:1788 +#, c-format +msgid "invalid mode %s" +msgstr "неправильний режим %s" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" +"попередження: ви вказати шаблон прав доступу %s, який еквівалентний /000. " +"Значення -perm /000 скоро буде змінено, для сумісності з -perm -000; тобто, " +"зараз вираз не відповідає ніяким файлам, але скоро буде змінений, щоб " +"відповідав усім файлам." + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "відсутній аргумент у -size" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "неправильний тип '%c' для -size" + +#: find/parser.c:2058 +#, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "Неправильний аргумент `%s%c' для -size" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" +"Параметр -show-control-chars приймає один аргумент, який має бути 'literal' " +"чи 'safe'" + +#: find/parser.c:2348 +#, c-format +msgid "Invalid argument %s to -used" +msgstr "Некоректний аргумент %s для -used" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "Увімкнені функції: " + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "Аргументи до -type мають містити лише одну літеру" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "Невідомий аргумент для -type: %c" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "попередження: невідома послідовність '\\%c'" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "помилка: %s наприкінці рядка формату" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "попередження: невідомий формат директиви '%%%c'" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" +"помилка: директива формату `%%%c' зарезервована для майбутнього використання" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" +"Поточний каталог включений в змінну оточення PATH, що у комбінації з дією %s " +"створює небезпеку. Видаліть поточний каталог із змінної $PATH (тобто, " +"видаліть \".\", або двокрапку попереду чи позаду)" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" +"Відносний шлях %s включений в змінну оточення PATH, що у комбінації з дією " +"пошуку %s створює небезпеку. Видаліть цей шлях із змінної $PATH" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" +"Не можна використовувати {} у назві утиліти для -execdir та -okdir, оскільки " +"це - потенційна проблема безпеки." + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "У виразі -exec%s ... + підтримується лише один екземпляр {}" + +#: find/parser.c:3066 +msgid "The environment is too large for exec()." +msgstr "Оточення надто велике для виконання." + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" +"арифметичне переповнення при спробі обчислення кінця сьогоднішнього дня" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "стандартний потік помилок" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "стандартний потів виводу" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "Попередження: не вдається визначити час створення файлу %s" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "Не вдається закрити стандартний потік вводу" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "Помилка при зміні каталогу" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "не вдається створити процес" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "помилка очікування %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s перерваний сигналом %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "неправильний вираз" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" +"неправильний вираз; ви використовувати двійковий оператор '%s', але перед " +"ним нічого не вказано." + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "між '%s' та ')' очікувався вираз" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "після '%s' очікувався вираз" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "неправильний вираз: надто багато символів ')'" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" +"неправильний вираз; очікувався символ ')' але він не знайдений. Можливо, " +"потрібен додатковий ключ після '%s'" + +#: find/tree.c:149 +msgid "invalid expression; empty parentheses are not allowed." +msgstr "неправильний вираз: порожні дужки неприпустимі." + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "неправильний вираз: очікувався символ ')', але він не знайдений." + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "оопс -- неправильний тип виразу!" + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "оопс -- неправильний тип виразу (%d)!" + +#: find/tree.c:1228 +#, c-format +msgid "paths must precede expression: %s" +msgstr "шляхи треба вказувати перед виразом: %s" + +#: find/tree.c:1237 +#, c-format +msgid "unknown predicate `%s'" +msgstr "невідомий ключ `%s'" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "неправильний ключ `%s'" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "неправильний аргумент `%s' у `%s'" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "відсутній аргумент у `%s'" + +#: find/tree.c:1344 +msgid "you have too many ')'" +msgstr "надто багато символів ')'" + +#: find/tree.c:1349 +#, c-format +msgid "unexpected extra predicate '%s'" +msgstr "неочікуваний зайвий ключ `%s'" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "неочікуваний зайвий ключ" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "оопс -- помилкова типова вставка оператора 'ТА' (and)" + +#: find/util.c:157 +#, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Використання: %s [-H] [-L] [-P] [-Oрівень] [-D " + +#: find/util.c:159 +#, c-format +msgid "] [path...] [expression]\n" +msgstr "] [шлях...] [вираз]\n" + +#: find/util.c:748 +#, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "Невідома ознака налагодження %s проігнорована" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "Не вказаний аргумент ключа -D" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "За ключем -O одразу має йти десяткове ціле число" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "Вкажіть десяткове ціле число після ключа -O" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "Некоректний рівень оптимізації %s" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" +"Рівень оптимізації %lu надто високий. Якщо треба дуже швидко шукати файли, " +"скористайтесь GNU locate." + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"Змінна оточення FIND_BLOCK_SIZE не підтримується, на розмір блоку впливає " +"лише змінна оточення POSIXLY_CORRECT" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" + +#: lib/buildcmd.c:293 +#, fuzzy +msgid "argument list too long" +msgstr "рядок аргументів надто великий" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "Зібрано з використанням GNU gnulib версії %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Використання: %s [--version | --help]\n" +"чи %s most_common_bigrams < список-файлів > база-даних-locate\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Про помилки звітуйте за адресою .\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +#, fuzzy +msgid "Failed to write to standard output" +msgstr "стандартний потів виводу" + +#: locate/locate.c:150 +msgid "days" +msgstr "днів" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "Аргумент для ключа --max-database-age не повинен бути порожнім" + +#: locate/locate.c:213 locate/locate.c:220 +#, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "Некоректний аргумент %s для ключа --max-database-age" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" +"база даних locate %s містить назву файлу, яка довша, ніж може обробляти " +"команда locate" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "база даних locate %s пошкоджена або неправильна" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "Розмір бази даних locate: %s байтів\n" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "Відповідні назви файлів: %s " + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "Усі назви файлів: %s " + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "сукупна довжина: %s байтів" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" +"\n" +"\tз яких %s - пробіли, " + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" +"\n" +"\t%s містять символи нового рядка, " + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" +"\n" +"\tта %s містять символи з встановленим старшим бітом.\n" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" +"Деякі назви файлів можуть бути відфільтровані, тож ступінь стиснення " +"неможливо підрахувати.\n" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "Ступінь стиснення %4.2f%% (вищий ступінь - кращий)\n" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "Ступінь стиснення невизначений\n" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" +"база даних locate %s схожа на базу даних slocate, але має рівень безпеки %c, " +"який наразі не підтримується GNU findutils" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" +"%s - це база даних slocate. Код підтримки цієї функціональності новий, тож " +"можливе виникнення проблем." + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" +"%s - це база даних slocate з непідтримуваним рівнем безпеки %d, її буде " +"пропущено." + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" +"Ви вказали ключ -E, але цей ключ не можна використовувати з базами даних у " +"форматі slocate які мають не нульовий рівень безпеки. Пошук у цій базі " +"даних не дасть результату.\n" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "%s - це база даних slocate. Вмикається параметр '-e'." + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" +"база даних locate `%s' у старому форматі некоректна, бо є надто короткою" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "База даних %s має формат %s.\n" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" +"База даних у форматі з кодуванням машинного слова типу little-endian.\n" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "База даних у форматі з кодуванням машинного слова типу big-endian.\n" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "Тип кодування машинного слова у базі даних не очевидний.\n" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Використання: %s [-d шлях | --database=шлях] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=ТИП]\n" +" [--max-database-age D] [-version] [--help]\n" +" шаблон...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "не вдається позбутись групових прав" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "не вдається позбутись прав setuid" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "Не вдається повністю позбутись прав" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "не вдається позбутись прав setgid" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" +"попередження: базу даних locate можна прочитати з стандартного потоку вводу " +"лише один раз." + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "" +"попередження: база даних '%s' застаріла більш ніж на %d %s (фактичний її вік " +"%.1f %s)" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "неочікуваний зайвий ключ `%s'" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "помилка очікування %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "Некоректна escape-послідовність %s у визначенні роздільника для входу." + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" +"Некоректна escape-послідовність %s у визначенні роздільника для входу; " +"значення символів не можуть перевищувати %lx." + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" +"Некоректна escape-послідовність %s у визначенні роздільника для входу; " +"значення символів не можуть перевищувати %lo." + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" +"Некоректна escape-послідовність %s у визначенні роздільника для входу; " +"невідомі символи %s наприкінці." + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" +"Некоректне визначення роздільника входу %s: роздільник має бути або символом " +"або escape-послідовністю, що починається з \\." + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "оточення надто велике для виконання" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" +"попередження: значення %ld для ключа -s надто велике, натомість " +"використовується %ld" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "Не вдається відкрити вхідний файл `%s'" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "Змінні оточення займають %lu байтів\n" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "Верхня межа POSIX довжини аргументу (на цій системі): %lu\n" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "Нижня допустима межа POSIX довжини аргументу (для всіх систем): %lu\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "Максимальна довжина команди, яку можна використовувати: %ld\n" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Розмір буфера команд, який використовується: %lu\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" +"\n" +"Виконання xargs буде продовжено, команда спробує прочитати потік вводу та " +"виконати команди; якщо ви цього не бажаєте, введіть символ кінця файлу.\n" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" +"Попередження: %s запуститься принаймні один раз. Якщо ви цього не бажаєте, " +"введіть символ кінця файлу.\n" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"непарні лапки %s quote; зазвичай лапки мають спеціальне значення, якщо не " +"вказано ключ -0" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "подвійна" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "одинарна" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" +"попередження: у потоці вводу виявлено символ NUL. Він не може передаватись " +"у список аргументів. Ви забули вказати ключ --null ?" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "рядок аргументів надто великий" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "помилка очікування дочірнього процесу" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: завершився зі статусом 255; переривання роботи" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: зупинено сигналом %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: завершений сигналом %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: некоректне число для ключа -%c\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: значення для ключа -%c має бути >= %ld\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: значення для ключа -%c має бути < %ld\n" + +#: xargs/xargs.c:1306 +#, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Використання: %s [-0prtx] [--interactive] [--null] [-d|--" +"delimiter=роздільник]\n" +" [-E рядок-кінц-файлу] [-e[рядок-кінц-файлу]] [--eof[=рядок-кінц-" +"файлу]]\n" +" [-L макс-рядків] [-l[макс-рядків]] [--max-lines[=макс-рядків]]\n" +" [-I рядок-заміни] [-i[рядок-заміни]] [--replace[=рядок-заміни]]\n" +" [-n макс-аргументів] [--max-args=макс-аргументів]\n" +" [-s макс-символів] [--max-chars=макс-символів]\n" +" [-P макс-процесів] [--max-procs=макс-процесів] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=файл]\n" +" [--version] [--help] [команда [початкові-аргументи]]\n" + +#~ msgid "block size" +#~ msgstr "розмір блоку" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "попередження: ключ -ipath застарів; натомість користуйтесь -iwholename." + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find версії %s\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU findutils версії %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate версії %s\n" + +#~ msgid "argument to --limit" +#~ msgstr "аргумент для --limit" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs версії %s\n" diff --git a/po/vi.po b/po/vi.po new file mode 100644 index 0000000..05dbe81 --- /dev/null +++ b/po/vi.po @@ -0,0 +1,1429 @@ +# Vietnamese translation for FindUtils. +# Copyright © 2007 Free Software Foundation, Inc. +# This file is distributed under the same license as the findutils-4.3.7 package. +# Clytie Siddall , 2006-2007. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.3.8\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2007-07-03 21:49+0930\n" +"Last-Translator: Clytie Siddall \n" +"Language-Team: Vietnamese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: LocFactoryEditor 1.6.4a6\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "đối số %s không hợp lệ cho %s" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "đối số %s mơ hồ cho %s" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "Các đối số hợp lệ:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "lỗi ghi" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "Không biết lỗi hệ thống" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: tùy chọn « %s » là mơ hồ\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: tùy chọn « --%s » không cho phép đối số\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: tùy chọn « %c%s » không cho phép đối số\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: tùy chọn « %s » cần đến đối số\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: không nhận diện tùy chọn « --%s »\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: không nhận diện tùy chọn « %c%s »\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: không cho phép tùy chọn « -- %c »\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: tùy chọn không hợp lệ « -- %c »\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: tùy chọn cần đến đối số « -- %c »\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: tùy chọn « -W %s » là mơ hồ\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: tùy chọn « -W %s » không cho phép đối số\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "không thể lấy thư mục hiện có" + +#: gnulib/lib/openat-die.c:46 +#, fuzzy +msgid "failed to return to initial working directory" +msgstr "Lỗi thay đổi thư mục" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "« " + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr " »" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "" + +#: gnulib/lib/regcomp.c:137 +#, fuzzy +msgid "Invalid regular expression" +msgstr "biểu thức không hợp lệ" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: gnulib/lib/regcomp.c:164 +#, fuzzy +msgid "Invalid range end" +msgstr "Đối số không hợp lệ %s tới « -used » (đã dùng)" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "" + +#: gnulib/lib/regcomp.c:170 +#, fuzzy +msgid "Invalid preceding regular expression" +msgstr "biểu thức không hợp lệ" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[cC]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[kK]" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "đối số « %s » không hợp lệ đối với « %s »" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "đối số « %s » không hợp lệ đối với « %s »" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "dòng đối số quá dài" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "không thể lấy thư mục hiện có" + +#: find/find.c:204 +msgid "cannot stat current directory" +msgstr "không thể lấy các thông tin về thư mục hiện thời" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "Cảnh báo : hệ thống tập tin %s vừa bị tháo gắn kết." + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "Cảnh báo : hệ thống tập tin « %s » vừa được gắn kết." + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s đã thay đổi trong khi thì hành %s (số hiệu thiết bị cũ %ld, số thiết bị " +"mới « %ld », kiểu hệ thống tập tin là %s) [nhắc %ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"%s%s đã thay đổi trong khi thì hành %s (số hiệu inode cũ %ld, số inode mới %" +"ld, kiểu hệ thống tập tin là %s) [nhắc %ld]" + +#: find/find.c:992 +#, fuzzy, c-format +msgid "Failed to safely change directory into %s" +msgstr "Lỗi thay đổi thư mục" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" +"Liên kết tượng trưng %s là phần của vòng lặp trong phân cấp thư mục; đã thăm " +"thư mục đến đó nó hướng." + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" +"Mới phát hiện vòng lặp hệ thống tập tin; %s có cùng một số hiệu thiết bị và " +"inode với thư mục %d %s." + +#: find/find.c:1108 +#, fuzzy +msgid "level higher in the file system hierarchy" +msgstr "cấp cao hơn trong tôn ti hệ thống tập tin" + +#: find/find.c:1109 +#, fuzzy +msgid "levels higher in the file system hierarchy" +msgstr "cấp cao hơn trong tôn ti hệ thống tập tin" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "cảnh báo : không đi theo liên kết tượng trưng %s." + +#: find/find.c:1398 +#, fuzzy, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" +"CẢNH BÁO : số đếm liên kết cứng không đúng đối với %s (thấy chỉ « st_nlink=%" +"d » nhưng đã thấy %d thư mục con): có thể là lỗi trong trình điều khiển hệ " +"thống tập tin. Vì thế tự động bật tùy chọn « -noleaf » của find. Kết quả sớm " +"hơn có thể không gồm thư mục nên được tìm kiếm." + +#: find/fstype.c:250 +msgid "unknown" +msgstr "không rõ" + +#: find/ftsfind.c:298 +#, fuzzy, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" +"Mới phát hiện vòng lặp hệ thống tập tin; %s có cùng một số hiệu thiết bị và " +"inode với thư mục %d %s." + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "Cảnh báo : có vẻ là tập tin %s có chế độ 0000" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" +"cảnh báo : bạn đã ghi ro tùy chọn %s sau đối số khác tùy chọn %s, nhưng mà " +"tùy chọn không phải thuộc vị trí (%s làm ảnh hướng đến điều thử được ghi rõ " +"cả hai trước lẫn sau nó). Hãy ghi rõ tùy chọn _trước_ đối số khác.\n" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"cảnh báo : tùy chọn « -d » bị phản đối nên hãy sử dụng tùy chọn « -depth " +"» (độ sâu) thay thế, vì nó là tính năng tuân theo POSIX." + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" +"%s không phải là tên của nhóm tồn tại; cũng không hình như mã nhận diện nhóm " +"thuộc số, vì nó có hậu số bất thường %s" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "%s không phải là tên của nhóm tồn tại" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "đối số rỗng tới « -group » (nhóm): nên là tên nhóm" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"\n" +"đường dẫn mặc định là thư mục hiện có; biểu thức mặc định là « -print " +"» (in)\n" +"biểu thức có thể bao gồm: toán tử, tùy chọn, điều thử và hành động:\n" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"toán tử (quyền đi trước giảm; ngụ ý tùy chọn « -and » (và)\n" +"khi không có điều khác):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +"[EXPR (biểu thức); not (không phải); and (và); or (hoặc)]\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +"tùy chọn vị trí \t(đúng luôn):\n" +"\t-daystart \t\t(ngày bắt đầu)\n" +"\t-follow \t\t(theo)\n" +"\t-regextype\t\t(kiểu biểu thức chính quy)\n" +"\n" +"tùy chọn thường \t(đúng luôn, hãy ghi rõ trước các biểu thức khác):\n" +"\t-depth \t\t\t(độ sâu)\n" +"\t--help \t\t\t(trợ giúp)\n" +"\t-maxdepth CẤP \t(độ sâu tối đa)\n" +"\t-mindepth CẤP \t(độ sâu tối thiểu)\n" +"\t-mount \t\t(gắn kết)\n" +"\t-noleaf \t\t(không lá)\n" +"\t--version \t\t(phiên bản)\n" +"\t-xdev \t\t\t(chỉ thiết bị này)\n" +"\t-ignore_readdir_race \t\t(bỏ qua thư mục đọc [race])\n" +"\t-noignore_readdir_race \t(đừng bỏ qua thư mục đọc [race])\n" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +"điều thử (N có thể là +N hay -N hay N: ba kiểu cũng được):\n" +"\t-amin N \t\t(tối thiểu)\n" +"\t-anewer TẬP_TIN (mới hơn)\n" +"\t-atime N \t\t(giờ)\n" +"\t-cmin N \t\t(tối thiểu)\n" +"\t-cnewer TẬP_TIN (mới hơn)\n" +"\t-ctime N \t\t(giờ)\n" +"\t-empty \t\t(trống)\n" +"\t-false \t\t\t(sai)\n" +"\t-fstype KIỂU \t(kiểu hệ thống tập tin)\n" +"\t-gid N \t\t\t(thông tin nhận biết nhóm)\n" +"\t-group TÊN \t\t(nhóm)\n" +"\t-ilname MẪU \t(tên)\n" +"\t-iname MẤU \t(tên)\n" +"\t-inum N \t\t(số)\n" +"\t-iwholename MẤU (tên đầy đủ)\n" +"\t-iregex MẤU \t(biểu thức chính quy)\n" +" \t-links N \t\t(liên kết)\n" +"\t-lname MẤU \t(tên)\n" +"\t-mmin N \t\t(tối thiểu)\n" +"\t-mtime N \t\t(giờ)\n" +"\t-name MẤÚ \t(tên)\n" +"\t-newer TẬP_TIN \t(mới hơn)" + +#: find/parser.c:1078 +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +"-nouser \t\t\t(không có người dùng)\n" +"-nogroup \t\t(không có nhóm)\n" +"-path MẪU \t\t(đường dẫn)\n" +"-perm [+-]CHẾ_ĐỘ (vĩnh cửu)\n" +"-regex MẪU \t\t(biểu thức chính quy)\n" +"-readable \t\tđọc được\n" +"-writable \t\tghi được\n" +"-executable\t\tthực hiện được\n" +"-wholename MẪU \t(tên đầy đủ)\n" +"-size N[bcwkMG] \t(cỡ)\n" +"-true \t\t\t(đúng)\n" +"-type [bcdpflsD] \t(kiểu)\n" +"-uid N \t\t\t(ID ngươi dùng)\n" +"-used N \t\t\t(đã dùng)\n" +"-user TÊN \t\t(người dùng)\n" +"-xtype [bcdpfls] \t(kiểu)\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" +"Hành động:\n" +"-delete \t(xóa bỏ)\n" +"\n" +"Lệnh in:\n" +"\t-print0\n" +"\t-printf DẠNG\n" +"\t-fprintf TẬP_TIN DẠNG\n" +"\t-print \n" +"\t-fprint0 TỆP\n" +"\t-fprint FILE\n" +"\n" +"Lệnh liệt kê:\n" +"\t-ls \n" +"\t-fls TỆP\n" +"-prune \t(xén bớt)\n" +"-quit\t\t(thoát)\n" +"\n" +"Lệnh thực hiện:\n" +"\t-exec LỆNH\n" +"\t-exec LỆNH {} + -ok LỆNH\n" +"\t-execdir LỆNH\n" +"\t-execdir LỆNH {} + -okdir LỆNH\n" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"Hãy thông báo (và theo dõi cách sửa chữa) lỗi nào thông qua\n" +"trang thông báo lỗi findutils tại \n" +"hoặc, nếu không có cách truy cập Mạng,\n" +"bằng cách gởi thư cho địa chỉ ." + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "việc kiểm tra sự đúng mực chức năng thư viện « fnmatch() » bị lỗi." + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" +"cảnh báo: tên tập tin Unix thường không chứa sổ chéo (dù tên đường dẫn có " +"phải). Có nghĩa là « %s%s » sẽ rất có thể có kết quả « Sai » luôn luôn trên " +"hệ thống này. Có lẽ việc thử ra « -wholename » (tên đầy đủ) hữu ích hơn cho " +"bạn, hoặc có lẽ « -samefile » (cùng tập tin). Hoặc, nếu bạn có dùng công cụ " +"« grep » của GNU, bạn có thể dùng lệnh « find ... -print0 | grep -FzZ %s »." + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "Đợi đối số kiểu số nguyên thập phân dương tới %s, chỉ nhận %s" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "Hệ thống này không cung cấp cách tìm giờ sinh của tập tin." + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "Không thể tìm biết cách giải thích %s dạng ngày hay giờ" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "Không thể lấy giờ sinh của tập tin %s" + +#: find/parser.c:1788 +#, c-format +msgid "invalid mode %s" +msgstr "chế độ không hợp lệ %s" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" +"cảnh báo : bạn đã xác định một mẫu chế độ %s (bằng /000). Lời nghĩa của « -" +"perm /000 » đã được thay đổi để tương ứng với « -perm -000 »; tức là nó đã " +"từng không khớp với tập tin nào, bây giờ nó khớp với mọi tập tin." + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "đối số rỗng không hợp lệ đối với tùy chọn « -size » (kích cỡ)" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "kiểu « -size » (kích cỡ) không hợp lệ « %c »" + +#: find/parser.c:2058 +#, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "đối số không hợp lệ « %s%c » tới kích cỡ" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" +"Tùy chọn « -show-control-chars » (hiển thị các ký tự điều khiển) chấp nhận " +"một đối số riêng lẻ phải là « literal » (nghĩa chữ) hay « safe » (an toàn)." + +#: find/parser.c:2348 +#, c-format +msgid "Invalid argument %s to -used" +msgstr "Đối số không hợp lệ %s tới « -used » (đã dùng)" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "Các tính năng hoạt động: " + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "Đối số tới « -type » (kiểu) nên chứa chỉ một chữ" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "Đối số không rõ tới « -type » (kiểu): %c" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "cảnh báo : không nhận diện ký tự thoát « \\%c »" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "lỗi: %s ở kết thúc của chuỗi định dạng" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "cảnh báo : không nhận diện chỉ thị định dạng « %%%c »" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "lỗĩ: chỉ thị định dạng « %%%c » dành để dùng trong tương lai" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" +"Gồm thư mục hiện thời trong biến môi trường « PATH » (đường dẫn) mà không an " +"toàn khi được tổ hợp với hành động %s của trình find (tìm). Hãy gỡ bỏ thư " +"mục hiện thời ra « $PATH » của bạn (tức là hãy gỡ bỏ dấu chấm « . » hay ký " +"tự hai chấm nào « : » nằm trước hay nằm theo)." + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" +"Đường dẫn tương đối %s được gồm trong biến môi trường PATH, mà không phải " +"bảo mật cùng với hành động %s của find. Hãy gỡ bỏ mục nhập đó ra $PATH." + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" +"Không cho phép bạn dùng ký tự « {} » bên trong tên tiện ích cho đối số « -" +"execdir » và « -okdir », vì có thể rủi ro bảo mật." + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "Hỗ trợ chỉ một thể hiện « {} » với đối số « -exec%s ... + »" + +#: find/parser.c:3066 +msgid "The environment is too large for exec()." +msgstr "Môi trường quá lớn đối với « exec() » (thì hành)" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "tràn cộng khi thử tính kết thúc của hôm nay" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "thiết bị lỗi chuẩn" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "thiết bị xuất chuẩn" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "Cảnh báo : không thể quyết định giờ sinh của tập tin %s" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "Không thể đóng thiết bị nhập chuẩn" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "Lỗi thay đổi thư mục" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "không thể tạo tiến trình con" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "gặp lỗi khi đời %s" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s bị chấm dứt bởi tín hiệu %d" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "biểu thức không hợp lệ" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" +"biểu thức không hợp lệ; bạn đã dùng toán tử nhị phân « %s » không có gì nằm " +"trước nó." + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "đợi biểu thức giữa « %s » và « ) »" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "đợi biểu thức sau « %s »" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "biểu thức không hợp lệ; có quá nhiều ký tự « ) »" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" +"biểu thức không hợp lệ; đợi ký tự « ) » nhưng chưa gặp. Có thể bạn cần nhập " +"vị ngữ thêm sau « %s »" + +#: find/tree.c:149 +msgid "invalid expression; empty parentheses are not allowed." +msgstr "biểu thức không hợp lệ; không cho phép dấu ngoặc rỗng." + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "biểu thức không hợp lệ; ngờ ký tự « ) » nhưng chưa gặp." + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "rõ tiếc — kiểu biểu thức không hợp lệ." + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "rõ tiếc — kiểu biểu thức không hợp lệ (%d)." + +#: find/tree.c:1228 +#, c-format +msgid "paths must precede expression: %s" +msgstr "đương dẫn phải nằm trước biểu thức: %s" + +#: find/tree.c:1237 +#, c-format +msgid "unknown predicate `%s'" +msgstr "vị ngữ lạ « %s »" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "vị ngữ không hợp lệ « %s »" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "đối số « %s » không hợp lệ đối với « %s »" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "thiếu đối số đối với « %s »" + +#: find/tree.c:1344 +msgid "you have too many ')'" +msgstr "quá nhiều ký tự « ) »" + +#: find/tree.c:1349 +#, c-format +msgid "unexpected extra predicate '%s'" +msgstr "gặp vị ngữ thêm bất thường « %s »" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "gặp vị ngữ thêm bất ngờ" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "rỗ tiếc — việc chèn mặc định điều « and » một cách không hợp lệ." + +#: find/util.c:157 +#, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Cách sử dụng: %s [-H] [-L] [-P] [-Ocấp] [-D " + +#: find/util.c:159 +#, c-format +msgid "] [path...] [expression]\n" +msgstr "] [đường dẫn...] [biểu thức]\n" + +#: find/util.c:748 +#, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "Đang bỏ qua cờ gỡ lỗi không nhận diện %s" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "Đối số rỗng tới tùy chọn « -D »" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "Tùy chọn « -O » phải có một số nguyên thập phân theo đúng sau" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "Hãy ghi rõ một số thập phân đúng sau « -O »" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "Cấp tối ưu hoá không hợp lệ %s" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" +"Cấp tối ưu hoá %lu quá cao. Để tìm nhanh tập tin, khuyên bạn dùng phần mềm " +"locate của GNU." + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"Không hỗ trợ biến môi trường « FIND_BLOCK_SIZE » (tim kích cỡ của khối) thì " +"chỉ một điều làm ảnh hướng đến kích cỡ của khối: biến môi trường « " +"POSIXLY_CORRECT » (đúng kiểu Posix)" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" + +#: lib/buildcmd.c:293 +#, fuzzy +msgid "argument list too long" +msgstr "dòng đối số quá dài" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "Xây dựng dùng gnulib phiên bản %s của GNU\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"Cách sử dụng: %s [--version | --help]\n" +"\t\t\t\t\t(phiên bản, trợ giúp)\n" +"hoặc\n" +"%s gần_hết_chữ_đôi_thường < danh_sách_tập_tin > cơ_sở_dữ_liệu_định_vị\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Hãy thông báo lỗi nào cho .\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +#, fuzzy +msgid "Failed to write to standard output" +msgstr "thiết bị xuất chuẩn" + +#: locate/locate.c:150 +msgid "days" +msgstr "ngày" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "" +"Không cho phép đối số đối số rỗng cho tùy chọn « --max-database-age » (tuổi " +"cơ sở dữ liệu tối đa)" + +#: locate/locate.c:213 locate/locate.c:220 +#, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "" +"đối số %s không hợp lệ cho tùy chọn « --max-database-age » (tuổi cơ sở dữ " +"liệu tối đa)" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "cơ sở dữ liệu locate %s chứa một tên tập tin dài hơn ngưỡng của locate" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "cơ sở dữ liệu locate (định vị) %s bị hỏng hay không hợp lệ" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "Kích cỡ của cơ sở dữ liệu định vị: %s bytes\n" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "Tên tập tin khớp: %s " + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "Mọi tên tập tin: %s " + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "có độ dài lũy tích là %s byte" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" +"\n" +"\ttrong đó có %s chứa dấu cách, " + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" +"\n" +"\t%s chứa ký tự dòng mới, " + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" +"\n" +"\tvà %s chứa ký tự đặt bộ bit cao.\n" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "Một số tập tin có thể bị lọc ra thì không thể tính tỷ lệ nén.\n" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "Tỷ lệ nén %4.2f%% (cao hơn thì tốt hơn)\n" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "Tỷ lệ nén không xác định.\n" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" +"cơ sở dữ liệu locate (định vị) %s hình như cơ sở dữ liệu slocate, nhưng có " +"vẻ là nó có cấp bảo mật %c mà findutils của GNU không hiện thời hỗ trợ" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" +"%s là cơ sở dữ liệu kiểu slocate. Chỉ bắt đầu hỗ trợ kiểu này: có thể gặp " +"lỗi." + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" +"%s là cơ sở dữ liệu kiểu slocate có cấp bảo mật không được hỗ trợ %d nên bỏ " +"qua nó." + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" +"Bạn đã ghi rõ tùy chọn « -E », nhưng tùy chọn đó không thể được dùng với cơ " +"sở dữ liệu định dạng slocate có cấp bảo mật khác số không. Vi thế không tạo " +"ra kết quả cho cơ sở dữ liệu này.\n" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "%s là cơ sở dữ liệu kiểu slocate nên bật tùy chọn « -e »." + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "Cơ sở dữ liệu locate định dạng cũ %s quá ngắn để hợp lệ" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "Cơ sở dư liệu %s có dạng thức %s.\n" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "Cơ sở dữ liệu này có mã hoá từ-máy về cuối nhỏ.\n" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "Cơ sở dữ liệu này có mã hoá từ-máy về cuối lớn.\n" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "Thứ tự mã hoá từ-máy của cơ sở dữ liệu này không phải hiển nhiên.\n" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"Cách sử dụng: %s [-d đường_dẫn | --database=đường_dẫn] (cơ sở dữ liệu)\n" +"[-e | -E| --[non-] existing] \t\t([không] tồn tại)\n" +"[-i | --ignore-case] \t(bỏ qua chữ hoa/thường)\n" +"[-w | --wholename] \t(tên đầy đủ)\n" +"[-b | --basename] \t\t(tên cơ sở)\n" +"[--limit=N | -l N] \t\t(giới hạn)\n" +"[-S | --statistics] \t\t(thống kê)\n" +"[-0 | --null] \t\t\t(rỗng)\n" +"[-c | --count] \t\t\t(số đếm)\n" +"[-P | -H | --nofollow] \t(không đi theo)\n" +"[-L | --follow] \t\t(đi theo)\n" +"[-m | --mmap ] \t\t(bản đồ m)\n" +"[ -s | --stdio ] \t\t(thiết bị nhập/xuất)\n" +"[-A | --all] \t\t\t(tất cả)\n" +"[-p | --print]\t\t\t(in)\n" +"[-r | --regex ] \t\t(biểu thức chính quy)\n" +"[--regextype=KIỂU]\t\tkiểu biểu thức chính quy\n" +"[--max-database-age D]\t\t(tuổi cơ sở dữ liệu tối đa)\n" +"[--version] \t\t\t(phiên bản)\n" +"[--help] mẫu... \t\t(trợ giúp)\n" +"pattern...\t\t\t\t(mẫu)\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "lỗi bỏ quyền hạn nhóm" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "lỗi bỏ quyền hạn setuid" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "Lỗi bỏ hoàn toàn quyền hạn" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "lỗi bỏ quyền hạn setgid" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" +"cảnh báo : cơ sở dữ liệu định vị có thể được đọc từ thiết bị xuất chuẩn chỉ " +"một lần thôi." + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "cảnh báo : cơ sở dữ liệu %s cũ hơn %d %s (thật là %.1f %s)" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "gặp vị ngữ thêm bất thường « %s »" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "gặp lỗi khi đời %s" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "Gặp dãy thoát không hợp lệ « %s » trong đặc tả giới hạn dữ liệu nhập" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" +"Gặp dãy thoát không hợp lệ « %s » trong đặc tả giới hạn dữ liệu nhập: không " +"cho phép giá trị ký tự vượt trội %lx." + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" +"Gặp dãy thoát không hợp lệ « %s » trong đặc tả giới hạn dữ liệu nhập: không " +"cho phép giá trị ký tự vượt trội %lo." + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" +"Gặp dãy thoát không hợp lệ « %s » trong đặc tả giới hạn dữ liệu nhập: không " +"nhận diện ký tự « %s » nằm theo." + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" +"Gặp đặc tả giới hận dữ liệu nhập không hợp lệ « %s »: dấu giới hạn phải là " +"hoặc một ký tự đơn hoặc một dãy thoát bắt đầu với « \\ »." + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "môi trường quá lớn đối với « exec » (thì hành)" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" +"cảnh báo : giá trị %ld cho tùy chọn « -s » quá lớn nên dùng %ld thay thế" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "Không thể mở tập tin nhập %s" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "Các biến môi trường chiếm %lu byte\n" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "Giới hạn POSIX trên về độ dài đối số (hệ thống này): %lu\n" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" +"Giới hạn POSIX trên nhỏ nhất cho phép về độ dài đối số (mọi hệ thống): %lu\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "Độ dài lệnh tối đa mà thật có thể dùng: %ld\n" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "Kích cỡ của bộ đệm lệnh thật đang dùng: %lu\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" +"\n" +"Bây giờ sẽ tiếp tục thực hiện xargs, cũng thử đọc các lệnh nhập/xuất của nó. " +"Không muốn thì gõ phím kết thúc tập tin.\n" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" +"Cảnh báo : %s sẽ được chạy ít nhất một lần. Không muốn thì bấm phím ngắt.\n" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"chưa khớp với dấu trích dẫn %s; mặc định là mọi dấu trích dẫn là đặc biệt " +"với xargs nếu không dùng tùy chọn « -0 »" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "đôi" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "đơn" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" +"cảnh báo : dữ liệu nhập chứa ký tự vô giá trị (NULL). Không thể gửi nó qua " +"trong danh sách đối số. Bạn thật sự muốn sử dụng tùy chọn « -null » không?" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "dòng đối số quá dài" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "gặp lỗi khi đời tiến trình con" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: đã thoát với trạng thái 255; nên hủy bỏ" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: bị ngừng bởi tín hiệu %d" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: bị chấm dứt bởi tín hiệu %d" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: số không hợp lệ đối với tùy chọn « -%c »\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: giá trị cho tùy chọn « -%c » nên là ≥ %ld\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: giá trị cho tùy chọn « -%c » nên là < %ld\n" + +#: xargs/xargs.c:1306 +#, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"Cách sử dụng: %s [-0prtx]\n" +"[--interactive]\t\ttương tác\n" +" [--null]\t\t\trỗng\n" +" [-d|--delimiter=dấu_giới_hạn]\n" +"[-E eof-str] [-e[eof-str]] [--eof[=eof-str]] (chuỗi kết thúc tập tin)\n" +"[-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +"\t(số dòng tối đa)\n" +"[-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +"\t(thay thế chuỗi)\n" +"[-n max-args] [--max-args=max-args] (số đối số tối đa)\n" +"[-s max-chars] [--max-chars=max-chars] (số ký tự tối đa)\n" +"[-P max-procs] [--max-procs=max-procs] (số tiến trình tối đa)\n" +"[--verbose]\t\t\t\t\t\t(xuất chi tiết)\n" +"[--exit] \t\t\t\t\t\t\t(thoát)\n" +"[--no-run-if-empty] \t\t(đừng chạy nếu trống)\n" +"[--arg-file=tập_tin]\t\t\t\t(tập tin đối số)\n" +"[--version]\t\t\t\t\t\t(phiên bản)\n" +"[--help]\t\t\t\t\t\t\t(trợ giúp)\n" +"[lệnh [các_đối_số_đầu]]\n" + +#~ msgid "block size" +#~ msgstr "cỡ khối" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "" +#~ "cảnh báo : vị ngữ « -ipath » (đường dẫn) bị phản đối thì hãy dùng tùy " +#~ "chọn « -iwholename » (tên đầy đủ) thay thế." + +#~ msgid "GNU find version %s\n" +#~ msgstr "Trình find (tìm) phiên bản %s của GNU\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "Trình findutils phiên bản %s của GNU\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "Trình locate (định vị) phiên bản %s cua GNU\n" + +#~ msgid "argument to --limit" +#~ msgstr "đối số đối với « --limit » (giới hạn)" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "Trình xargs (đối số x) phiên bản %s của GNU\n" diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000..1fa9c22 --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,1299 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2002 Free Software Foundation, Inc. +# Wang Li , 2002. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.1.7\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2002-09-03 14:29+0800\n" +"Last-Translator: Wang Li \n" +"Language-Team: Chinese (simplified) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=gb2312\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: gnulib/lib/argmatch.c:133 +#, fuzzy, c-format +msgid "invalid argument %s for %s" +msgstr "¡°%2$s¡±µÄ²ÎÊý %1$s ÎÞЧ" + +#: gnulib/lib/argmatch.c:134 +#, fuzzy, c-format +msgid "ambiguous argument %s for %s" +msgstr "¡°%2$s¡±µÄ²ÎÊý %1$s ÓжþÒåÐÔ" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "ºÏ·¨µÄ²ÎÊýΪ£º" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "δ֪µÄϵͳ´íÎó" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s£ºÑ¡Ïî¡°%s¡±ÓжþÒåÐÔ\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s£ºÑ¡Ïî¡°--%s¡±²»½ÓÊܲÎÊý\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s£ºÑ¡Ïî¡°%c%s¡±²»½ÓÊܲÎÊý\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s£ºÑ¡Ïî¡°%s¡±ÐèÒªÒ»¸ö²ÎÊý\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s£ºÎÞ·¨Ê¶±ðµÄÑ¡Ïî¡°--%s¡±\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s£ºÎÞ·¨Ê¶±ðµÄÑ¡Ïî¡°%c%s¡±\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s£º·Ç·¨Ñ¡Ïî -- %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s£º·Ç·¨Ñ¡Ïî -- %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s£ºÑ¡ÏîÐèÒªÒ»¸ö²ÎÊý -- %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s£ºÑ¡Ïî¡°-W %s¡±ÓжþÒåÐÔ\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s£ºÑ¡Ïî¡°-W %s¡±²»½ÓÊܲÎÊý\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "ÎÞ·¨»ñÈ¡µ±Ç°Ä¿Â¼" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "¡°" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "¡±" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "³É¹¦" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "ûÓÐÆ¥Åä" + +#: gnulib/lib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "ÎÞЧµÄ³£¹æ±í´ïʽ" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "ÎÞЧµÄУ¿±×Ö·û" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "ÎÞЧµÄ×Ö·ûÀàÃû" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "ĩβµÄ·´Ð±Ïß" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "ÎÞЧµÄÏòºóÒýÓÃ" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "²»Æ¥ÅäµÄ [ »ò [^" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "²»Æ¥ÅäµÄ ( »ò \\(" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "²»Æ¥ÅäµÄ \\{" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "ÎÞЧµÄ \\{\\} µÄÄÚÈÝ" + +#: gnulib/lib/regcomp.c:164 +#, fuzzy +msgid "Invalid range end" +msgstr "ÎÞЧµÄÏòºóÒýÓÃ" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "ÄÚ´æºÄ¾¡" + +#: gnulib/lib/regcomp.c:170 +#, fuzzy +msgid "Invalid preceding regular expression" +msgstr "ÎÞЧµÄ³£¹æ±í´ïʽ" + +#: gnulib/lib/regcomp.c:173 +#, fuzzy +msgid "Premature end of regular expression" +msgstr "ÎÞЧµÄ³£¹æ±í´ïʽ" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "³£¹æ±í´ïʽ¹ý´ó" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "²»Æ¥ÅäµÄ ) »ò \\)" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "ûÓÐÉÏÒ»¸ö³£¹æ±í´ïʽ" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[yY]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +#, fuzzy +msgid "memory exhausted" +msgstr "ÄÚ´æºÄ¾¡" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "¡°%2$s¡±µÄÎÞЧ²ÎÊý¡°%1$s¡±" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "¡°%2$s¡±µÄÎÞЧ²ÎÊý¡°%1$s¡±" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "²ÎÊýÁбí¹ý³¤" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "ÎÞ·¨»ñÈ¡µ±Ç°Ä¿Â¼" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "ÎÞ·¨»ñÈ¡µ±Ç°Ä¿Â¼" + +#: find/find.c:384 +#, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "" + +#: find/find.c:394 +#, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "" + +#: find/find.c:490 +#, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:527 +#, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "δ֪" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +#, fuzzy +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"ĬÈÏ·¾¶Îªµ±Ç°Ä¿Â¼£»Ä¬Èϱí´ïʽΪ -print\n" +"±í´ïʽ¿ÉÄÜÓÉÏÂÁгɷÝ×é³É£º\n" +"²Ù×÷·û (ÓÅÏȼ¶µÝ¼õ; ÔÚûÓиø³öÆäËü²Ù×÷·ûʱ£¬Òþº¬ -and)£º\n" +" ( ±í´ïʽ ) ! ±í´ïʽ -not ±í´ïʽ ±í´ïʽ1 -a ±í´ïʽ2 ±í´ïʽ1 -and ±í´ïʽ" +"2\n" + +#: find/parser.c:1064 +#, fuzzy +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"ĬÈÏ·¾¶Îªµ±Ç°Ä¿Â¼£»Ä¬Èϱí´ïʽΪ -print\n" +"±í´ïʽ¿ÉÄÜÓÉÏÂÁгɷÝ×é³É£º\n" +"²Ù×÷·û (ÓÅÏȼ¶µÝ¼õ; ÔÚûÓиø³öÆäËü²Ù×÷·ûʱ£¬Òþº¬ -and)£º\n" +" ( ±í´ïʽ ) ! ±í´ïʽ -not ±í´ïʽ ±í´ïʽ1 -a ±í´ïʽ2 ±í´ïʽ1 -and ±í´ïʽ" +"2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" + +#: find/parser.c:1073 +#, fuzzy +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +" -cnewer Îļþ -ctime N -empty -false -fstype ÀàÐÍ -gid N -group Ãû³Æ\n" +" -ilname Æ¥Åäģʽ -iname Æ¥Åäģʽ -inum N -ipath Æ¥Åäģʽ -iregex Æ¥ÅäÄ£" +"ʽ\n" +" -links N -lname Æ¥Åäģʽ -mmin N -mtime N -name Æ¥Åäģʽ -newer Îļþ\n" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path Æ¥Åäģʽ -perm [+-]·ÃÎÊģʽ -regex Æ¥Åäģʽ\n" +" -size N[bckw] -true -type [bcdpfls] -uid N -used N -user Ãû³Æ\n" +" -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "" + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "·Ç·¨Ä£Ê½¡°%s¡±" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "-size µÄ null ²ÎÊýÎÞЧ" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "ÎÞЧµÄ -size ÀàÐÍ¡°%c¡±" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "¡°%2$s¡±µÄÎÞЧ²ÎÊý¡°%1$s¡±" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "¡°%2$s¡±µÄ²ÎÊý %1$s ÎÞЧ" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "¾´¸æ£ºÎÞ·¨Ê¶±ðµÄתÒå×Ö·û¡°\\%c¡±" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "¾¯¸æ£º²»¿Éʶ±ðµÄ¸ñʽָÁî¡°%%%c¡±" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" + +#: find/parser.c:2921 +#, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "¶Ô exec À´Ëµ»·¾³¹ý´ó" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "ÎÞ·¨ fork" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "µÈ´ý %s ʱ³ö´í" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s ÓÉÓÚÐźŠ%d ¶øÖÕÖ¹" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "·Ç·¨±í´ïʽ" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "" + +#: find/tree.c:121 +#, fuzzy +msgid "invalid expression; you have too many ')'" +msgstr "·Ç·¨±í´ïʽ" + +#: find/tree.c:143 +#, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "·Ç·¨±í´ïʽ" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "°¥Ñ½ -- ÎÞЧµÄ±í´ïʽÀàÐÍ£¡" + +#: find/tree.c:231 +#, fuzzy, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "°¥Ñ½ -- ÎÞЧµÄ±í´ïʽÀàÐÍ£¡" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "·¾¶±ØÐëÔÚ±í´ïʽ֮ǰ" + +#: find/tree.c:1237 +#, fuzzy, c-format +msgid "unknown predicate `%s'" +msgstr "ÎÞЧ¶ÏÑÔ¡°%s¡±" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "ÎÞЧ¶ÏÑÔ¡°%s¡±" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "¡°%2$s¡±µÄÎÞЧ²ÎÊý¡°%1$s¡±" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "ÒÅ©¡°%s¡±µÄ²ÎÊý" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "·Ç·¨±í´ïʽ" + +#: find/tree.c:1349 +#, fuzzy, c-format +msgid "unexpected extra predicate '%s'" +msgstr "ÎÞЧ¶ÏÑÔ¡°%s¡±" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "Ó÷¨£º%s [·¾¶...] [±í´ïʽ]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "Ó÷¨£º%s [·¾¶...] [±í´ïʽ]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "¾´¸æ£ºÎÞ·¨Ê¶±ðµÄתÒå×Ö·û¡°\\%c¡±" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "ÃüÁî¹ý³¤" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" + +#: lib/buildcmd.c:293 +msgid "argument list too long" +msgstr "²ÎÊýÁбí¹ý³¤" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU find °æ±¾ %s\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +#, fuzzy +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"½«´íÎ󱨸浽 ¡£" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "Ìì" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "¡°%2$s¡±µÄÎÞЧ²ÎÊý¡°%1$s¡±" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "¡°%2$s¡±µÄÎÞЧ²ÎÊý¡°%1$s¡±" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "" + +#: locate/locate.c:899 +#, c-format +msgid "Matching Filenames: %s " +msgstr "" + +#: locate/locate.c:900 +#, c-format +msgid "All Filenames: %s " +msgstr "" + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "" + +#: locate/locate.c:941 +#, c-format +msgid "Compression ratio is undefined\n" +msgstr "" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "¾´¸æ£ºÊý¾Ý¿â¡°%s¡±±È %d %s »¹³Â¾É" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, fuzzy, c-format +msgid "unexpected EOF in %s" +msgstr "ÎÞЧ¶ÏÑÔ¡°%s¡±" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "µÈ´ý %s ʱ³ö´í" + +#: xargs/xargs.c:303 +#, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "" + +#: xargs/xargs.c:321 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "" + +#: xargs/xargs.c:327 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "" + +#: xargs/xargs.c:336 +#, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "" + +#: xargs/xargs.c:381 +#, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "¶Ô exec À´Ëµ»·¾³¹ý´ó" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, c-format +msgid "Cannot open input file %s" +msgstr "" + +#: xargs/xargs.c:688 +#, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "" + +#: xargs/xargs.c:691 +#, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "" + +#: xargs/xargs.c:694 +#, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "" + +#: xargs/xargs.c:701 +#, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "˫" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "µ¥" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "²ÎÊýÐйý³¤" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "µÈ´ý×Ó½ø³Ìʱ³ö´í" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s£ºÒÔ״̬ 255 Í˳ö£»ÖÐÖ¹" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s£ºÒòÐźŠ%d ¶øÍ£Ö¹" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s£ºÒòÐźŠ%d ¶øÖÕÖ¹" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s£ºÑ¡Ïî -%c µÄÊýÖµÎÞЧ\n" + +#: xargs/xargs.c:1274 +#, fuzzy, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s£ºÑ¡Ïî -%c µÄÖµ±ØÐë >= %ld\n" + +#: xargs/xargs.c:1288 +#, fuzzy, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s£ºÑ¡Ïî -%c µÄÖµ±ØÐë < %ld\n" + +#: xargs/xargs.c:1306 +#, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" + +#~ msgid "block size" +#~ msgstr "¿é´óС" + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find °æ±¾ %s\n" + +#, fuzzy +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU find °æ±¾ %s\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate °æ±¾ %s\n" + +#, fuzzy +#~ msgid "argument to --limit" +#~ msgstr "²ÎÊýÐйý³¤" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs °æ±¾ %s\n" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "°¥Ñ½ -- ÎÞЧµÄ±í´ïʽÀàÐÍ£¡" + +#, fuzzy +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "°¥Ñ½ -- ÎÞЧµÄ±í´ïʽÀàÐÍ£¡" + +#, fuzzy +#~ msgid "" +#~ "actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n" +#~ " -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -" +#~ "delete\n" +#~ " -quit\n" +#~ msgstr "" +#~ "¶¯×÷£º-exec ÃüÁî ; -fprint Îļþ -fprint0 Îļþ -fprintf Îļþ ¸ñʽ\n" +#~ " -ok ÃüÁî ; -print -print0 -printf ¸ñʽ -prune -ls\n" + +#~ msgid "Predicate List:\n" +#~ msgstr "¶ÏÑÔÁÐ±í£º\n" + +#~ msgid "Eval Tree:\n" +#~ msgstr "ÇóÖµÊ÷£º\n" + +#~ msgid "Optimized Eval Tree:\n" +#~ msgstr "ÓÅ»¯µÄÇóÖµÊ÷£º\n" + +#, fuzzy +#~ msgid "Optimized command line:\n" +#~ msgstr "ÓÅ»¯µÄÇóÖµÊ÷£º\n" + +#~ msgid "virtual memory exhausted" +#~ msgstr "ÐéÄâÄÚ´æºÄ¾¡" + +#~ msgid "inserting %s\n" +#~ msgstr "ÕýÔÚ²åÈë %s\n" + +#~ msgid " type: %s %s " +#~ msgstr " ÀàÐÍ£º%s %s " + +#~ msgid "left:\n" +#~ msgstr "×ó£º\n" + +#~ msgid "right:\n" +#~ msgstr "ÓÒ£º\n" + +#~ msgid "%s changed during execution of %s" +#~ msgstr "ÔÚÖ´ÐÐ %2$s ÆÚ¼ä %1$s ±»¸Ä±ä" + +#~ msgid "%s/.. changed during execution of %s" +#~ msgstr "ÔÚÖ´ÐÐ %2$s ÆÚ¼ä %1$s/.. ±»¸Ä±ä" + +#~ msgid "error in %s: %s" +#~ msgstr "%s ÖеĴíÎó£º%s" + +#~ msgid "" +#~ " EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +#~ "options (always true): -daystart -depth -follow --help\n" +#~ " -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev\n" +#~ "tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +#~ msgstr "" +#~ " ±í´ïʽ1 -o ±í´ïʽ2 ±í´ïʽ1 -or ±í´ïʽ2 ±í´ïʽ1 , ±í´ïʽ2\n" +#~ "Ñ¡Ïî (×ÜΪÕæ)£º-daystart -depth -follow --help\n" +#~ " -maxdepth ²ã´ÎÊý -mindepth ²ã´ÎÊý -mount -noleaf --version -xdev\n" +#~ "²âÊÔ (N ¿ÉÒÔΪ +N »ò -N »ò N)£º-amin N -anewer Îļþ -atime N -cmin N\n" + +#~ msgid "" +#~ "Usage: %s [-d path | --database=path] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] pattern...\n" +#~ msgstr "" +#~ "Ó÷¨£º%s [-d ·¾¶ | --database=·¾¶] [-e | --existing]\n" +#~ " [-i | --ignore-case] [--version] [--help] ģʽ...\n" + +#~ msgid "unmatched %s quote" +#~ msgstr "²»Æ¥ÅäµÄ%sÒýºÅ" diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100644 index 0000000..258a90a --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,1283 @@ +# traditional Chinese translation of findutils. +# Copyright (C) 2005 Free Software Foundation, Inc. +# Abel Cheung , 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: findutils 4.2.26\n" +"Report-Msgid-Bugs-To: bug-findutils@gnu.org\n" +"POT-Creation-Date: 2007-11-13 11:10+0000\n" +"PO-Revision-Date: 2005-12-06 11:30+0800\n" +"Last-Translator: Abel Cheung \n" +"Language-Team: Chinese (traditional) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gnulib/lib/argmatch.c:133 +#, c-format +msgid "invalid argument %s for %s" +msgstr "%2$s 的參數 %1$s 無效" + +#: gnulib/lib/argmatch.c:134 +#, c-format +msgid "ambiguous argument %s for %s" +msgstr "%2$s 的參數 %1$s 不明確" + +#: gnulib/lib/argmatch.c:153 +#, c-format +msgid "Valid arguments are:" +msgstr "有效的參數為:" + +#: gnulib/lib/closein.c:99 +msgid "error closing file" +msgstr "" + +#: gnulib/lib/closeout.c:73 locate/code.c:152 locate/frcode.c:216 +msgid "write error" +msgstr "" + +#: gnulib/lib/error.c:125 +msgid "Unknown system error" +msgstr "不明的系統錯誤" + +#: gnulib/lib/getopt.c:530 gnulib/lib/getopt.c:546 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s:選項 ‘%s’ 不明確\n" + +#: gnulib/lib/getopt.c:579 gnulib/lib/getopt.c:583 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s:選項 ‘--%s’ 不可配合參數使用\n" + +#: gnulib/lib/getopt.c:592 gnulib/lib/getopt.c:597 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s:選項 ‘%c%s’ 不可配合參數使用\n" + +#: gnulib/lib/getopt.c:640 gnulib/lib/getopt.c:659 gnulib/lib/getopt.c:975 +#: gnulib/lib/getopt.c:994 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s:選項 ‘%s’ 需要參數\n" + +#: gnulib/lib/getopt.c:697 gnulib/lib/getopt.c:700 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s:‘--%s’ 選項無法辨識\n" + +#: gnulib/lib/getopt.c:708 gnulib/lib/getopt.c:711 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s:‘%c%s’ 選項無法辨識\n" + +#: gnulib/lib/getopt.c:763 gnulib/lib/getopt.c:766 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s:不合法的選項 ─ %c\n" + +#: gnulib/lib/getopt.c:772 gnulib/lib/getopt.c:775 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s:無效的選項 ─ %c\n" + +#: gnulib/lib/getopt.c:827 gnulib/lib/getopt.c:843 gnulib/lib/getopt.c:1047 +#: gnulib/lib/getopt.c:1065 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s:選項需要參數 ─ %c\n" + +#: gnulib/lib/getopt.c:896 gnulib/lib/getopt.c:912 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s:選項 ‘-W %s’ 不明確\n" + +#: gnulib/lib/getopt.c:936 gnulib/lib/getopt.c:954 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s:選項 ‘-W %s’ 不可配合參數使用\n" + +#: gnulib/lib/openat-die.c:33 +#, fuzzy +msgid "unable to record current working directory" +msgstr "無法決定當前目錄位置" + +#: gnulib/lib/openat-die.c:46 +msgid "failed to return to initial working directory" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". If the catalog has no translation, +#. locale_quoting_style quotes `like this', and +#. clocale_quoting_style quotes "like this". +#. +#. For example, an American English Unicode locale should +#. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and +#. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION +#. MARK). A British English Unicode locale should instead +#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and +#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. +#. +#. If you don't know what to put here, please see +#. +#. and use glyphs suitable for your language. +#: gnulib/lib/quotearg.c:228 +msgid "`" +msgstr "‘" + +#: gnulib/lib/quotearg.c:229 +msgid "'" +msgstr "’" + +#: gnulib/lib/regcomp.c:131 +msgid "Success" +msgstr "" + +#: gnulib/lib/regcomp.c:134 +msgid "No match" +msgstr "" + +#: gnulib/lib/regcomp.c:137 +#, fuzzy +msgid "Invalid regular expression" +msgstr "表達式無效" + +#: gnulib/lib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: gnulib/lib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: gnulib/lib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: gnulib/lib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: gnulib/lib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "" + +#: gnulib/lib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "" + +#: gnulib/lib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "" + +#: gnulib/lib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: gnulib/lib/regcomp.c:164 +#, fuzzy +msgid "Invalid range end" +msgstr "%2$s 的參數 %1$s 無效" + +#: gnulib/lib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "" + +#: gnulib/lib/regcomp.c:170 +#, fuzzy +msgid "Invalid preceding regular expression" +msgstr "表達式無效" + +#: gnulib/lib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: gnulib/lib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "" + +#: gnulib/lib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "" + +#: gnulib/lib/regcomp.c:680 +msgid "No previous regular expression" +msgstr "" + +#: gnulib/lib/rpmatch.c:69 +msgid "^[yY]" +msgstr "^[yY]" + +#: gnulib/lib/rpmatch.c:72 +msgid "^[nN]" +msgstr "^[nN]" + +#: gnulib/lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "" + +#: gnulib/lib/xstrtol-error.c:63 +#, fuzzy, c-format +msgid "invalid %s%s argument `%s'" +msgstr "‘%2$s’ 的參數 ‘%1$s’ 無效" + +#: gnulib/lib/xstrtol-error.c:68 +#, fuzzy, c-format +msgid "invalid suffix in %s%s argument `%s'" +msgstr "‘%2$s’ 的參數 ‘%1$s’ 無效" + +#: gnulib/lib/xstrtol-error.c:72 +#, fuzzy, c-format +msgid "%s%s argument `%s' too large" +msgstr "參數太長" + +#: find/find.c:200 find/ftsfind.c:730 +msgid "cannot get current directory" +msgstr "無法決定當前目錄位置" + +#: find/find.c:204 +#, fuzzy +msgid "cannot stat current directory" +msgstr "無法決定當前目錄位置" + +#: find/find.c:384 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been unmounted." +msgstr "警告︰檔案系統 %s 剛剛被卸載。" + +#: find/find.c:394 +#, fuzzy, c-format +msgid "Warning: file system %s has recently been mounted." +msgstr "警告︰檔案系統 %s 剛剛被掛載。" + +#: find/find.c:490 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old device number %ld, new device " +"number %ld, file system type is %s) [ref %ld]" +msgstr "" +"執行 %3$s 時 %1$s%2$s 有所更改 (舊裝置編號為 %4$ld,新裝置編號為 %5$ld,檔案" +"系統類型為 %6$s) [ref %7$ld]" + +#: find/find.c:527 +#, fuzzy, c-format +msgid "" +"%s%s changed during execution of %s (old inode number %ld, new inode number %" +"ld, file system type is %s) [ref %ld]" +msgstr "" +"執行 %3$s 時 %1$s%2$s 有所更改 (舊 inode 編號為 %4$ld,新 inode 編號為 %5" +"$ld,檔案系統類型為 %6$s) [ref %7$ld]" + +#: find/find.c:992 +#, c-format +msgid "Failed to safely change directory into %s" +msgstr "" + +#: find/find.c:1089 find/ftsfind.c:284 +#, c-format +msgid "" +"Symbolic link %s is part of a loop in the directory hierarchy; we have " +"already visited the directory to which it points." +msgstr "" + +#: find/find.c:1104 +#, c-format +msgid "" +"Filesystem loop detected; %s has the same device number and inode as a " +"directory which is %d %s." +msgstr "" + +#: find/find.c:1108 +msgid "level higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1109 +msgid "levels higher in the file system hierarchy" +msgstr "" + +#: find/find.c:1354 +#, c-format +msgid "warning: not following the symbolic link %s" +msgstr "" + +#: find/find.c:1398 +#, c-format +msgid "" +"WARNING: Hard link count is wrong for %s (saw only st_nlink=%d but we " +"already saw %d subdirectories): this may be a bug in your file system " +"driver. Automatically turning on find's -noleaf option. Earlier results " +"may have failed to include directories that should have been searched." +msgstr "" + +#: find/fstype.c:250 +msgid "unknown" +msgstr "" + +#: find/ftsfind.c:298 +#, c-format +msgid "" +"File system loop detected; %s is part of the same file system loop as %s." +msgstr "" + +#: find/ftsfind.c:488 find/util.c:200 +#, c-format +msgid "Warning: file %s appears to have mode 0000" +msgstr "" + +#: find/ftsfind.c:610 +#, c-format +msgid "cannot search %s" +msgstr "" + +#: find/parser.c:487 +#, c-format +msgid "" +"warning: you have specified the %s option after a non-option argument %s, " +"but options are not positional (%s affects tests specified before it as well " +"as those specified after it). Please specify options before other " +"arguments.\n" +msgstr "" + +#: find/parser.c:772 +msgid "" +"warning: the -d option is deprecated; please use -depth instead, because the " +"latter is a POSIX-compliant feature." +msgstr "" +"警告:-d 選項已經過時,請改用 -depth,因為後者才是符合 POSIX 標準的選項。" + +#: find/parser.c:1022 +#, c-format +msgid "" +"%s is not the name of an existing group and it does not look like a numeric " +"group ID because it has the unexpected suffix %s" +msgstr "" + +#: find/parser.c:1035 +#, c-format +msgid "%s is not the name of an existing group" +msgstr "" + +#: find/parser.c:1040 +msgid "argument to -group is empty, but should be a group name" +msgstr "" + +#: find/parser.c:1061 +msgid "" +"\n" +"default path is the current directory; default expression is -print\n" +"expression may consist of: operators, options, tests, and actions:\n" +msgstr "" +"\n" +"預設路徑為目前的目錄,預設的表達式是 -print\n" +"表達式可以包括運算子、選項、測試和操作模式:\n" + +#: find/parser.c:1064 +msgid "" +"operators (decreasing precedence; -and is implicit where no others are " +"given):\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" +msgstr "" +"以下的運算子優先次序由高至低排列;如果沒有運算子,則會假設為 -and :\n" +" ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2\n" +" EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2\n" + +#: find/parser.c:1068 +msgid "" +"positional options (always true): -daystart -follow -regextype\n" +"\n" +"normal options (always true, specified before other expressions):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" +msgstr "" +"位置選項 (邏輯值永遠為 true): -daystart -follow -regextype\n" +"\n" +"一般選項 (邏輯值永遠為 true,必須加在其它表達式之前):\n" +" -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n" +" --version -xdev -ignore_readdir_race -noignore_readdir_race\n" + +#: find/parser.c:1073 +msgid "" +"tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" +msgstr "" +"測試 (N 可以有或沒有正負號): -amin N -anewer FILE -atime N -cmin N\n" +" -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n" +" -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex " +"PATTERN\n" +" -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE" + +#: find/parser.c:1078 +#, fuzzy +msgid "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -readable -writable -executable\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" +msgstr "" +" -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n" +" -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n" +" -used N -user NAME -xtype [bcdpfls]\n" + +#: find/parser.c:1083 +msgid "" +"actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" +msgstr "" +"操作模式: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n" +" -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n" +" -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n" +" -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;\n" + +#: find/parser.c:1089 +msgid "" +"Report (and track progress on fixing) bugs via the findutils bug-reporting\n" +"page at http://savannah.gnu.org/ or, if you have no web access, by sending\n" +"email to ." +msgstr "" +"請在 http://savannah.gnu.org/ 有關錯誤報告的網頁中匯報錯誤 (或者跟進\n" +"問題修正的進度)。又或者如果您無法瀏覽網頁,可以選擇用電子郵件寄至\n" +"。" + +#: find/parser.c:1143 +msgid "sanity check of the fnmatch() library function failed." +msgstr "測試 fnmatch() 是否可用時出錯。" + +#: find/parser.c:1157 +#, c-format +msgid "" +"warning: Unix filenames usually don't contain slashes (though pathnames " +"do). That means that '%s %s' will probably evaluate to false all the time " +"on this system. You might find the '-wholename' test more useful, or " +"perhaps '-samefile'. Alternatively, if you are using GNU grep, you could " +"use 'find ... -print0 | grep -FzZ %s'." +msgstr "" +"警告:Unix 檔案名稱中一般上不會出現斜號 (雖然完整路徑會用斜號)。即是說,在本" +"系統中 ‘%s %s’ 可能永遠是 false。在這情況下 ‘-wholename’ 或 ‘-samefile’可能會" +"有用。又或者,如果您使用 GNU grep,可以嘗試使用 'find ... -print0 | grep -" +"FzZ %s'。" + +#: find/parser.c:1305 +#, c-format +msgid "Expected a positive decimal integer argument to %s, but got %s" +msgstr "" + +#: find/parser.c:1455 +msgid "This system does not provide a way to find the birth time of a file." +msgstr "" + +#: find/parser.c:1505 +#, c-format +msgid "I cannot figure out how to interpret %s as a date or time" +msgstr "" + +#: find/parser.c:1521 +#, fuzzy, c-format +msgid "Cannot obtain birth time of file %s" +msgstr "無法開啟檔案 ‘%s’ 作為輸入資料" + +#: find/parser.c:1788 +#, fuzzy, c-format +msgid "invalid mode %s" +msgstr "模式 ‘%s’ 無效" + +#: find/parser.c:1807 +#, c-format +msgid "" +"warning: you have specified a mode pattern %s (which is equivalent to /000). " +"The meaning of -perm /000 has now been changed to be consistent with -perm -" +"000; that is, while it used to match no files, it now matches all files." +msgstr "" + +#: find/parser.c:2004 +msgid "invalid null argument to -size" +msgstr "-size 後是無效的空白參數" + +#: find/parser.c:2052 +#, c-format +msgid "invalid -size type `%c'" +msgstr "-size 指定的檔案大小單位 ‘%c’ 無效" + +#: find/parser.c:2058 +#, fuzzy, c-format +msgid "Invalid argument `%s%c' to -size" +msgstr "‘%2$s’ 的參數 ‘%1$s’ 無效" + +#: find/parser.c:2237 +msgid "" +"The -show-control-chars option takes a single argument which must be " +"'literal' or 'safe'" +msgstr "" + +#: find/parser.c:2348 +#, fuzzy, c-format +msgid "Invalid argument %s to -used" +msgstr "%2$s 的參數 %1$s 無效" + +#: find/parser.c:2400 +#, c-format +msgid "Features enabled: " +msgstr "啟用了的功能:" + +#: find/parser.c:2509 +msgid "Arguments to -type should contain only one letter" +msgstr "" + +#: find/parser.c:2556 +#, c-format +msgid "Unknown argument to -type: %c" +msgstr "" + +#: find/parser.c:2677 +#, c-format +msgid "warning: unrecognized escape `\\%c'" +msgstr "警告:無效辨認轉義控制序列 (escape sequence) ‘\\%c’" + +#: find/parser.c:2693 +#, c-format +msgid "error: %s at end of format string" +msgstr "" + +#: find/parser.c:2732 +#, c-format +msgid "warning: unrecognized format directive `%%%c'" +msgstr "" + +#: find/parser.c:2876 +#, c-format +msgid "error: the format directive `%%%c' is reserved for future use" +msgstr "" + +#: find/parser.c:2910 +#, c-format +msgid "" +"The current directory is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove the " +"current directory from your $PATH (that is, remove \".\" or leading or " +"trailing colons)" +msgstr "" +"PATH 環境變數中包括了當前目錄,當配合 find 的 %s 操作模式時會令系統安全產生漏" +"洞。請在 $PATH 變數中移除當前目錄 (即是 “.”,或者最前或最後的冒號)" + +#: find/parser.c:2921 +#, fuzzy, c-format +msgid "" +"The relative path %s is included in the PATH environment variable, which is " +"insecure in combination with the %s action of find. Please remove that " +"entry from $PATH" +msgstr "" +"PATH 環境變數中包括了當前目錄,當配合 find 的 %s 操作模式時會令系統安全產生漏" +"洞。請在 $PATH 變數中移除當前目錄 (即是 “.”,或者最前或最後的冒號)" + +#: find/parser.c:3024 +msgid "" +"You may not use {} within the utility name for -execdir and -okdir, because " +"this is a potential security problem." +msgstr "" +"您不應該在 -execdir 和 -okdir 中使用 {} 作為程式名稱,因為這樣做可能會造成安" +"全漏洞。" + +#: find/parser.c:3049 +#, c-format +msgid "Only one instance of {} is supported with -exec%s ... +" +msgstr "在 -exec%s ... + 裡面只可以使用一次 {}" + +#: find/parser.c:3066 +#, fuzzy +msgid "The environment is too large for exec()." +msgstr "執行 exec 時的環境變數太大" + +#: find/parser.c:3257 +msgid "arithmetic overflow when trying to calculate the end of today" +msgstr "" + +#: find/parser.c:3413 +msgid "standard error" +msgstr "" + +#: find/parser.c:3418 +msgid "standard output" +msgstr "" + +#: find/pred.c:411 +#, c-format +msgid "cannot delete %s" +msgstr "" + +#: find/pred.c:1340 +#, fuzzy, c-format +msgid "Warning: cannot determine birth time of file %s" +msgstr "無法開啟檔案 ‘%s’ 作為輸入資料" + +#: find/pred.c:1404 +#, c-format +msgid "< %s ... %s > ? " +msgstr "< %s ... %s > ? " + +#: find/pred.c:1848 +msgid "Cannot close standard input" +msgstr "" + +#: find/pred.c:1883 +msgid "Failed to change directory" +msgstr "" + +#: find/pred.c:1924 xargs/xargs.c:1119 +msgid "cannot fork" +msgstr "fork 失敗" + +#: find/pred.c:1949 +#, c-format +msgid "error waiting for %s" +msgstr "等待 %s 時出現錯誤" + +#: find/pred.c:1958 +#, c-format +msgid "%s terminated by signal %d" +msgstr "%s 因訊號 %d 而終止" + +#: find/tree.c:89 find/tree.c:94 find/tree.c:174 find/tree.c:213 +msgid "invalid expression" +msgstr "表達式無效" + +#: find/tree.c:99 +#, c-format +msgid "" +"invalid expression; you have used a binary operator '%s' with nothing before " +"it." +msgstr "" + +#: find/tree.c:108 +#, c-format +msgid "expected an expression between '%s' and ')'" +msgstr "" + +#: find/tree.c:117 +#, c-format +msgid "expected an expression after '%s'" +msgstr "" + +#: find/tree.c:121 +msgid "invalid expression; you have too many ')'" +msgstr "表達式無效;出現太多的 ‘)’" + +#: find/tree.c:143 +#, fuzzy, c-format +msgid "" +"invalid expression; expected to find a ')' but didn't see one. Perhaps you " +"need an extra predicate after '%s'" +msgstr "表達式無效;‘)’ 本應出現但實際上沒有" + +#: find/tree.c:149 +#, fuzzy +msgid "invalid expression; empty parentheses are not allowed." +msgstr "表達式無效;出現太多的 ‘)’" + +#: find/tree.c:154 +msgid "" +"invalid expression; I was expecting to find a ')' somewhere but did not see " +"one." +msgstr "表達式無效;‘)’ 本應出現但實際上沒有" + +#: find/tree.c:159 find/tree.c:788 +msgid "oops -- invalid expression type!" +msgstr "表達式類型無效!" + +#: find/tree.c:231 +#, c-format +msgid "oops -- invalid expression type (%d)!" +msgstr "表達式類型 (%d) 無效!" + +#: find/tree.c:1228 +#, fuzzy, c-format +msgid "paths must precede expression: %s" +msgstr "路徑必須放在表達式之前" + +#: find/tree.c:1237 +#, c-format +msgid "unknown predicate `%s'" +msgstr "" + +#: find/tree.c:1257 +#, c-format +msgid "invalid predicate `%s'" +msgstr "" + +#: find/tree.c:1262 +#, c-format +msgid "invalid argument `%s' to `%s'" +msgstr "‘%2$s’ 的參數 ‘%1$s’ 無效" + +#: find/tree.c:1269 +#, c-format +msgid "missing argument to `%s'" +msgstr "‘%s’ 後缺少了參數" + +#: find/tree.c:1344 +#, fuzzy +msgid "you have too many ')'" +msgstr "表達式無效;出現太多的 ‘)’" + +#: find/tree.c:1349 +#, c-format +msgid "unexpected extra predicate '%s'" +msgstr "" + +#: find/tree.c:1351 +msgid "unexpected extra predicate" +msgstr "" + +#: find/tree.c:1467 +msgid "oops -- invalid default insertion of and!" +msgstr "" + +#: find/util.c:157 +#, fuzzy, c-format +msgid "Usage: %s [-H] [-L] [-P] [-Olevel] [-D " +msgstr "用法: %s [-H] [-L] [-P] [路徑...] [表達式]\n" + +#: find/util.c:159 +#, fuzzy, c-format +msgid "] [path...] [expression]\n" +msgstr "用法:%s [路徑...] [表達式]\n" + +#: find/util.c:748 +#, fuzzy, c-format +msgid "Ignoring unrecognised debug flag %s" +msgstr "警告:無效辨認轉義控制序列 (escape sequence) ‘\\%c’" + +#: find/util.c:755 +msgid "Empty argument to the -D option." +msgstr "" + +#: find/util.c:769 +msgid "The -O option must be immediately followed by a decimal integer" +msgstr "" + +#: find/util.c:778 find/util.c:788 +msgid "Please specify a decimal number immediately after -O" +msgstr "" + +#: find/util.c:793 find/util.c:797 +#, c-format +msgid "Invalid optimisation level %s" +msgstr "" + +#: find/util.c:804 +#, c-format +msgid "" +"Optimisation level %lu is too high. If you want to find files very quickly, " +"consider using GNU locate." +msgstr "" + +#: find/util.c:935 +msgid "" +"The environment variable FIND_BLOCK_SIZE is not supported, the only thing " +"that affects the block size is the POSIXLY_CORRECT environment variable" +msgstr "" +"環境變數 FIND_BLOCK_SIZE 已經不再支援,唯一一個能夠影響檔案區段大小的環境變數" +"是 POSIXLY_CORRECT" + +#: lib/buildcmd.c:196 +msgid "command too long" +msgstr "" + +#: lib/buildcmd.c:288 +msgid "can not fit single argument within argument list size limit" +msgstr "" + +#: lib/buildcmd.c:293 +#, fuzzy +msgid "argument list too long" +msgstr "參數太長" + +#: lib/findutils-version.c:60 +msgid "Eric B. Decker" +msgstr "" + +#: lib/findutils-version.c:61 +msgid "James Youngman" +msgstr "" + +#: lib/findutils-version.c:62 +msgid "Kevin Dalley" +msgstr "" + +#: lib/findutils-version.c:64 +#, fuzzy, c-format +msgid "Built using GNU gnulib version %s\n" +msgstr "GNU findutils %s 版本\n" + +#: lib/regextype.c:112 +#, c-format +msgid "Unknown regular expression type %s; valid types are %s." +msgstr "" + +#: locate/code.c:130 +#, c-format +msgid "" +"Usage: %s [--version | --help]\n" +"or %s most_common_bigrams < file-list > locate-database\n" +msgstr "" +"用法: %s [--version | --help]\n" +"或 %s most_common_bigrams < 檔案清單 > locate資料庫\n" + +#: locate/code.c:134 locate/frcode.c:171 locate/locate.c:1418 +#: xargs/xargs.c:1317 +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"請向 報告錯誤。\n" + +#: locate/frcode.c:169 +#, c-format +msgid "Usage: %s [-0 | --null] [--version] [--help]\n" +msgstr "" + +#: locate/frcode.c:188 +msgid "You need to specify a security level as a decimal integer." +msgstr "" + +#: locate/frcode.c:195 +#, c-format +msgid "Security level %s is outside the convertible range." +msgstr "" + +#: locate/frcode.c:202 +#, c-format +msgid "Security level %s has unexpected suffix %s." +msgstr "" + +#: locate/frcode.c:258 +#, c-format +msgid "slocate security level %ld is unsupported." +msgstr "" + +#: locate/frcode.c:296 +msgid "Failed to write to standard output" +msgstr "" + +#: locate/locate.c:150 +msgid "days" +msgstr "日" + +#: locate/locate.c:197 +#, fuzzy +msgid "The argument for option --max-database-age must not be empty" +msgstr "‘%2$s’ 的參數 ‘%1$s’ 無效" + +#: locate/locate.c:213 locate/locate.c:220 +#, fuzzy, c-format +msgid "Invalid argument %s for option --max-database-age" +msgstr "‘%2$s’ 的參數 ‘%1$s’ 無效" + +#: locate/locate.c:472 +#, c-format +msgid "locate database %s contains a filename longer than locate can handle" +msgstr "" + +#: locate/locate.c:607 +#, fuzzy, c-format +msgid "locate database %s is corrupt or invalid" +msgstr "locate 資料庫 ‘%s’ 內容已損壞或無效" + +#: locate/locate.c:894 +#, c-format +msgid "Locate database size: %s bytes\n" +msgstr "locate 資料庫大小:%s 位元組\n" + +#: locate/locate.c:899 +#, fuzzy, c-format +msgid "Matching Filenames: %s " +msgstr "檔案總數: %s," + +#: locate/locate.c:900 +#, fuzzy, c-format +msgid "All Filenames: %s " +msgstr "檔案總數: %s," + +#: locate/locate.c:903 +#, c-format +msgid "with a cumulative length of %s bytes" +msgstr "總長度共 %s 位元組" + +#: locate/locate.c:907 +#, c-format +msgid "" +"\n" +"\tof which %s contain whitespace, " +msgstr "" +"\n" +"\t其中 %s 個有空白字元," + +#: locate/locate.c:910 +#, c-format +msgid "" +"\n" +"\t%s contain newline characters, " +msgstr "" +"\n" +"\t%s 個有換行字元," + +#: locate/locate.c:913 +#, c-format +msgid "" +"\n" +"\tand %s contain characters with the high bit set.\n" +msgstr "" +"\n" +"\t和 %s 個含有不是 7 bit 的字元。\n" + +#: locate/locate.c:921 +#, c-format +msgid "" +"Some filenames may have been filtered out, so we cannot compute the " +"compression ratio.\n" +msgstr "" + +#: locate/locate.c:934 +#, fuzzy, c-format +msgid "Compression ratio %4.2f%% (higher is better)\n" +msgstr "壓縮比率 %4.2f%%\n" + +#: locate/locate.c:941 +#, fuzzy, c-format +msgid "Compression ratio is undefined\n" +msgstr "壓縮比率 %4.2f%%\n" + +#: locate/locate.c:996 +#, c-format +msgid "" +"locate database %s looks like an slocate database but it seems to have " +"security level %c, which GNU findutils does not currently support" +msgstr "" + +#: locate/locate.c:1113 +#, c-format +msgid "" +"%s is an slocate database. Support for these is new, expect problems for " +"now." +msgstr "" + +#: locate/locate.c:1127 +#, c-format +msgid "" +"%s is an slocate database of unsupported security level %d; skipping it." +msgstr "" + +#: locate/locate.c:1144 +msgid "" +"You specified the -E option, but that option cannot be used with slocate-" +"format databases with a non-zero security level. No results will be " +"generated for this database.\n" +msgstr "" + +#: locate/locate.c:1155 +#, c-format +msgid "%s is an slocate database. Turning on the '-e' option." +msgstr "" + +#: locate/locate.c:1193 +#, fuzzy, c-format +msgid "Old-format locate database %s is too short to be valid" +msgstr "locate 資料庫 ‘%s’ 內容已損壞或無效" + +#: locate/locate.c:1345 +#, c-format +msgid "Database %s is in the %s format.\n" +msgstr "資料庫 %s 使用了%s格式。\n" + +#: locate/locate.c:1366 +msgid "The database has little-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1368 +msgid "The database has big-endian machine-word encoding.\n" +msgstr "" + +#: locate/locate.c:1381 +#, c-format +msgid "The database machine-word encoding order is not obvious.\n" +msgstr "" + +#: locate/locate.c:1409 +#, fuzzy, c-format +msgid "" +"Usage: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [--max-database-age D] [--version] [--help]\n" +" pattern...\n" +msgstr "" +"用法: %s [-d path | --database=path] [-e | -E | --[non-]existing]\n" +" [-i | --ignore-case] [-w | --wholename] [-b | --basename] \n" +" [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]\n" +" [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --" +"stdio ]\n" +" [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]\n" +" [-version] [--help]\n" +" 檔案名稱樣式...\n" + +#: locate/locate.c:1472 +msgid "failed to drop group privileges" +msgstr "" + +#: locate/locate.c:1490 +msgid "failed to drop setuid privileges" +msgstr "" + +#: locate/locate.c:1504 +msgid "Failed to fully drop privileges" +msgstr "" + +#: locate/locate.c:1522 +msgid "failed to drop setgid privileges" +msgstr "" + +#: locate/locate.c:1789 +msgid "warning: the locate database can only be read from stdin once." +msgstr "警告:locate 資料庫只可以由標準輸入讀取一次。" + +#: locate/locate.c:1851 +msgid "time system call failed" +msgstr "" + +# e.g. database `%s' is more than 8 days old +#: locate/locate.c:1862 +#, fuzzy, c-format +msgid "warning: database %s is more than %d %s old (actual age is %.1f %s)" +msgstr "警告:資料庫 ‘%s’ 是超過 %d %s前產生的" + +#: locate/word_io.c:97 +#, c-format +msgid "Warning: locate database %s was built with a different byte order" +msgstr "" + +#: locate/word_io.c:144 +#, c-format +msgid "unexpected EOF in %s" +msgstr "" + +#: locate/word_io.c:146 +#, fuzzy, c-format +msgid "error reading a word from %s" +msgstr "等待 %s 時出現錯誤" + +#: xargs/xargs.c:303 +#, fuzzy, c-format +msgid "Invalid escape sequence %s in input delimiter specification." +msgstr "轉義控制序列 (escape sequence) ‘%s’ 不合法。" + +#: xargs/xargs.c:321 +#, fuzzy, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lx." +msgstr "轉義控制序列 (escape sequence) ‘%s’ 不合法:字元值不可以超過 %lx。" + +#: xargs/xargs.c:327 +#, fuzzy, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; character " +"values must not exceed %lo." +msgstr "轉義控制序列 (escape sequence) ‘%s’ 不合法:字元值不可以超過 %lo。" + +#: xargs/xargs.c:336 +#, fuzzy, c-format +msgid "" +"Invalid escape sequence %s in input delimiter specification; trailing " +"characters %s not recognised." +msgstr "轉義控制序列 (escape sequence) ‘%s’ 不合法:無法辨認最後的字元 ‘%s’。" + +#: xargs/xargs.c:381 +#, fuzzy, c-format +msgid "" +"Invalid input delimiter specification %s: the delimiter must be either a " +"single character or an escape sequence starting with \\." +msgstr "" +"分隔字元 ‘%s’ 不合法:分隔字元必須是一個 ASCII 字元或以反斜號 \\ 開始的轉義控" +"制序列 (escape sequence)。" + +#: xargs/xargs.c:398 +msgid "environment is too large for exec" +msgstr "執行 exec 時的環境變數太大" + +#: xargs/xargs.c:583 +#, c-format +msgid "warning: value %ld for -s option is too large, using %ld instead" +msgstr "" + +#: xargs/xargs.c:652 +#, fuzzy, c-format +msgid "Cannot open input file %s" +msgstr "無法開啟檔案 ‘%s’ 作為輸入資料" + +#: xargs/xargs.c:688 +#, fuzzy, c-format +msgid "Your environment variables take up %lu bytes\n" +msgstr "環境變數總共用了 %ld 位元組\n" + +#: xargs/xargs.c:691 +#, fuzzy, c-format +msgid "POSIX upper limit on argument length (this system): %lu\n" +msgstr "POSIX 標準中參數長度上下限為:%ld, %ld\n" + +#: xargs/xargs.c:694 +#, fuzzy, c-format +msgid "" +"POSIX smallest allowable upper limit on argument length (all systems): %lu\n" +msgstr "POSIX 標準中參數長度上下限為:%ld, %ld\n" + +#: xargs/xargs.c:697 +#, c-format +msgid "Maximum length of command we could actually use: %ld\n" +msgstr "實際上可用的指令列長度上限:%ld\n" + +#: xargs/xargs.c:701 +#, fuzzy, c-format +msgid "Size of command buffer we are actually using: %lu\n" +msgstr "實際上使用的指令列緩衝區大小:%ld\n" + +#: xargs/xargs.c:707 +#, c-format +msgid "" +"\n" +"Execution of xargs will continue now, and it will try to read its input and " +"run commands; if this is not what you wanted to happen, please type the end-" +"of-file keystroke.\n" +msgstr "" + +#: xargs/xargs.c:715 +#, c-format +msgid "" +"Warning: %s will be run at least once. If you do not want that to happen, " +"then press the interrupt keystroke.\n" +msgstr "" + +#: xargs/xargs.c:841 xargs/xargs.c:934 +#, c-format +msgid "" +"unmatched %s quote; by default quotes are special to xargs unless you use " +"the -0 option" +msgstr "" +"%s引號不配合;除非使用 -0 選項,否則在預設模式下引號對於 xargs 來說是有特別意" +"義的" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "double" +msgstr "雙" + +#: xargs/xargs.c:842 xargs/xargs.c:935 +msgid "single" +msgstr "單" + +#: xargs/xargs.c:954 +msgid "" +"warning: a NUL character occurred in the input. It cannot be passed through " +"in the argument list. Did you mean to use the --null option?" +msgstr "" + +#: xargs/xargs.c:964 xargs/xargs.c:1021 +msgid "argument line too long" +msgstr "參數太長" + +#: xargs/xargs.c:1194 +msgid "error waiting for child process" +msgstr "等待子進程時出現錯誤" + +#: xargs/xargs.c:1210 +#, c-format +msgid "%s: exited with status 255; aborting" +msgstr "%s: 回傳碼為 255;中止" + +#: xargs/xargs.c:1212 +#, c-format +msgid "%s: stopped by signal %d" +msgstr "%s: 因訊號 %d 而停止" + +#: xargs/xargs.c:1214 +#, c-format +msgid "%s: terminated by signal %d" +msgstr "%s: 因訊號 %d 而中止" + +#: xargs/xargs.c:1267 +#, c-format +msgid "%s: invalid number for -%c option\n" +msgstr "%s: -%c 選項後的數值無效\n" + +#: xargs/xargs.c:1274 +#, c-format +msgid "%s: value for -%c option should be >= %ld\n" +msgstr "%s: -%c 選項後的數值必須不小於 %ld\n" + +#: xargs/xargs.c:1288 +#, c-format +msgid "%s: value for -%c option should be < %ld\n" +msgstr "%s: -%c 選項後的數值必須小於 %ld\n" + +#: xargs/xargs.c:1306 +#, fuzzy, c-format +msgid "" +"Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs] [--show-limits]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [command [initial-arguments]]\n" +msgstr "" +"用法: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n" +" [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n" +" [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n" +" [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n" +" [-n max-args] [--max-args=max-args]\n" +" [-s max-chars] [--max-chars=max-chars]\n" +" [-P max-procs] [--max-procs=max-procs]\n" +" [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n" +" [--version] [--help] [指令 [指令的參數]]\n" + +#~ msgid "block size" +#~ msgstr "區段大小" + +#~ msgid "" +#~ "warning: the predicate -ipath is deprecated; please use -iwholename " +#~ "instead." +#~ msgstr "警告:-ipath 選項已過時,請改用 -iwholename。" + +#~ msgid "GNU find version %s\n" +#~ msgstr "GNU find %s 版本\n" + +#~ msgid "GNU findutils version %s\n" +#~ msgstr "GNU findutils %s 版本\n" + +#~ msgid "GNU locate version %s\n" +#~ msgstr "GNU locate %s 版本\n" + +#~ msgid "GNU xargs version %s\n" +#~ msgstr "GNU xargs %s 版本\n" + +#~ msgid "oops -- invalid expression type in mark_stat!" +#~ msgstr "mark_stat 中的表達式類型無效!" + +#~ msgid "oops -- invalid expression type in mark_type!" +#~ msgstr "mark_type 中的表達式類型無效!" + +#~ msgid "old" +#~ msgstr "舊的" diff --git a/stamp-h.in b/stamp-h.in new file mode 100644 index 0000000..9788f70 --- /dev/null +++ b/stamp-h.in @@ -0,0 +1 @@ +timestamp diff --git a/xargs/.cvsignore b/xargs/.cvsignore new file mode 100644 index 0000000..7b0f96e --- /dev/null +++ b/xargs/.cvsignore @@ -0,0 +1,4 @@ +.deps +Makefile +Makefile.in +xargs diff --git a/xargs/.gitignore b/xargs/.gitignore new file mode 100644 index 0000000..aab8193 --- /dev/null +++ b/xargs/.gitignore @@ -0,0 +1,6 @@ +.deps +Makefile +Makefile.in +xargs +*~ + diff --git a/xargs/Makefile.am b/xargs/Makefile.am new file mode 100644 index 0000000..20b4c29 --- /dev/null +++ b/xargs/Makefile.am @@ -0,0 +1,15 @@ +AUTOMAKE_OPTIONS = std-options +localedir = $(datadir)/locale +bin_PROGRAMS = xargs +man_MANS = xargs.1 +INCLUDES = -I.. -I../gnulib/lib -I$(top_srcdir)/gnulib/lib -I$(top_srcdir)/lib -I../intl -DLOCALEDIR=\"$(localedir)\" +LDADD = ../lib/libfind.a ../gnulib/lib/libgnulib.a @INTLLIBS@ +EXTRA_DIST = $(man_MANS) +SUBDIRS = . testsuite + +$(PROGRAMS): ../lib/libfind.a ../gnulib/lib/libgnulib.a + +dist-hook: findutils-check-manpages + +findutils-check-manpages: + $(top_srcdir)/build-aux/man-lint.sh $(srcdir) $(man_MANS) diff --git a/xargs/testsuite/.cvsignore b/xargs/testsuite/.cvsignore new file mode 100644 index 0000000..cef6adb --- /dev/null +++ b/xargs/testsuite/.cvsignore @@ -0,0 +1,5 @@ +Makefile +Makefile.in +site.exp +xargs.log +xargs.sum diff --git a/xargs/testsuite/.gitignore b/xargs/testsuite/.gitignore new file mode 100644 index 0000000..cef6adb --- /dev/null +++ b/xargs/testsuite/.gitignore @@ -0,0 +1,5 @@ +Makefile +Makefile.in +site.exp +xargs.log +xargs.sum diff --git a/xargs/testsuite/Makefile.am b/xargs/testsuite/Makefile.am new file mode 100644 index 0000000..8637d93 --- /dev/null +++ b/xargs/testsuite/Makefile.am @@ -0,0 +1,261 @@ +AUTOMAKE_OPTIONS=dejagnu +XARGS = ../xargs +XARGSFLAGS = +DEJATOOL = xargs +#EXTRA_DIST = config/*.exp inputs/*.xi xargs.*/*.exp xargs.*/*.xo + +EXTRA_DIST_EXP = \ +config/unix.exp \ +xargs.gnu/0n3.exp \ +xargs.gnu/delim-o.exp \ +xargs.gnu/E_-0.exp \ +xargs.gnu/empty_def-r.exp \ +xargs.gnu/empty-r.exp \ +xargs.gnu/idef-0.exp \ +xargs.gnu/idef-s26-0.exp \ +xargs.gnu/l1-0.exp \ +xargs.gnu/l1_2-0.exp \ +xargs.gnu/L2-0.exp \ +xargs.gnu/L2_2-0.exp \ +xargs.gnu/L3-0.exp \ +xargs.gnu/n1-0.exp \ +xargs.gnu/n2-0.exp \ +xargs.gnu/n2-s26-0.exp \ +xargs.gnu/n2-s26-x-0.exp \ +xargs.gnu/n3-0.exp \ +xargs.gnu/n3-s36-0.exp \ +xargs.gnu/noeof-0.exp \ +xargs.gnu/nothing.exp \ +xargs.gnu/P3-n1-IARG.exp \ +xargs.gnu/r.exp \ +xargs.gnu/s118-0.exp \ +xargs.gnu/s19-0.exp \ +xargs.gnu/s19_2-0.exp \ +xargs.gnu/s20-0.exp \ +xargs.gnu/s30-0.exp \ +xargs.gnu/space-0.exp \ +xargs.gnu/space-r.exp \ +xargs.gnu/space-t-0.exp \ +xargs.posix/EEOFb.exp \ +xargs.posix/EEOFe.exp \ +xargs.posix/EEOF.exp \ +xargs.posix/E_.exp \ +xargs.posix/E_-IARG.exp \ +xargs.posix/arg_max_32bit_linux_bug.exp \ +xargs.posix/arg_max_64bit_linux_bug.exp \ +xargs.posix/childfail.exp \ +xargs.posix/empty_def.exp \ +xargs.posix/empty.exp \ +xargs.posix/hithere.exp \ +xargs.posix/IARG-E_.exp \ +xargs.posix/IARG.exp \ +xargs.posix/IARG-s15.exp \ +xargs.posix/L2_2.exp \ +xargs.posix/uc_L2.exp \ +xargs.posix/L2-n2.exp \ +xargs.posix/L3.exp \ +xargs.posix/n1.exp \ +xargs.posix/n2.exp \ +xargs.posix/n2-s26.exp \ +xargs.posix/n2-s26-x.exp \ +xargs.posix/n3.exp \ +xargs.posix/n3-s36.exp \ +xargs.posix/noeof.exp \ +xargs.posix/quotes.exp \ +xargs.posix/rc-123.exp \ +xargs.posix/rc-124.exp \ +xargs.posix/rc-125.exp \ +xargs.posix/rc-126.exp \ +xargs.posix/rc-127.exp \ +xargs.posix/s118.exp \ +xargs.posix/s19_2.exp \ +xargs.posix/s19.exp \ +xargs.posix/s20.exp \ +xargs.posix/s30.exp \ +xargs.posix/s470.exp \ +xargs.posix/s47.exp \ +xargs.posix/s48.exp \ +xargs.posix/s6.exp \ +xargs.posix/savannah-11865.exp \ +xargs.posix/space.exp \ +xargs.posix/space-I.exp \ +xargs.posix/sv-bug-18714.exp \ +xargs.posix/sv-bug-18714b.exp \ +xargs.posix/sv-bug-20273.exp \ +xargs.posix/unmatched2.exp \ +xargs.posix/unmatched.exp \ +xargs.posix/unmatched-n2-x.exp \ +xargs.sysv/eEOF.exp \ +xargs.sysv/e.exp \ +xargs.sysv/empty_def-t.exp \ +xargs.sysv/empty-t.exp \ +xargs.sysv/eof1.exp \ +xargs.sysv/iARG.exp \ +xargs.sysv/idef.exp \ +xargs.sysv/idef-s26.exp \ +xargs.sysv/iquotes.exp \ +xargs.sysv/l1_2.exp \ +xargs.sysv/l1.exp \ +xargs.sysv/l1n4.exp \ +xargs.sysv/lc_l2.exp \ +xargs.sysv/s30-t.exp \ +xargs.sysv/sv-bug-18713.exp \ +xargs.sysv/space-t.exp \ +xargs.sysv/trace.exp + + + +EXTRA_DIST_XO = \ +xargs.gnu/0n3.xo \ +xargs.gnu/E_-0.xo \ +xargs.gnu/delim-o.xo \ +xargs.gnu/idef-0.xo \ +xargs.gnu/idef-s26-0.xo \ +xargs.gnu/l1-0.xo \ +xargs.gnu/l1_2-0.xo \ +xargs.gnu/L2-0.xo \ +xargs.gnu/L2_2-0.xo \ +xargs.gnu/L3-0.xo \ +xargs.gnu/n1-0.xo \ +xargs.gnu/n2-0.xo \ +xargs.gnu/n2-s26-0.xo \ +xargs.gnu/n2-s26-x-0.xo \ +xargs.gnu/n3-0.xo \ +xargs.gnu/n3-s36-0.xo \ +xargs.gnu/noeof-0.xo \ +xargs.gnu/nothing.xo \ +xargs.gnu/P3-n1-IARG.xo \ +xargs.gnu/r.xo \ +xargs.gnu/s118-0.xo \ +xargs.gnu/s19-0.xo \ +xargs.gnu/s20-0.xo \ +xargs.gnu/s30-0.xo \ +xargs.gnu/space-0.xo \ +xargs.gnu/space-t-0.xo \ +xargs.posix/EEOFb.xo \ +xargs.posix/EEOFe.xo \ +xargs.posix/EEOF.xo \ +xargs.posix/E_-IARG.xo \ +xargs.posix/empty_def.xo \ +xargs.posix/empty.xo \ +xargs.posix/E_.xo \ +xargs.posix/hithere.xo \ +xargs.posix/IARG-E_.xo \ +xargs.posix/IARG-s15.xo \ +xargs.posix/IARG.xo \ +xargs.posix/L2_2.xo \ +xargs.posix/L2-n2.xo \ +xargs.posix/uc_L2.xo \ +xargs.posix/L3.xo \ +xargs.posix/n1.xo \ +xargs.posix/n2-s26.xo \ +xargs.posix/n2-s26-x.xo \ +xargs.posix/n2.xo \ +xargs.posix/n3-s36.xo \ +xargs.posix/n3.xo \ +xargs.posix/noeof.xo \ +xargs.posix/quotes.xo \ +xargs.posix/rc-123.xo \ +xargs.posix/s118.xo \ +xargs.posix/s19.xo \ +xargs.posix/s20.xo \ +xargs.posix/s30.xo \ +xargs.posix/s470.xo \ +xargs.posix/s47.xo \ +xargs.posix/s48.xo \ +xargs.posix/savannah-11865.xo \ +xargs.posix/space.xo \ +xargs.posix/sv-bug-18714.xo \ +xargs.posix/sv-bug-18714b.xo \ +xargs.posix/sv-bug-20273.xo \ +xargs.posix/unmatched2.xo \ +xargs.posix/unmatched.xo \ +xargs.sysv/eEOF.xo \ +xargs.sysv/empty_def-t.xo \ +xargs.sysv/empty-t.xo \ +xargs.sysv/eof1.xo \ +xargs.sysv/e.xo \ +xargs.sysv/iARG.xo \ +xargs.sysv/idef-s26.xo \ +xargs.sysv/idef.xo \ +xargs.sysv/iquotes.xo \ +xargs.sysv/l1_2.xo \ +xargs.sysv/l1n4.xo \ +xargs.sysv/l1.xo \ +xargs.sysv/lc_l2.xo \ +xargs.sysv/s30-t.xo \ +xargs.sysv/sv-bug-18713.xo \ +xargs.sysv/space-t.xo \ +xargs.sysv/trace.xo + + + +EXTRA_DIST_XE = \ +xargs.gnu/space-t-0.xe \ +xargs.sysv/empty_def-t.xe \ +xargs.sysv/empty-t.xe \ +xargs.sysv/s30-t.xe \ +xargs.sysv/space-t.xe \ +xargs.sysv/trace.xe + + +EXTRA_DIST_XI = \ +inputs/16383-ys.xi \ +inputs/32767-ys.xi \ +inputs/blank.xi \ +inputs/empty.xi \ +inputs/eof_-0.xi \ +inputs/EOFb.xi \ +inputs/EOFe.xi \ +inputs/eofstr.xi \ +inputs/eof_.xi \ +inputs/eof1.xi \ +inputs/EOF.xi \ +inputs/ett.xi \ +inputs/files0.xi \ +inputs/files.xi \ +inputs/foobar.xi \ +inputs/formfeeds.xi \ +inputs/ftt.xi \ +inputs/helloworld.xi \ +inputs/items-0.xi \ +inputs/items.xi \ +inputs/ldata-0.xi \ +inputs/ldatab-0.xi \ +inputs/ldatab.xi \ +inputs/ldata.xi \ +inputs/lines.xi \ +inputs/noeof-0.xi \ +inputs/noeof.xi \ +inputs/Pdata.xi \ +inputs/quotes.xi \ +inputs/space.xi \ +inputs/stairs-0.xi \ +inputs/stairs2-0.xi \ +inputs/stairs2.xi \ +inputs/stairs.xi \ +inputs/stt.xi \ +inputs/sv-bug-20273.xi \ +inputs/unmatched2.xi \ +inputs/unmatched.xi \ +inputs/verticaltabs.xi + + +EXTRA_DIST = $(EXTRA_DIST_EXP) $(EXTRA_DIST_XO) $(EXTRA_DIST_XI) $(EXTRA_DIST_XE) + + + +# DIST_SUBDIRS = config inputs xargs.gnu xargs.posix xargs.sysv + +CLEANFILES = *.log *.sum site.exp site.bak + +FORCE: + +checklists: + cd $(srcdir) && \ + ( find config inputs xargs.gnu xargs.posix xargs.sysv \( -name "*.exp" -o -name "*.xo" -o -name "*.xi" -o -name "*.xe" \) -print ; \ + ls $(EXTRA_DIST_XI) ; \ + ls $(EXTRA_DIST_XE) ; \ + ls $(EXTRA_DIST_XO) ; \ + ls $(EXTRA_DIST_EXP) ; ) | \ + sort | uniq -c | awk '$$1 != 2 { print; }' diff --git a/xargs/testsuite/config/unix.exp b/xargs/testsuite/config/unix.exp new file mode 100644 index 0000000..51daadb --- /dev/null +++ b/xargs/testsuite/config/unix.exp @@ -0,0 +1,181 @@ +# -*- TCL -*- +# Test-specific TCL procedures required by DejaGNU. +# Copyright (C) 1994, 2005, 2007 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Modified by David MacKenzie from the gcc files +# written by Rob Savoye . + + +verbose "base_dir is $base_dir" 2 + +set objfile "xargs.o" +set dir "$base_dir/.." +set path "$dir/$objfile" +if ![file exists $path] then { + error "$path does not exist" +} else { + set XARGS [findfile $base_dir/../xargs [transform xargs]] +} + +global XARGS + + +set XARGS [findfile $base_dir/../xargs $base_dir/../xargs [transform xargs]] +if [ string match "/*" $XARGS ] { + verbose "XARGS is set to $XARGS" 1 +} else { + error "Failed to find a binary to test" +} + +global XARGSFLAGS +if ![info exists XARGSFLAGS] then { + set XARGSFLAGS "" +} + +# Called by runtest. +# Extract and print the version number of xargs. +proc xargs_version {} { + global XARGS + global XARGSFLAGS + + if {[which $XARGS] != 0} then { + set tmp [ eval exec $XARGS $XARGSFLAGS --version xargs.out 2> xargs.err" + } else { + set cmd "$XARGS $XARGSFLAGS $options < $infile > xargs.out 2> xargs.err" + } + send_log "$cmd\n" + if $verbose>1 then { + send_user "Spawning \"$cmd\"\n" + } + + set status 0 + if {[catch "exec $cmd" comp_output]} then { + if {[lindex $::errorCode 0] == "CHILDSTATUS"} then { + set status [lindex $::errorCode 2] + } else { + fail "$testname, failure in testing framework, $comp_output" + return + } + } + + catch "exec cat xargs.err" comp_error + + if {$execrc != $status} then { + if {$status == 0} then { + fail "$testname, unexpected success" + } elseif {$execrc == 0} then { + fail "$testname, unexpected failure, $comp_output, $comp_error" + } else { + fail "$testname, expected exit code $execrc, but got exit code $status" + } + return + } + # ok, at least exit code match. + + if [file exists $outfile] then { + set cmp_cmd "cmp xargs.out $outfile" + send_log "$cmp_cmd\n" + catch "exec $cmp_cmd" cmpout + if {$cmpout != ""} then { + # stdout is wrong. + catch "exec diff -u xargs.out $outfile" diffs + send_log "stdout diffs: $diffs\n" + fail "$testname, wrong stdout output: $cmpout" + return + } + } elseif {[file size xargs.out] != 0} then { + fail "$testname, output on stdout should be empty" + return + } + + # if stderr check is enabled, + if {$errfile != ""} then { + if {[file exists $errfile]} then { + set cmp_cmd "cmp xargs.err $errfile" + send_log "$cmp_cmd\n" + catch "exec $cmp_cmd" cmperr + if {$cmperr != ""} then { + # stderr is wrong + catch "exec diff -ua xargs.err $errfile" diffs + send_log "stderr diffs: $diffs\n" + fail "$testname, wrong stderr output: $cmperr" + return + } + } elseif {[file size xargs.err] != 0} then { + fail "$testname, output on stderr should be empty" + return + } + } + + pass "$testname" +} + +# Called by runtest. +# Clean up (remove temporary files) before runtest exits. +proc xargs_exit {} { + catch "exec rm -f xargs.out xargs.err" +} diff --git a/xargs/testsuite/inputs/16383-ys.xi b/xargs/testsuite/inputs/16383-ys.xi new file mode 100644 index 0000000..9084d4c --- /dev/null +++ b/xargs/testsuite/inputs/16383-ys.xi @@ -0,0 +1 @@ +y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y \ No newline at end of file diff --git a/xargs/testsuite/inputs/32767-ys.xi b/xargs/testsuite/inputs/32767-ys.xi new file mode 100644 index 0000000..320ff33 --- /dev/null +++ b/xargs/testsuite/inputs/32767-ys.xi @@ -0,0 +1 @@ +y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y \ No newline at end of file diff --git a/xargs/testsuite/inputs/EOF.xi b/xargs/testsuite/inputs/EOF.xi new file mode 100644 index 0000000..2a1c7a4 --- /dev/null +++ b/xargs/testsuite/inputs/EOF.xi @@ -0,0 +1,5 @@ +one +two + EOF +three +four diff --git a/xargs/testsuite/inputs/EOFb.xi b/xargs/testsuite/inputs/EOFb.xi new file mode 100644 index 0000000..f302113 --- /dev/null +++ b/xargs/testsuite/inputs/EOFb.xi @@ -0,0 +1,5 @@ +one +two + bEOF +three +four diff --git a/xargs/testsuite/inputs/EOFe.xi b/xargs/testsuite/inputs/EOFe.xi new file mode 100644 index 0000000..f391070 --- /dev/null +++ b/xargs/testsuite/inputs/EOFe.xi @@ -0,0 +1,5 @@ +one +two + EOFe +three +four diff --git a/xargs/testsuite/inputs/Pdata.xi b/xargs/testsuite/inputs/Pdata.xi new file mode 100644 index 0000000..250f10d --- /dev/null +++ b/xargs/testsuite/inputs/Pdata.xi @@ -0,0 +1,3 @@ +sleep 2 && echo one +sleep 1 && echo two +echo three diff --git a/xargs/testsuite/inputs/blank.xi b/xargs/testsuite/inputs/blank.xi new file mode 100644 index 0000000..b28b04f --- /dev/null +++ b/xargs/testsuite/inputs/blank.xi @@ -0,0 +1,3 @@ + + + diff --git a/xargs/testsuite/inputs/empty.xi b/xargs/testsuite/inputs/empty.xi new file mode 100644 index 0000000..c7c1dc8 --- /dev/null +++ b/xargs/testsuite/inputs/empty.xi @@ -0,0 +1,3 @@ +foo '' bar +baz '' +'' fnord diff --git a/xargs/testsuite/inputs/eof1.xi b/xargs/testsuite/inputs/eof1.xi new file mode 100644 index 0000000..0a4baec --- /dev/null +++ b/xargs/testsuite/inputs/eof1.xi @@ -0,0 +1,5 @@ +firstline +secondline + _ +thirdline +fourthline diff --git a/xargs/testsuite/inputs/eof_-0.xi b/xargs/testsuite/inputs/eof_-0.xi new file mode 100644 index 0000000000000000000000000000000000000000..6e6fa1a1149ba9b486de59bee347ceae245a9d46 GIT binary patch literal 20 bcwWoTOJyi2&u55dD9I>FO=U>SFD(K9Mdb$2 literal 0 HcwPel00001 diff --git a/xargs/testsuite/inputs/eof_.xi b/xargs/testsuite/inputs/eof_.xi new file mode 100644 index 0000000..e6270a7 --- /dev/null +++ b/xargs/testsuite/inputs/eof_.xi @@ -0,0 +1,5 @@ +one +two +_ +three +four \ No newline at end of file diff --git a/xargs/testsuite/inputs/eofstr.xi b/xargs/testsuite/inputs/eofstr.xi new file mode 100644 index 0000000..6e60cfd --- /dev/null +++ b/xargs/testsuite/inputs/eofstr.xi @@ -0,0 +1,5 @@ +firstline +secondline +EOF +thirdline +fourthline diff --git a/xargs/testsuite/inputs/ett.xi b/xargs/testsuite/inputs/ett.xi new file mode 100644 index 0000000..ec54624 --- /dev/null +++ b/xargs/testsuite/inputs/ett.xi @@ -0,0 +1,3 @@ +exit 255 +echo 1 +echo 2 diff --git a/xargs/testsuite/inputs/files.xi b/xargs/testsuite/inputs/files.xi new file mode 100644 index 0000000..5590252 --- /dev/null +++ b/xargs/testsuite/inputs/files.xi @@ -0,0 +1,22 @@ +/src/gnu/autoconf-1.11 +/src/gnu/autoconf-1.11/README +/src/gnu/autoconf-1.11/Makefile.in +/src/gnu/autoconf-1.11/INSTALL +/src/gnu/autoconf-1.11/NEWS +/src/gnu/autoconf-1.11/COPYING +/src/gnu/autoconf-1.11/ChangeLog +/src/gnu/autoconf-1.11/autoconf.texi +/src/gnu/autoconf-1.11/acconfig.h +/src/gnu/autoconf-1.11/autoconf.sh +/src/gnu/autoconf-1.11/acgeneral.m4 +/src/gnu/autoconf-1.11/acspecific.m4 +/src/gnu/autoconf-1.11/configure +/src/gnu/autoconf-1.11/configure.in +/src/gnu/autoconf-1.11/autoheader.sh +/src/gnu/autoconf-1.11/mkinstalldirs +/src/gnu/autoconf-1.11/install.sh +/src/gnu/autoconf-1.11/autoconf.info +/src/gnu/autoconf-1.11/standards.texi +/src/gnu/autoconf-1.11/make-stds.texi +/src/gnu/autoconf-1.11/standards.info +/src/gnu/autoconf-1.11/texinfo.tex diff --git a/xargs/testsuite/inputs/files0.xi b/xargs/testsuite/inputs/files0.xi new file mode 100644 index 0000000000000000000000000000000000000000..08ab0e2f546702f9775b82c22da7863d9983cf97 GIT binary patch literal 753 zcwU8)(F%hg6oz}DlwdC~wirRRu?Az8q9;3KHnd=mzhsNu?AV>h|Ksy`lzS(+wlf#= zG|JJoX~wcF;eWUJHQyhroJuRvLyHC&S_&!Z=C&_ODz5W;LuH5az}c z){0H=LK2c;jhc0v8c!oqg9RrH8+J6~pCGYC8G$~%%nmkz$jC$0fl%NgEe}0fKM7+L pI!{4gBzE(4IB46Ef)8epDT7^Ff4H}C2tCn{x|>t literal 0 HcwPel00001 diff --git a/xargs/testsuite/inputs/foobar.xi b/xargs/testsuite/inputs/foobar.xi new file mode 100644 index 0000000..e10988c --- /dev/null +++ b/xargs/testsuite/inputs/foobar.xi @@ -0,0 +1,3 @@ +foo bar +baz +ugh diff --git a/xargs/testsuite/inputs/formfeeds.xi b/xargs/testsuite/inputs/formfeeds.xi new file mode 100644 index 0000000..ecb2715 --- /dev/null +++ b/xargs/testsuite/inputs/formfeeds.xi @@ -0,0 +1,2 @@ +1 2 3 4 +a b c d diff --git a/xargs/testsuite/inputs/ftt.xi b/xargs/testsuite/inputs/ftt.xi new file mode 100644 index 0000000..633a5d0 --- /dev/null +++ b/xargs/testsuite/inputs/ftt.xi @@ -0,0 +1,3 @@ +false +echo 1 +echo 2 diff --git a/xargs/testsuite/inputs/helloworld.xi b/xargs/testsuite/inputs/helloworld.xi new file mode 100644 index 0000000..95d09f2 --- /dev/null +++ b/xargs/testsuite/inputs/helloworld.xi @@ -0,0 +1 @@ +hello world \ No newline at end of file diff --git a/xargs/testsuite/inputs/items-0.xi b/xargs/testsuite/inputs/items-0.xi new file mode 100644 index 0000000000000000000000000000000000000000..b217e3acac501907edc18ec4473db18bdefc7edf GIT binary patch literal 63 zcwQaK$q9f!5Jkav?Jb9nP1KtsIBNWUggVwaHag3~S)XH}XA8NfP*(|dn-Fiv-|^wX E2W$NbCIA2c literal 0 HcwPel00001 diff --git a/xargs/testsuite/inputs/items.xi b/xargs/testsuite/inputs/items.xi new file mode 100644 index 0000000..163874e --- /dev/null +++ b/xargs/testsuite/inputs/items.xi @@ -0,0 +1,8 @@ + +dumb + s s + f f + r r + t t + v v + \ No newline at end of file diff --git a/xargs/testsuite/inputs/ldata-0.xi b/xargs/testsuite/inputs/ldata-0.xi new file mode 100644 index 0000000000000000000000000000000000000000..eaee504bd7d072622d2b57449c365f3096e2a9f1 GIT binary patch literal 108 xcwTkO$pHW$2m`Q=(iH&D{TCBKp5`B+D$R_|p +# +# This is because Linux's execve implementation requires that the sum of +# the sizes of all argument string pointers not exceed 128K (the actual +# limit is ARG_MAX - sizeof (void*)). The difference between 32- and +# 64-bit systems is because sizeof (void*) differs (4 vs. 8). +# +# Tue Nov 22 19:36:49 2005: Use 'true' rather than 'echo', otherwise the +# differences in the value of ARG_MAX on various platforms will cause the +# test to fail. +xargs_start p { true } 32767-ys.xi + diff --git a/xargs/testsuite/xargs.posix/arg_max_64bit_linux_bug.exp b/xargs/testsuite/xargs.posix/arg_max_64bit_linux_bug.exp new file mode 100644 index 0000000..84f2985 --- /dev/null +++ b/xargs/testsuite/xargs.posix/arg_max_64bit_linux_bug.exp @@ -0,0 +1,13 @@ +# +# See message from Jim Meyering. <87hdaam57n.fsf_-_@rho.meyering.net> +# +# This is because Linux's execve implementation requires that the sum of +# the sizes of all argument string pointers not exceed 128K (the actual +# limit is ARG_MAX - sizeof (void*)). The difference between 32- and +# 64-bit systems is because sizeof (void*) differs (4 vs. 8). +# +# Tue Nov 22 19:36:49 2005: Use 'true' rather than 'echo', otherwise the +# differences in the value of ARG_MAX on various platforms will cause the +# test to fail. +xargs_start p { true } 16383-ys.xi + diff --git a/xargs/testsuite/xargs.posix/childfail.exp b/xargs/testsuite/xargs.posix/childfail.exp new file mode 100644 index 0000000..d5cdacb --- /dev/null +++ b/xargs/testsuite/xargs.posix/childfail.exp @@ -0,0 +1 @@ +xargs_start 123 { false } files.xi diff --git a/xargs/testsuite/xargs.posix/empty.exp b/xargs/testsuite/xargs.posix/empty.exp new file mode 100644 index 0000000..cfab826 --- /dev/null +++ b/xargs/testsuite/xargs.posix/empty.exp @@ -0,0 +1 @@ +xargs_start p {echo this plus that} diff --git a/xargs/testsuite/xargs.posix/empty.xo b/xargs/testsuite/xargs.posix/empty.xo new file mode 100644 index 0000000..b8e9a02 --- /dev/null +++ b/xargs/testsuite/xargs.posix/empty.xo @@ -0,0 +1 @@ +this plus that diff --git a/xargs/testsuite/xargs.posix/empty_def.exp b/xargs/testsuite/xargs.posix/empty_def.exp new file mode 100644 index 0000000..765c4bb --- /dev/null +++ b/xargs/testsuite/xargs.posix/empty_def.exp @@ -0,0 +1 @@ +xargs_start p {} diff --git a/xargs/testsuite/xargs.posix/empty_def.xo b/xargs/testsuite/xargs.posix/empty_def.xo new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/xargs/testsuite/xargs.posix/empty_def.xo @@ -0,0 +1 @@ + diff --git a/xargs/testsuite/xargs.posix/hithere.exp b/xargs/testsuite/xargs.posix/hithere.exp new file mode 100644 index 0000000..0256d4b --- /dev/null +++ b/xargs/testsuite/xargs.posix/hithere.exp @@ -0,0 +1 @@ +xargs_start p {-s470 echo hi there} files.xi diff --git a/xargs/testsuite/xargs.posix/hithere.xo b/xargs/testsuite/xargs.posix/hithere.xo new file mode 100644 index 0000000..0c6845b --- /dev/null +++ b/xargs/testsuite/xargs.posix/hithere.xo @@ -0,0 +1,2 @@ +hi there /src/gnu/autoconf-1.11 /src/gnu/autoconf-1.11/README /src/gnu/autoconf-1.11/Makefile.in /src/gnu/autoconf-1.11/INSTALL /src/gnu/autoconf-1.11/NEWS /src/gnu/autoconf-1.11/COPYING /src/gnu/autoconf-1.11/ChangeLog /src/gnu/autoconf-1.11/autoconf.texi /src/gnu/autoconf-1.11/acconfig.h /src/gnu/autoconf-1.11/autoconf.sh /src/gnu/autoconf-1.11/acgeneral.m4 /src/gnu/autoconf-1.11/acspecific.m4 /src/gnu/autoconf-1.11/configure +hi there /src/gnu/autoconf-1.11/configure.in /src/gnu/autoconf-1.11/autoheader.sh /src/gnu/autoconf-1.11/mkinstalldirs /src/gnu/autoconf-1.11/install.sh /src/gnu/autoconf-1.11/autoconf.info /src/gnu/autoconf-1.11/standards.texi /src/gnu/autoconf-1.11/make-stds.texi /src/gnu/autoconf-1.11/standards.info /src/gnu/autoconf-1.11/texinfo.tex diff --git a/xargs/testsuite/xargs.posix/n1.exp b/xargs/testsuite/xargs.posix/n1.exp new file mode 100644 index 0000000..40ddc9e --- /dev/null +++ b/xargs/testsuite/xargs.posix/n1.exp @@ -0,0 +1 @@ +xargs_start p {-n1} stairs.xi diff --git a/xargs/testsuite/xargs.posix/n1.xo b/xargs/testsuite/xargs.posix/n1.xo new file mode 100644 index 0000000..c2a8cce --- /dev/null +++ b/xargs/testsuite/xargs.posix/n1.xo @@ -0,0 +1,18 @@ +1 +22 +333 +4444 +55555 +666666 +7777777 +88888888 +999999999 +1 +22 +333 +4444 +55555 +666666 +7777777 +88888888 +999999999 diff --git a/xargs/testsuite/xargs.posix/n2-s26-x.exp b/xargs/testsuite/xargs.posix/n2-s26-x.exp new file mode 100644 index 0000000..fd59c05 --- /dev/null +++ b/xargs/testsuite/xargs.posix/n2-s26-x.exp @@ -0,0 +1 @@ +xargs_start f {-n2 -s26 -x} stairs.xi skip diff --git a/xargs/testsuite/xargs.posix/n2-s26-x.xo b/xargs/testsuite/xargs.posix/n2-s26-x.xo new file mode 100644 index 0000000..7b6db82 --- /dev/null +++ b/xargs/testsuite/xargs.posix/n2-s26-x.xo @@ -0,0 +1,3 @@ +1 22 +333 4444 +55555 666666 diff --git a/xargs/testsuite/xargs.posix/n2-s26.exp b/xargs/testsuite/xargs.posix/n2-s26.exp new file mode 100644 index 0000000..ba76660 --- /dev/null +++ b/xargs/testsuite/xargs.posix/n2-s26.exp @@ -0,0 +1 @@ +xargs_start p {-n2 -s26} stairs.xi diff --git a/xargs/testsuite/xargs.posix/n2-s26.xo b/xargs/testsuite/xargs.posix/n2-s26.xo new file mode 100644 index 0000000..a9e8dfa --- /dev/null +++ b/xargs/testsuite/xargs.posix/n2-s26.xo @@ -0,0 +1,11 @@ +1 22 +333 4444 +55555 666666 +7777777 +88888888 +999999999 1 +22 333 +4444 55555 +666666 7777777 +88888888 +999999999 diff --git a/xargs/testsuite/xargs.posix/n2.exp b/xargs/testsuite/xargs.posix/n2.exp new file mode 100644 index 0000000..6bcbad2 --- /dev/null +++ b/xargs/testsuite/xargs.posix/n2.exp @@ -0,0 +1 @@ +xargs_start p {-n2} stairs.xi diff --git a/xargs/testsuite/xargs.posix/n2.xo b/xargs/testsuite/xargs.posix/n2.xo new file mode 100644 index 0000000..33d8177 --- /dev/null +++ b/xargs/testsuite/xargs.posix/n2.xo @@ -0,0 +1,9 @@ +1 22 +333 4444 +55555 666666 +7777777 88888888 +999999999 1 +22 333 +4444 55555 +666666 7777777 +88888888 999999999 diff --git a/xargs/testsuite/xargs.posix/n3-s36.exp b/xargs/testsuite/xargs.posix/n3-s36.exp new file mode 100644 index 0000000..00c80e9 --- /dev/null +++ b/xargs/testsuite/xargs.posix/n3-s36.exp @@ -0,0 +1 @@ +xargs_start p {-n3 -s36} stairs2.xi diff --git a/xargs/testsuite/xargs.posix/n3-s36.xo b/xargs/testsuite/xargs.posix/n3-s36.xo new file mode 100644 index 0000000..7484486 --- /dev/null +++ b/xargs/testsuite/xargs.posix/n3-s36.xo @@ -0,0 +1,7 @@ +999999999 88888888 +7777777 666666 55555 +4444 333 22 +1 999999999 88888888 +7777777 666666 55555 +4444 333 22 +1 diff --git a/xargs/testsuite/xargs.posix/n3.exp b/xargs/testsuite/xargs.posix/n3.exp new file mode 100644 index 0000000..472b614 --- /dev/null +++ b/xargs/testsuite/xargs.posix/n3.exp @@ -0,0 +1 @@ +xargs_start p {-n3} files.xi diff --git a/xargs/testsuite/xargs.posix/n3.xo b/xargs/testsuite/xargs.posix/n3.xo new file mode 100644 index 0000000..e663e64 --- /dev/null +++ b/xargs/testsuite/xargs.posix/n3.xo @@ -0,0 +1,8 @@ +/src/gnu/autoconf-1.11 /src/gnu/autoconf-1.11/README /src/gnu/autoconf-1.11/Makefile.in +/src/gnu/autoconf-1.11/INSTALL /src/gnu/autoconf-1.11/NEWS /src/gnu/autoconf-1.11/COPYING +/src/gnu/autoconf-1.11/ChangeLog /src/gnu/autoconf-1.11/autoconf.texi /src/gnu/autoconf-1.11/acconfig.h +/src/gnu/autoconf-1.11/autoconf.sh /src/gnu/autoconf-1.11/acgeneral.m4 /src/gnu/autoconf-1.11/acspecific.m4 +/src/gnu/autoconf-1.11/configure /src/gnu/autoconf-1.11/configure.in /src/gnu/autoconf-1.11/autoheader.sh +/src/gnu/autoconf-1.11/mkinstalldirs /src/gnu/autoconf-1.11/install.sh /src/gnu/autoconf-1.11/autoconf.info +/src/gnu/autoconf-1.11/standards.texi /src/gnu/autoconf-1.11/make-stds.texi /src/gnu/autoconf-1.11/standards.info +/src/gnu/autoconf-1.11/texinfo.tex diff --git a/xargs/testsuite/xargs.posix/noeof.exp b/xargs/testsuite/xargs.posix/noeof.exp new file mode 100644 index 0000000..ad49437 --- /dev/null +++ b/xargs/testsuite/xargs.posix/noeof.exp @@ -0,0 +1 @@ +xargs_start p {} noeof.xi diff --git a/xargs/testsuite/xargs.posix/noeof.xo b/xargs/testsuite/xargs.posix/noeof.xo new file mode 100644 index 0000000..45f9997 --- /dev/null +++ b/xargs/testsuite/xargs.posix/noeof.xo @@ -0,0 +1 @@ +first second diff --git a/xargs/testsuite/xargs.posix/quotes.exp b/xargs/testsuite/xargs.posix/quotes.exp new file mode 100644 index 0000000..574e1ec --- /dev/null +++ b/xargs/testsuite/xargs.posix/quotes.exp @@ -0,0 +1 @@ +xargs_start p {} quotes.xi diff --git a/xargs/testsuite/xargs.posix/quotes.xo b/xargs/testsuite/xargs.posix/quotes.xo new file mode 100644 index 0000000..9b6477f --- /dev/null +++ b/xargs/testsuite/xargs.posix/quotes.xo @@ -0,0 +1,2 @@ +this is quoted stuff and +an embedded newline with single quotes as well. diff --git a/xargs/testsuite/xargs.posix/rc-123.exp b/xargs/testsuite/xargs.posix/rc-123.exp new file mode 100644 index 0000000..217de0f --- /dev/null +++ b/xargs/testsuite/xargs.posix/rc-123.exp @@ -0,0 +1 @@ +xargs_start 123 {-n1 -IARG sh -c ARG} ftt.xi diff --git a/xargs/testsuite/xargs.posix/rc-123.xo b/xargs/testsuite/xargs.posix/rc-123.xo new file mode 100644 index 0000000..1191247 --- /dev/null +++ b/xargs/testsuite/xargs.posix/rc-123.xo @@ -0,0 +1,2 @@ +1 +2 diff --git a/xargs/testsuite/xargs.posix/rc-124.exp b/xargs/testsuite/xargs.posix/rc-124.exp new file mode 100644 index 0000000..4fe3aba --- /dev/null +++ b/xargs/testsuite/xargs.posix/rc-124.exp @@ -0,0 +1 @@ +xargs_start 124 {-n1 -IARG sh -c ARG} ett.xi skip diff --git a/xargs/testsuite/xargs.posix/rc-125.exp b/xargs/testsuite/xargs.posix/rc-125.exp new file mode 100644 index 0000000..6624880 --- /dev/null +++ b/xargs/testsuite/xargs.posix/rc-125.exp @@ -0,0 +1,11 @@ +# +# The technique of using "kill $$" is unreliable. For example, +# on MacOS X, the child just exits with a nonzero status. +# This works better but is harder to use in a DejaGnu test: +# yes | xargs -I{} echo | true +# Part of the problem here of course is that the exit status of the +# pipeline is the exit status of its last compinent. +# +# This problem is recorded as Savannah bug# 19969. +# +xargs_start 125 {-n1 -IARG sh -c ARG} stt.xi skip diff --git a/xargs/testsuite/xargs.posix/rc-126.exp b/xargs/testsuite/xargs.posix/rc-126.exp new file mode 100644 index 0000000..17cb9f4 --- /dev/null +++ b/xargs/testsuite/xargs.posix/rc-126.exp @@ -0,0 +1 @@ +xargs_start 126 {/} {} skip diff --git a/xargs/testsuite/xargs.posix/rc-127.exp b/xargs/testsuite/xargs.posix/rc-127.exp new file mode 100644 index 0000000..8e4278a --- /dev/null +++ b/xargs/testsuite/xargs.posix/rc-127.exp @@ -0,0 +1 @@ +xargs_start 127 {./missing} {} skip diff --git a/xargs/testsuite/xargs.posix/s118.exp b/xargs/testsuite/xargs.posix/s118.exp new file mode 100644 index 0000000..1f0fc9f --- /dev/null +++ b/xargs/testsuite/xargs.posix/s118.exp @@ -0,0 +1 @@ +xargs_start p {-s118} stairs.xi diff --git a/xargs/testsuite/xargs.posix/s118.xo b/xargs/testsuite/xargs.posix/s118.xo new file mode 100644 index 0000000..06b617a --- /dev/null +++ b/xargs/testsuite/xargs.posix/s118.xo @@ -0,0 +1 @@ +1 22 333 4444 55555 666666 7777777 88888888 999999999 1 22 333 4444 55555 666666 7777777 88888888 999999999 diff --git a/xargs/testsuite/xargs.posix/s19.exp b/xargs/testsuite/xargs.posix/s19.exp new file mode 100644 index 0000000..86f9337 --- /dev/null +++ b/xargs/testsuite/xargs.posix/s19.exp @@ -0,0 +1 @@ +xargs_start f {-s19} stairs.xi skip diff --git a/xargs/testsuite/xargs.posix/s19.xo b/xargs/testsuite/xargs.posix/s19.xo new file mode 100644 index 0000000..afb3bc3 --- /dev/null +++ b/xargs/testsuite/xargs.posix/s19.xo @@ -0,0 +1,6 @@ +1 22 333 +4444 +55555 +666666 +7777777 +88888888 diff --git a/xargs/testsuite/xargs.posix/s19_2.exp b/xargs/testsuite/xargs.posix/s19_2.exp new file mode 100644 index 0000000..be27aef --- /dev/null +++ b/xargs/testsuite/xargs.posix/s19_2.exp @@ -0,0 +1 @@ +xargs_start f {-s19} stairs2.xi skip diff --git a/xargs/testsuite/xargs.posix/s20.exp b/xargs/testsuite/xargs.posix/s20.exp new file mode 100644 index 0000000..f87d441 --- /dev/null +++ b/xargs/testsuite/xargs.posix/s20.exp @@ -0,0 +1 @@ +xargs_start p {-s20} stairs.xi diff --git a/xargs/testsuite/xargs.posix/s20.xo b/xargs/testsuite/xargs.posix/s20.xo new file mode 100644 index 0000000..7f7032e --- /dev/null +++ b/xargs/testsuite/xargs.posix/s20.xo @@ -0,0 +1,14 @@ +1 22 333 +4444 +55555 +666666 +7777777 +88888888 +999999999 +1 22 333 +4444 +55555 +666666 +7777777 +88888888 +999999999 diff --git a/xargs/testsuite/xargs.posix/s30.exp b/xargs/testsuite/xargs.posix/s30.exp new file mode 100644 index 0000000..9faa71b --- /dev/null +++ b/xargs/testsuite/xargs.posix/s30.exp @@ -0,0 +1 @@ +xargs_start p {-s30} stairs.xi diff --git a/xargs/testsuite/xargs.posix/s30.xo b/xargs/testsuite/xargs.posix/s30.xo new file mode 100644 index 0000000..64ba7cb --- /dev/null +++ b/xargs/testsuite/xargs.posix/s30.xo @@ -0,0 +1,6 @@ +1 22 333 4444 55555 +666666 7777777 +88888888 999999999 +1 22 333 4444 55555 +666666 7777777 +88888888 999999999 diff --git a/xargs/testsuite/xargs.posix/s47.exp b/xargs/testsuite/xargs.posix/s47.exp new file mode 100644 index 0000000..8f79b2a --- /dev/null +++ b/xargs/testsuite/xargs.posix/s47.exp @@ -0,0 +1 @@ +xargs_start f {-s47} files.xi skip diff --git a/xargs/testsuite/xargs.posix/s47.xo b/xargs/testsuite/xargs.posix/s47.xo new file mode 100644 index 0000000..26eed8f --- /dev/null +++ b/xargs/testsuite/xargs.posix/s47.xo @@ -0,0 +1,18 @@ +/src/gnu/autoconf-1.11 +/src/gnu/autoconf-1.11/README +/src/gnu/autoconf-1.11/Makefile.in +/src/gnu/autoconf-1.11/INSTALL +/src/gnu/autoconf-1.11/NEWS +/src/gnu/autoconf-1.11/COPYING +/src/gnu/autoconf-1.11/ChangeLog +/src/gnu/autoconf-1.11/autoconf.texi +/src/gnu/autoconf-1.11/acconfig.h +/src/gnu/autoconf-1.11/autoconf.sh +/src/gnu/autoconf-1.11/acgeneral.m4 +/src/gnu/autoconf-1.11/acspecific.m4 +/src/gnu/autoconf-1.11/configure +/src/gnu/autoconf-1.11/configure.in +/src/gnu/autoconf-1.11/autoheader.sh +/src/gnu/autoconf-1.11/mkinstalldirs +/src/gnu/autoconf-1.11/install.sh +/src/gnu/autoconf-1.11/autoconf.info diff --git a/xargs/testsuite/xargs.posix/s470.exp b/xargs/testsuite/xargs.posix/s470.exp new file mode 100644 index 0000000..5828ce6 --- /dev/null +++ b/xargs/testsuite/xargs.posix/s470.exp @@ -0,0 +1 @@ +xargs_start p {-s470} files.xi skip diff --git a/xargs/testsuite/xargs.posix/s470.xo b/xargs/testsuite/xargs.posix/s470.xo new file mode 100644 index 0000000..8107725 --- /dev/null +++ b/xargs/testsuite/xargs.posix/s470.xo @@ -0,0 +1,2 @@ +/src/gnu/autoconf-1.11 /src/gnu/autoconf-1.11/README /src/gnu/autoconf-1.11/Makefile.in /src/gnu/autoconf-1.11/INSTALL /src/gnu/autoconf-1.11/NEWS /src/gnu/autoconf-1.11/COPYING /src/gnu/autoconf-1.11/ChangeLog /src/gnu/autoconf-1.11/autoconf.texi /src/gnu/autoconf-1.11/acconfig.h /src/gnu/autoconf-1.11/autoconf.sh /src/gnu/autoconf-1.11/acgeneral.m4 /src/gnu/autoconf-1.11/acspecific.m4 /src/gnu/autoconf-1.11/configure /src/gnu/autoconf-1.11/configure.in +/src/gnu/autoconf-1.11/autoheader.sh /src/gnu/autoconf-1.11/mkinstalldirs /src/gnu/autoconf-1.11/install.sh /src/gnu/autoconf-1.11/autoconf.info /src/gnu/autoconf-1.11/standards.texi /src/gnu/autoconf-1.11/make-stds.texi /src/gnu/autoconf-1.11/standards.info /src/gnu/autoconf-1.11/texinfo.tex diff --git a/xargs/testsuite/xargs.posix/s48.exp b/xargs/testsuite/xargs.posix/s48.exp new file mode 100644 index 0000000..506e77b --- /dev/null +++ b/xargs/testsuite/xargs.posix/s48.exp @@ -0,0 +1 @@ +xargs_start p {-s48} files.xi diff --git a/xargs/testsuite/xargs.posix/s48.xo b/xargs/testsuite/xargs.posix/s48.xo new file mode 100644 index 0000000..5590252 --- /dev/null +++ b/xargs/testsuite/xargs.posix/s48.xo @@ -0,0 +1,22 @@ +/src/gnu/autoconf-1.11 +/src/gnu/autoconf-1.11/README +/src/gnu/autoconf-1.11/Makefile.in +/src/gnu/autoconf-1.11/INSTALL +/src/gnu/autoconf-1.11/NEWS +/src/gnu/autoconf-1.11/COPYING +/src/gnu/autoconf-1.11/ChangeLog +/src/gnu/autoconf-1.11/autoconf.texi +/src/gnu/autoconf-1.11/acconfig.h +/src/gnu/autoconf-1.11/autoconf.sh +/src/gnu/autoconf-1.11/acgeneral.m4 +/src/gnu/autoconf-1.11/acspecific.m4 +/src/gnu/autoconf-1.11/configure +/src/gnu/autoconf-1.11/configure.in +/src/gnu/autoconf-1.11/autoheader.sh +/src/gnu/autoconf-1.11/mkinstalldirs +/src/gnu/autoconf-1.11/install.sh +/src/gnu/autoconf-1.11/autoconf.info +/src/gnu/autoconf-1.11/standards.texi +/src/gnu/autoconf-1.11/make-stds.texi +/src/gnu/autoconf-1.11/standards.info +/src/gnu/autoconf-1.11/texinfo.tex diff --git a/xargs/testsuite/xargs.posix/s6.exp b/xargs/testsuite/xargs.posix/s6.exp new file mode 100644 index 0000000..a5a714f --- /dev/null +++ b/xargs/testsuite/xargs.posix/s6.exp @@ -0,0 +1 @@ +xargs_start f {-s6} files.xi skip diff --git a/xargs/testsuite/xargs.posix/savannah-11865.exp b/xargs/testsuite/xargs.posix/savannah-11865.exp new file mode 100644 index 0000000..fa7d41a --- /dev/null +++ b/xargs/testsuite/xargs.posix/savannah-11865.exp @@ -0,0 +1 @@ +xargs_start p {-iARG -s86 echo ARG is xARGx} files.xi diff --git a/xargs/testsuite/xargs.posix/savannah-11865.xo b/xargs/testsuite/xargs.posix/savannah-11865.xo new file mode 100644 index 0000000..f28510b --- /dev/null +++ b/xargs/testsuite/xargs.posix/savannah-11865.xo @@ -0,0 +1,22 @@ +/src/gnu/autoconf-1.11 is x/src/gnu/autoconf-1.11x +/src/gnu/autoconf-1.11/README is x/src/gnu/autoconf-1.11/READMEx +/src/gnu/autoconf-1.11/Makefile.in is x/src/gnu/autoconf-1.11/Makefile.inx +/src/gnu/autoconf-1.11/INSTALL is x/src/gnu/autoconf-1.11/INSTALLx +/src/gnu/autoconf-1.11/NEWS is x/src/gnu/autoconf-1.11/NEWSx +/src/gnu/autoconf-1.11/COPYING is x/src/gnu/autoconf-1.11/COPYINGx +/src/gnu/autoconf-1.11/ChangeLog is x/src/gnu/autoconf-1.11/ChangeLogx +/src/gnu/autoconf-1.11/autoconf.texi is x/src/gnu/autoconf-1.11/autoconf.texix +/src/gnu/autoconf-1.11/acconfig.h is x/src/gnu/autoconf-1.11/acconfig.hx +/src/gnu/autoconf-1.11/autoconf.sh is x/src/gnu/autoconf-1.11/autoconf.shx +/src/gnu/autoconf-1.11/acgeneral.m4 is x/src/gnu/autoconf-1.11/acgeneral.m4x +/src/gnu/autoconf-1.11/acspecific.m4 is x/src/gnu/autoconf-1.11/acspecific.m4x +/src/gnu/autoconf-1.11/configure is x/src/gnu/autoconf-1.11/configurex +/src/gnu/autoconf-1.11/configure.in is x/src/gnu/autoconf-1.11/configure.inx +/src/gnu/autoconf-1.11/autoheader.sh is x/src/gnu/autoconf-1.11/autoheader.shx +/src/gnu/autoconf-1.11/mkinstalldirs is x/src/gnu/autoconf-1.11/mkinstalldirsx +/src/gnu/autoconf-1.11/install.sh is x/src/gnu/autoconf-1.11/install.shx +/src/gnu/autoconf-1.11/autoconf.info is x/src/gnu/autoconf-1.11/autoconf.infox +/src/gnu/autoconf-1.11/standards.texi is x/src/gnu/autoconf-1.11/standards.texix +/src/gnu/autoconf-1.11/make-stds.texi is x/src/gnu/autoconf-1.11/make-stds.texix +/src/gnu/autoconf-1.11/standards.info is x/src/gnu/autoconf-1.11/standards.infox +/src/gnu/autoconf-1.11/texinfo.tex is x/src/gnu/autoconf-1.11/texinfo.texx diff --git a/xargs/testsuite/xargs.posix/space-I.exp b/xargs/testsuite/xargs.posix/space-I.exp new file mode 100644 index 0000000..69eb0b7 --- /dev/null +++ b/xargs/testsuite/xargs.posix/space-I.exp @@ -0,0 +1 @@ +xargs_start p {-IARG echo from ARG to xARGy} space.xi diff --git a/xargs/testsuite/xargs.posix/space.exp b/xargs/testsuite/xargs.posix/space.exp new file mode 100644 index 0000000..3ba833b --- /dev/null +++ b/xargs/testsuite/xargs.posix/space.exp @@ -0,0 +1 @@ +xargs_start p {echo this plus that} space.xi diff --git a/xargs/testsuite/xargs.posix/space.xo b/xargs/testsuite/xargs.posix/space.xo new file mode 100644 index 0000000..b8e9a02 --- /dev/null +++ b/xargs/testsuite/xargs.posix/space.xo @@ -0,0 +1 @@ +this plus that diff --git a/xargs/testsuite/xargs.posix/sv-bug-18714.exp b/xargs/testsuite/xargs.posix/sv-bug-18714.exp new file mode 100644 index 0000000..b40e105 --- /dev/null +++ b/xargs/testsuite/xargs.posix/sv-bug-18714.exp @@ -0,0 +1,10 @@ +# Form feed is not a separator. +# +# POSIX specifies that is the serarator +# in the POSIX locale, and is defined +# as or . +# +# On the other hand, includes Form Feed and +# Vertical Tab. By default, those should not be +# separators. +xargs_start p {printf "\[%s\]\n"} formfeeds.xi diff --git a/xargs/testsuite/xargs.posix/sv-bug-18714.xo b/xargs/testsuite/xargs.posix/sv-bug-18714.xo new file mode 100644 index 0000000..5ec9a95 --- /dev/null +++ b/xargs/testsuite/xargs.posix/sv-bug-18714.xo @@ -0,0 +1,2 @@ +[1 2 3 4] +[a b c d] diff --git a/xargs/testsuite/xargs.posix/sv-bug-18714b.exp b/xargs/testsuite/xargs.posix/sv-bug-18714b.exp new file mode 100644 index 0000000..f110daf --- /dev/null +++ b/xargs/testsuite/xargs.posix/sv-bug-18714b.exp @@ -0,0 +1,10 @@ +# Vertical tab is not a separator. +# +# POSIX specifies that is the serarator +# in the POSIX locale, and is defined +# as or . +# +# On the other hand, includes Form Feed and +# Vertical Tab. By default, those should not be +# separators. +xargs_start p {printf "\[%s\]\n"} verticaltabs.xi diff --git a/xargs/testsuite/xargs.posix/sv-bug-18714b.xo b/xargs/testsuite/xargs.posix/sv-bug-18714b.xo new file mode 100644 index 0000000..ec33986 --- /dev/null +++ b/xargs/testsuite/xargs.posix/sv-bug-18714b.xo @@ -0,0 +1,2 @@ +[q w e r] +[6 7 8 9] diff --git a/xargs/testsuite/xargs.posix/sv-bug-20273.exp b/xargs/testsuite/xargs.posix/sv-bug-20273.exp new file mode 100644 index 0000000..6d069e2 --- /dev/null +++ b/xargs/testsuite/xargs.posix/sv-bug-20273.exp @@ -0,0 +1 @@ +xargs_start p "" sv-bug-20273.xi "" "sh -c \{$XARGS $XARGSFLAGS -E2; cat\}" diff --git a/xargs/testsuite/xargs.posix/sv-bug-20273.xo b/xargs/testsuite/xargs.posix/sv-bug-20273.xo new file mode 100644 index 0000000..2b2f2e1 --- /dev/null +++ b/xargs/testsuite/xargs.posix/sv-bug-20273.xo @@ -0,0 +1,2 @@ +1 +3 diff --git a/xargs/testsuite/xargs.posix/uc_L2.exp b/xargs/testsuite/xargs.posix/uc_L2.exp new file mode 100644 index 0000000..8ad3dd7 --- /dev/null +++ b/xargs/testsuite/xargs.posix/uc_L2.exp @@ -0,0 +1 @@ +xargs_start p {-L2} ldata.xi diff --git a/xargs/testsuite/xargs.posix/uc_L2.xo b/xargs/testsuite/xargs.posix/uc_L2.xo new file mode 100644 index 0000000..7234702 --- /dev/null +++ b/xargs/testsuite/xargs.posix/uc_L2.xo @@ -0,0 +1,5 @@ +1 22 333 4444 55555 666666 +7777777 88888888 +999999999 1 22 333 4444 55555 +666666 7777777 88888888 +999999999 diff --git a/xargs/testsuite/xargs.posix/unmatched-n2-x.exp b/xargs/testsuite/xargs.posix/unmatched-n2-x.exp new file mode 100644 index 0000000..720b48f --- /dev/null +++ b/xargs/testsuite/xargs.posix/unmatched-n2-x.exp @@ -0,0 +1 @@ +xargs_start f {-n2 -x} unmatched.xi skip diff --git a/xargs/testsuite/xargs.posix/unmatched.exp b/xargs/testsuite/xargs.posix/unmatched.exp new file mode 100644 index 0000000..a98c920 --- /dev/null +++ b/xargs/testsuite/xargs.posix/unmatched.exp @@ -0,0 +1 @@ +xargs_start f {} unmatched.xi skip diff --git a/xargs/testsuite/xargs.posix/unmatched.xo b/xargs/testsuite/xargs.posix/unmatched.xo new file mode 100644 index 0000000..5626abf --- /dev/null +++ b/xargs/testsuite/xargs.posix/unmatched.xo @@ -0,0 +1 @@ +one diff --git a/xargs/testsuite/xargs.posix/unmatched2.exp b/xargs/testsuite/xargs.posix/unmatched2.exp new file mode 100644 index 0000000..12b17f3 --- /dev/null +++ b/xargs/testsuite/xargs.posix/unmatched2.exp @@ -0,0 +1 @@ +xargs_start f {} unmatched2.xi skip diff --git a/xargs/testsuite/xargs.posix/unmatched2.xo b/xargs/testsuite/xargs.posix/unmatched2.xo new file mode 100644 index 0000000..5626abf --- /dev/null +++ b/xargs/testsuite/xargs.posix/unmatched2.xo @@ -0,0 +1 @@ +one diff --git a/xargs/testsuite/xargs.sysv/e.exp b/xargs/testsuite/xargs.sysv/e.exp new file mode 100644 index 0000000..86c3af1 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/e.exp @@ -0,0 +1 @@ +xargs_start p {-e} eof_.xi diff --git a/xargs/testsuite/xargs.sysv/e.xo b/xargs/testsuite/xargs.sysv/e.xo new file mode 100644 index 0000000..28a9314 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/e.xo @@ -0,0 +1 @@ +one two _ three four diff --git a/xargs/testsuite/xargs.sysv/eEOF.exp b/xargs/testsuite/xargs.sysv/eEOF.exp new file mode 100644 index 0000000..8ac68aa --- /dev/null +++ b/xargs/testsuite/xargs.sysv/eEOF.exp @@ -0,0 +1 @@ +xargs_start p {-eEOF} eofstr.xi diff --git a/xargs/testsuite/xargs.sysv/eEOF.xo b/xargs/testsuite/xargs.sysv/eEOF.xo new file mode 100644 index 0000000..7f4c1cd --- /dev/null +++ b/xargs/testsuite/xargs.sysv/eEOF.xo @@ -0,0 +1 @@ +firstline secondline diff --git a/xargs/testsuite/xargs.sysv/empty-t.exp b/xargs/testsuite/xargs.sysv/empty-t.exp new file mode 100644 index 0000000..8047015 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/empty-t.exp @@ -0,0 +1 @@ +xargs_start p {-t echo this plus that} diff --git a/xargs/testsuite/xargs.sysv/empty-t.xe b/xargs/testsuite/xargs.sysv/empty-t.xe new file mode 100644 index 0000000..ec9c43d --- /dev/null +++ b/xargs/testsuite/xargs.sysv/empty-t.xe @@ -0,0 +1 @@ +echo this plus that diff --git a/xargs/testsuite/xargs.sysv/empty-t.xo b/xargs/testsuite/xargs.sysv/empty-t.xo new file mode 100644 index 0000000..b8e9a02 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/empty-t.xo @@ -0,0 +1 @@ +this plus that diff --git a/xargs/testsuite/xargs.sysv/empty_def-t.exp b/xargs/testsuite/xargs.sysv/empty_def-t.exp new file mode 100644 index 0000000..2f1e9b9 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/empty_def-t.exp @@ -0,0 +1 @@ +xargs_start p {-t} diff --git a/xargs/testsuite/xargs.sysv/empty_def-t.xe b/xargs/testsuite/xargs.sysv/empty_def-t.xe new file mode 100644 index 0000000..da4ae85 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/empty_def-t.xe @@ -0,0 +1 @@ +/bin/echo diff --git a/xargs/testsuite/xargs.sysv/empty_def-t.xo b/xargs/testsuite/xargs.sysv/empty_def-t.xo new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/empty_def-t.xo @@ -0,0 +1 @@ + diff --git a/xargs/testsuite/xargs.sysv/eof1.exp b/xargs/testsuite/xargs.sysv/eof1.exp new file mode 100644 index 0000000..ca178e8 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/eof1.exp @@ -0,0 +1 @@ +xargs_start p {-E_} eof1.xi diff --git a/xargs/testsuite/xargs.sysv/eof1.xo b/xargs/testsuite/xargs.sysv/eof1.xo new file mode 100644 index 0000000..7f4c1cd --- /dev/null +++ b/xargs/testsuite/xargs.sysv/eof1.xo @@ -0,0 +1 @@ +firstline secondline diff --git a/xargs/testsuite/xargs.sysv/iARG.exp b/xargs/testsuite/xargs.sysv/iARG.exp new file mode 100644 index 0000000..2e2ec75 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/iARG.exp @@ -0,0 +1 @@ +xargs_start p {-iARG echo ARG is xARGx} files.xi diff --git a/xargs/testsuite/xargs.sysv/iARG.xo b/xargs/testsuite/xargs.sysv/iARG.xo new file mode 100644 index 0000000..f28510b --- /dev/null +++ b/xargs/testsuite/xargs.sysv/iARG.xo @@ -0,0 +1,22 @@ +/src/gnu/autoconf-1.11 is x/src/gnu/autoconf-1.11x +/src/gnu/autoconf-1.11/README is x/src/gnu/autoconf-1.11/READMEx +/src/gnu/autoconf-1.11/Makefile.in is x/src/gnu/autoconf-1.11/Makefile.inx +/src/gnu/autoconf-1.11/INSTALL is x/src/gnu/autoconf-1.11/INSTALLx +/src/gnu/autoconf-1.11/NEWS is x/src/gnu/autoconf-1.11/NEWSx +/src/gnu/autoconf-1.11/COPYING is x/src/gnu/autoconf-1.11/COPYINGx +/src/gnu/autoconf-1.11/ChangeLog is x/src/gnu/autoconf-1.11/ChangeLogx +/src/gnu/autoconf-1.11/autoconf.texi is x/src/gnu/autoconf-1.11/autoconf.texix +/src/gnu/autoconf-1.11/acconfig.h is x/src/gnu/autoconf-1.11/acconfig.hx +/src/gnu/autoconf-1.11/autoconf.sh is x/src/gnu/autoconf-1.11/autoconf.shx +/src/gnu/autoconf-1.11/acgeneral.m4 is x/src/gnu/autoconf-1.11/acgeneral.m4x +/src/gnu/autoconf-1.11/acspecific.m4 is x/src/gnu/autoconf-1.11/acspecific.m4x +/src/gnu/autoconf-1.11/configure is x/src/gnu/autoconf-1.11/configurex +/src/gnu/autoconf-1.11/configure.in is x/src/gnu/autoconf-1.11/configure.inx +/src/gnu/autoconf-1.11/autoheader.sh is x/src/gnu/autoconf-1.11/autoheader.shx +/src/gnu/autoconf-1.11/mkinstalldirs is x/src/gnu/autoconf-1.11/mkinstalldirsx +/src/gnu/autoconf-1.11/install.sh is x/src/gnu/autoconf-1.11/install.shx +/src/gnu/autoconf-1.11/autoconf.info is x/src/gnu/autoconf-1.11/autoconf.infox +/src/gnu/autoconf-1.11/standards.texi is x/src/gnu/autoconf-1.11/standards.texix +/src/gnu/autoconf-1.11/make-stds.texi is x/src/gnu/autoconf-1.11/make-stds.texix +/src/gnu/autoconf-1.11/standards.info is x/src/gnu/autoconf-1.11/standards.infox +/src/gnu/autoconf-1.11/texinfo.tex is x/src/gnu/autoconf-1.11/texinfo.texx diff --git a/xargs/testsuite/xargs.sysv/idef-s26.exp b/xargs/testsuite/xargs.sysv/idef-s26.exp new file mode 100644 index 0000000..348661b --- /dev/null +++ b/xargs/testsuite/xargs.sysv/idef-s26.exp @@ -0,0 +1 @@ +xargs_start f {-i -s26 echo from \{\} to x{}y} items.xi skip diff --git a/xargs/testsuite/xargs.sysv/idef-s26.xo b/xargs/testsuite/xargs.sysv/idef-s26.xo new file mode 100644 index 0000000..94f1e34 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/idef-s26.xo @@ -0,0 +1 @@ +from dumb to xdumby diff --git a/xargs/testsuite/xargs.sysv/idef.exp b/xargs/testsuite/xargs.sysv/idef.exp new file mode 100644 index 0000000..78049fa --- /dev/null +++ b/xargs/testsuite/xargs.sysv/idef.exp @@ -0,0 +1 @@ +xargs_start p {-i echo from \{\} to x{}y} items.xi diff --git a/xargs/testsuite/xargs.sysv/idef.xo b/xargs/testsuite/xargs.sysv/idef.xo new file mode 100644 index 0000000..a78e799 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/idef.xo @@ -0,0 +1,6 @@ +from dumb to xdumby +from s s to xs s y +from f f to xf f y +from r r to xr r y +from t t to xt t y +from v v to xv v y diff --git a/xargs/testsuite/xargs.sysv/iquotes.exp b/xargs/testsuite/xargs.sysv/iquotes.exp new file mode 100644 index 0000000..43b8877 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/iquotes.exp @@ -0,0 +1 @@ +xargs_start p {-i__ echo FIRST __ IS OK} quotes.xi diff --git a/xargs/testsuite/xargs.sysv/iquotes.xo b/xargs/testsuite/xargs.sysv/iquotes.xo new file mode 100644 index 0000000..10ce85c --- /dev/null +++ b/xargs/testsuite/xargs.sysv/iquotes.xo @@ -0,0 +1,5 @@ +FIRST this is IS OK +FIRST quoted stuff IS OK +FIRST and +an embedded newline IS OK +FIRST with single quotes as well. IS OK diff --git a/xargs/testsuite/xargs.sysv/l1.exp b/xargs/testsuite/xargs.sysv/l1.exp new file mode 100644 index 0000000..5dbec2a --- /dev/null +++ b/xargs/testsuite/xargs.sysv/l1.exp @@ -0,0 +1 @@ +xargs_start p {-l} ldata.xi diff --git a/xargs/testsuite/xargs.sysv/l1.xo b/xargs/testsuite/xargs.sysv/l1.xo new file mode 100644 index 0000000..b654880 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/l1.xo @@ -0,0 +1,9 @@ +1 22 333 4444 +55555 666666 +7777777 +88888888 +999999999 1 22 +333 4444 55555 +666666 7777777 +88888888 +999999999 diff --git a/xargs/testsuite/xargs.sysv/l1_2.exp b/xargs/testsuite/xargs.sysv/l1_2.exp new file mode 100644 index 0000000..ffb6ad6 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/l1_2.exp @@ -0,0 +1 @@ +xargs_start p {-l} ldatab.xi diff --git a/xargs/testsuite/xargs.sysv/l1_2.xo b/xargs/testsuite/xargs.sysv/l1_2.xo new file mode 100644 index 0000000..f9dc665 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/l1_2.xo @@ -0,0 +1,6 @@ +1 22 333 4444 55555 666666 +7777777 88888888 999999999 1 22 +333 4444 55555 +666666 7777777 +88888888 +999999999 diff --git a/xargs/testsuite/xargs.sysv/l1n4.exp b/xargs/testsuite/xargs.sysv/l1n4.exp new file mode 100644 index 0000000..4eef466 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/l1n4.exp @@ -0,0 +1 @@ +xargs_start p {-l1 -n4} files.xi diff --git a/xargs/testsuite/xargs.sysv/l1n4.xo b/xargs/testsuite/xargs.sysv/l1n4.xo new file mode 100644 index 0000000..03f29b5 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/l1n4.xo @@ -0,0 +1,6 @@ +/src/gnu/autoconf-1.11 /src/gnu/autoconf-1.11/README /src/gnu/autoconf-1.11/Makefile.in /src/gnu/autoconf-1.11/INSTALL +/src/gnu/autoconf-1.11/NEWS /src/gnu/autoconf-1.11/COPYING /src/gnu/autoconf-1.11/ChangeLog /src/gnu/autoconf-1.11/autoconf.texi +/src/gnu/autoconf-1.11/acconfig.h /src/gnu/autoconf-1.11/autoconf.sh /src/gnu/autoconf-1.11/acgeneral.m4 /src/gnu/autoconf-1.11/acspecific.m4 +/src/gnu/autoconf-1.11/configure /src/gnu/autoconf-1.11/configure.in /src/gnu/autoconf-1.11/autoheader.sh /src/gnu/autoconf-1.11/mkinstalldirs +/src/gnu/autoconf-1.11/install.sh /src/gnu/autoconf-1.11/autoconf.info /src/gnu/autoconf-1.11/standards.texi /src/gnu/autoconf-1.11/make-stds.texi +/src/gnu/autoconf-1.11/standards.info /src/gnu/autoconf-1.11/texinfo.tex diff --git a/xargs/testsuite/xargs.sysv/lc_l2.exp b/xargs/testsuite/xargs.sysv/lc_l2.exp new file mode 100644 index 0000000..c50b16c --- /dev/null +++ b/xargs/testsuite/xargs.sysv/lc_l2.exp @@ -0,0 +1 @@ +xargs_start p {-l2} files.xi diff --git a/xargs/testsuite/xargs.sysv/lc_l2.xo b/xargs/testsuite/xargs.sysv/lc_l2.xo new file mode 100644 index 0000000..0fa9424 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/lc_l2.xo @@ -0,0 +1,11 @@ +/src/gnu/autoconf-1.11 /src/gnu/autoconf-1.11/README +/src/gnu/autoconf-1.11/Makefile.in /src/gnu/autoconf-1.11/INSTALL +/src/gnu/autoconf-1.11/NEWS /src/gnu/autoconf-1.11/COPYING +/src/gnu/autoconf-1.11/ChangeLog /src/gnu/autoconf-1.11/autoconf.texi +/src/gnu/autoconf-1.11/acconfig.h /src/gnu/autoconf-1.11/autoconf.sh +/src/gnu/autoconf-1.11/acgeneral.m4 /src/gnu/autoconf-1.11/acspecific.m4 +/src/gnu/autoconf-1.11/configure /src/gnu/autoconf-1.11/configure.in +/src/gnu/autoconf-1.11/autoheader.sh /src/gnu/autoconf-1.11/mkinstalldirs +/src/gnu/autoconf-1.11/install.sh /src/gnu/autoconf-1.11/autoconf.info +/src/gnu/autoconf-1.11/standards.texi /src/gnu/autoconf-1.11/make-stds.texi +/src/gnu/autoconf-1.11/standards.info /src/gnu/autoconf-1.11/texinfo.tex diff --git a/xargs/testsuite/xargs.sysv/s30-t.exp b/xargs/testsuite/xargs.sysv/s30-t.exp new file mode 100644 index 0000000..4145c8d --- /dev/null +++ b/xargs/testsuite/xargs.sysv/s30-t.exp @@ -0,0 +1 @@ +xargs_start p {-s30 -t} stairs.xi diff --git a/xargs/testsuite/xargs.sysv/s30-t.xe b/xargs/testsuite/xargs.sysv/s30-t.xe new file mode 100644 index 0000000..f91bf78 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/s30-t.xe @@ -0,0 +1,6 @@ +/bin/echo 1 22 333 4444 55555 +/bin/echo 666666 7777777 +/bin/echo 88888888 999999999 +/bin/echo 1 22 333 4444 55555 +/bin/echo 666666 7777777 +/bin/echo 88888888 999999999 diff --git a/xargs/testsuite/xargs.sysv/s30-t.xo b/xargs/testsuite/xargs.sysv/s30-t.xo new file mode 100644 index 0000000..64ba7cb --- /dev/null +++ b/xargs/testsuite/xargs.sysv/s30-t.xo @@ -0,0 +1,6 @@ +1 22 333 4444 55555 +666666 7777777 +88888888 999999999 +1 22 333 4444 55555 +666666 7777777 +88888888 999999999 diff --git a/xargs/testsuite/xargs.sysv/space-t.exp b/xargs/testsuite/xargs.sysv/space-t.exp new file mode 100644 index 0000000..1d9c857 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/space-t.exp @@ -0,0 +1 @@ +xargs_start p {-t echo this plus that} space.xi diff --git a/xargs/testsuite/xargs.sysv/space-t.xe b/xargs/testsuite/xargs.sysv/space-t.xe new file mode 100644 index 0000000..ec9c43d --- /dev/null +++ b/xargs/testsuite/xargs.sysv/space-t.xe @@ -0,0 +1 @@ +echo this plus that diff --git a/xargs/testsuite/xargs.sysv/space-t.xo b/xargs/testsuite/xargs.sysv/space-t.xo new file mode 100644 index 0000000..b8e9a02 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/space-t.xo @@ -0,0 +1 @@ +this plus that diff --git a/xargs/testsuite/xargs.sysv/sv-bug-18713.exp b/xargs/testsuite/xargs.sysv/sv-bug-18713.exp new file mode 100644 index 0000000..036d092 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/sv-bug-18713.exp @@ -0,0 +1 @@ +xargs_start p {-n1 printf "@%s@\n"} empty.xi diff --git a/xargs/testsuite/xargs.sysv/sv-bug-18713.xo b/xargs/testsuite/xargs.sysv/sv-bug-18713.xo new file mode 100644 index 0000000..9225e36 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/sv-bug-18713.xo @@ -0,0 +1,7 @@ +@foo@ +@@ +@bar@ +@baz@ +@@ +@@ +@fnord@ diff --git a/xargs/testsuite/xargs.sysv/trace.exp b/xargs/testsuite/xargs.sysv/trace.exp new file mode 100644 index 0000000..c8364ff --- /dev/null +++ b/xargs/testsuite/xargs.sysv/trace.exp @@ -0,0 +1 @@ +xargs_start p {-n2 -t echo } foobar.xi diff --git a/xargs/testsuite/xargs.sysv/trace.xe b/xargs/testsuite/xargs.sysv/trace.xe new file mode 100644 index 0000000..dfbe22e --- /dev/null +++ b/xargs/testsuite/xargs.sysv/trace.xe @@ -0,0 +1,2 @@ +echo foo bar +echo baz ugh diff --git a/xargs/testsuite/xargs.sysv/trace.xo b/xargs/testsuite/xargs.sysv/trace.xo new file mode 100644 index 0000000..171b5a3 --- /dev/null +++ b/xargs/testsuite/xargs.sysv/trace.xo @@ -0,0 +1,2 @@ +foo bar +baz ugh diff --git a/xargs/xargs.1 b/xargs/xargs.1 new file mode 100644 index 0000000..accc223 --- /dev/null +++ b/xargs/xargs.1 @@ -0,0 +1,441 @@ +.TH XARGS 1 \" -*- nroff -*- +.SH NAME +xargs \- build and execute command lines from standard input +.SH SYNOPSIS +.B xargs +.nh +[\fB\-0prtx\fR] +[\fB\-E \fIeof-str\fR] +[\fB\-e\fR[\fIeof-str\fR]] +[\fB\-\-eof\fR[=\fIeof-str\fR]] +[\fB\-\-null\fR] +[\fB\-d \fIdelimiter\fR] +[\fB\-\-delimiter \fIdelimiter\fR] +[\fB\-I \fIreplace-str\fR] +[\fB\-i\fR[\fIreplace-str\fR]] +[\fB\-\-replace\fR[=\fIreplace-str\fR]] +[\fB\-l\fR[\fImax-lines\fR]] +[\fB\-L \fImax-lines\fR] +[\fB\-\-max\-lines\fR[=\fImax-lines\fR]] +[\fB\-n \fImax-args\fR] +[\fB\-\-max\-args\fR=\fImax-args\fR] +[\fB\-s \fImax-chars\fR] +[\fB\-\-max\-chars\fR=\fImax-chars\fR] +[\fB\-P \fImax-procs\fR] +[\fB\-\-max\-procs\fR=\fImax-procs\fR] +[\fB\-\-interactive\fR] +[\fB\-\-verbose\fR] +[\fB\-\-exit\fR] +[\fB\-\-no\-run\-if\-empty\fR] +[\fB\-\-arg\-file\fR=\fIfile\fR] +[\fB\-\-show\-limits\fR] +[\fB\-\-version\fR] +[\fB\-\-help\fR] +[\fIcommand\fR [\fIinitial-arguments\fR]] +.hy +.SH DESCRIPTION +This manual page +documents the GNU version of +.BR xargs . +.B xargs +reads items from the standard input, delimited by blanks (which can be +protected with double or single quotes or a backslash) or newlines, +and executes the +.I command +(default is +.IR /bin/echo ) +one or more times with any +.I initial-arguments +followed by items read from standard input. Blank lines on the +standard input are ignored. +.P +Because Unix filenames can contain blanks and newlines, this default +behaviour is often problematic; filenames containing blanks +and/or newlines are incorrectly processed by +.BR xargs . +In these situations it is better to use the +.B \-0 +option, which +prevents such problems. When using this option you will need to +ensure that the program which produces the input for +.B xargs +also uses a null character as a separator. If that program is +GNU +.B find +for example, the +.B \-print0 +option does this for you. +.P +If any invocation of the command exits with a status of 255, +.B xargs +will stop immediately without reading any further input. An error +message is issued on stderr when this happens. +.SH OPTIONS +.TP +.PD 0 +.BI "\-\-arg\-file=" file +.TP +.PD 0 +.BI "\-a " file +Read items from +.I file +instead of standard input. If you use this option, stdin remains +unchanged when commands are run. Otherwise, stdin is redirected +from +.IR /dev/null . + +.TP +.PD 0 +.B \-\-null +.TP +.PD +.B \-0 +Input items are terminated by a null character instead of by +whitespace, and the quotes and backslash are not special (every +character is taken literally). Disables the end of file string, which +is treated like any other argument. Useful when input items might +contain white space, quote marks, or backslashes. The GNU find +\-print0 option produces input suitable for this mode. + +.TP +.PD 0 +.BI "\-\-delimiter=" delim +.TP +.PD +.BI \-d " delim" +Input items are terminated by the specified character. Quotes and +backslash are not special; every character in the input is taken +literally. Disables the end-of-file string, which is treated like any +other argument. This can be used when the input consists of simply +newline-separated items, although it is almost always better to design +your program to use +.B \-\-null +where this is possible. The specified +delimiter may be a single character, a C-style character escape such +as +.BR \en , +or an octal or hexadecimal escape code. Octal and hexadecimal +escape codes are understood as for the +.B printf +command. Multibyte characters are not supported. + +.TP +.BI \-E " eof-str" +Set the end of file string to \fIeof-str\fR. If the end of file +string occurs as a line of input, the rest of the input is ignored. +If neither +.B \-E +nor +.B \-e +is used, no end of file string is used. +.TP +.PD 0 +.BR "\-\-eof" [\fI=eof-str\fR] +.TP +.PD +.BR \-e [ \fIeof-str\fR] +This option is a synonym for the +.B \-E +option. Use +.B \-E +instead, +because it is POSIX compliant while this option is not. If +\fIeof-str\fR is omitted, there is no end of file string. If neither +.B \-E +nor +.B \-e +is used, no end of file string is used. +.TP +.B "\-\-help" +Print a summary of the options to +.B xargs +and exit. +.TP +.BI \-I " replace-str" +Replace occurrences of \fIreplace-str\fR in the initial-arguments with +names read from standard input. Also, unquoted blanks do not +terminate input items; instead the separator is the newline character. +Implies +.B \-x +and +.B \-L +1. +.TP +.PD 0 +.BR "\-\-replace" [\fI=replace-str\fR] +.TP +.PD +.BR \-i "[\fIreplace-str\fR]" +This option is a synonym for +.BI \-I replace-str +if +.I replace-str +is specified, and for +.BR \-I {} +otherwise. This option is deprecated; use +.B \-I +instead. +.TP +.BI \-L " max-lines" +Use at most \fImax-lines\fR nonblank input lines per command line. +Trailing blanks cause an input line to be logically continued on the +next input line. Implies +.BR \-x . +.TP +.PD 0 +.BR \-\-max-lines "[=\fImax-lines\fR]" +.TP +.PD +.BR \-l "[\fImax-lines\fR]" +Synonym for the +.B \-L +option. Unlike +.BR \-L , +the +.I max-lines +argument is optional. If +.I max-lines +is not specified, it defaults to one. The +.B \-l +option is deprecated since the POSIX standard specifies +.B \-L +instead. +.TP +.PD 0 +.BR "\-\-max\-args" =\fImax-args\fR +.TP +.PD +.BI \-n " max-args" +Use at most \fImax-args\fR arguments per command line. Fewer than +.I max-args +arguments will be used if the size (see the +.B \-s +option) is exceeded, unless the +.B \-x +option is given, in which case +.B xargs will exit. +.TP +.PD 0 +.B \-\-interactive +.TP +.PD +.B \-p +Prompt the user about whether to run each command line and read a line +from the terminal. Only run the command line if the response starts +with `y' or `Y'. Implies +.BR -t . +.TP +.PD 0 +.B \-\-no\-run\-if\-empty +.TP +.PD +.B \-r +If the standard input does not contain any nonblanks, do not run the +command. Normally, the command is run once even if there is no input. +This option is a GNU extension. +.TP +.PD 0 +.BR \-\-max\-chars "=\fImax-chars\fR" +.TP +.PD +.BI \-s " max-chars" +Use at most \fImax-chars\fR characters per command line, including the +command and initial-arguments and the terminating nulls at the ends of +the argument strings. The largest allowed value is system-dependent, +and is calculated as the argument length limit for exec, less the size +of your environment, less 2048 bytes of headroom. If this value is +more than 128KiB, 128Kib is used as the default value; otherwise, the +default value is the maximum. 1KiB is 1024 bytes. +.TP +.PD 0 +.B \-\-verbose +.TP +.PD +.B \-t +Print the command line on the standard error output before executing +it. +.TP +.B "\-\-version" +Print the version number of +.B xargs +and exit. +.TP +.B "\-\-show\\-limits" +Display the limits on the command-line length which are imposed by the +operating system, +.BR xargs ' +choice of buffer size and the +.B \-s +option. Pipe the input from +.I /dev/null +(and perhaps specify +.BR --no-run-if-empty ) +if you don't want +.B xargs +to do anything. +.TP +.PD 0 +.B \-\-exit +.TP +.PD +.B \-x +Exit if the size (see the +.B \-s +option) is exceeded. +.TP +.PD 0 +.BR \-\-max\-procs "=\fImax-procs\fR" +.TP +.PD +.BI \-P " max-procs" +Run up to +.I max-procs +processes at a time; the default is 1. If +.I max-procs +is 0, +.B xargs +will run as many processes as +possible at a time. Use the +.B \-n +option with +.BR \-P ; +otherwise chances are that only one exec will be done. +.SH "EXAMPLES" +.nf +.B find /tmp \-name core \-type f \-print | xargs /bin/rm \-f + +.fi +Find files named +.B core +in or below the directory +.B /tmp +and delete them. Note that this will work incorrectly if there are +any filenames containing newlines or spaces. +.P +.B find /tmp \-name core \-type f \-print0 | xargs \-0 /bin/rm \-f + +.fi +Find files named +.B core +in or below the directory +.B /tmp +and delete them, processing filenames in such a way that file or +directory names containing spaces or newlines are correctly handled. +.P +.nf +.B cut \-d: \-f1 < /etc/passwd | sort | xargs echo + +.fi +Generates a compact listing of all the users on the system. +.SH "EXIT STATUS" +.B xargs +exits with the following status: +.nf +0 if it succeeds +123 if any invocation of the command exited with status 1-125 +124 if the command exited with status 255 +125 if the command is killed by a signal +126 if the command cannot be run +127 if the command is not found +1 if some other error occurred. +.fi +.P +Exit codes greater than 128 are used by the shell to indicate that +a program died due to a fatal signal. +.SH "STANDARDS CONFORMANCE" +As of GNU xargs version 4.2.9, the default behaviour of +.B xargs +is not to have a logical end-of-file marker. POSIX (IEEE Std 1003.1, +2004 Edition) allows this. +.P +The \-l and \-i options appear in the 1997 version of the POSIX +standard, but do not appear in the 2004 version of the standard. +Therefore you should use \-L and \-I instead, respectively. +.P +The POSIX stadard allows implementations to have a limit on the size +of arguments to the +.B exec +functions. This limit could be as low as 4096 bytes including the size of the +environment. For scripts to be portable, they must not rely on a +larger value. However, I know of no implementation whose actual limit +is that small. The +.B \-\-show\-limits +option can be used to discover the actual limits in force on the +current system. + + +.SH "SEE ALSO" +\fBfind\fP(1), \fBlocate\fP(1), \fBlocatedb\fP(5), \fBupdatedb\fP(1), +\fBFinding Files\fP (on-line in Info, or printed) +.SH "BUGS" +The +.B \-L +option is incompatible with the +.B \-I +option, but perhaps should not be. +.P +It is not possible for +.B xargs +to be used securely, since there will always be a time gap between the +production of the list of input files and their use in the commands +that +.B xargs +issues. If other users have access to the system, they can manipulate +the filesystem during this time window to force the action of the +commands +.B xargs +runs to apply to files that you didn't intend. For a more detailed +discussion of this and related problems, please refer to the +``Security Considerations'' chapter in the findutils Texinfo +documentation. The +.B \-execdir +option of +.B find +can often be used as a more secure alternative. + +When you use the +.B \-I +option, each line read from the input is buffered +internally. This means that there is an upper limit on the length +of input line that +.B xargs +will accept when used with the +.B \-I +option. To work around this +limitation, you can use the +.B \-s +option to increase the amount of +buffer space that +.B xargs +uses, and you can also use an extra invocation of +.B xargs +to ensure that very long lines do not occur. +For example: +.P +.B somecommand | xargs \-s 50000 echo | xargs \-I '{}' \-s 100000 rm '{}' +.P +Here, the first invocation of +.B xargs +has no input line length limit +because it doesn't use the +.B \-i +option. The second invocation of +.B xargs +does have such a limit, but we have ensured that the it never encounters +a line which is longer than it can handle. This is not an ideal +solution. Instead, the +.B \-i +option should not impose a line length +limit, which is why this discussion appears in the BUGS section. +The problem doesn't occur with the output of +.BR find (1) +because it emits just one filename per line. +.P +The best way to report a bug is to use the form at +http://savannah.gnu.org/bugs/?group=findutils. +The reason for this is that you will then be able to track progress in +fixing the problem. Other comments about \fBxargs\fP(1) and about +the findutils package in general can be sent to the +.I bug\-findutils +mailing list. To join the list, send email to +.IR bug\-findutils\-request@gnu.org . diff --git a/xargs/xargs.c b/xargs/xargs.c new file mode 100644 index 0000000..1394fa3 --- /dev/null +++ b/xargs/xargs.c @@ -0,0 +1,1318 @@ +/* xargs -- build and execute command lines from standard input + Copyright (C) 1990, 91, 92, 93, 94, 2000, 2003, 2004, 2005, 2006, + 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* Written by Mike Rendell + and David MacKenzie . + Modifications by + James Youngman + Dmitry V. Levin +*/ + +#include + +# ifndef PARAMS +# if defined PROTOTYPES || (defined __STDC__ && __STDC__) +# define PARAMS(Args) Args +# else +# define PARAMS(Args) () +# endif +# endif + +#include + +#if !defined (isascii) || defined (STDC_HEADERS) +#ifdef isascii +#undef isascii +#endif +#define isascii(c) 1 +#endif + +#ifdef isblank +#define ISBLANK(c) (isascii (c) && isblank (c)) +#else +#define ISBLANK(c) ((c) == ' ' || (c) == '\t') +#endif + +#define ISSPACE(c) (ISBLANK (c) || (c) == '\n' || (c) == '\r' \ + || (c) == '\f' || (c) == '\v') + +#include +#include +#include +#include +#include + +#if defined STDC_HEADERS +#include +#endif + +#if defined HAVE_STRING_H || defined STDC_HEADERS +#include +#if !defined STDC_HEADERS +#include +#endif +#else +#include +#define memcpy(dest, source, count) (bcopy((source), (dest), (count))) +#endif + +#ifndef _POSIX_SOURCE +#include +#endif + +#ifdef HAVE_LIMITS_H +#include +#endif + +#ifndef LONG_MAX +#define LONG_MAX (~(1 << (sizeof (long) * 8 - 1))) +#endif + +/* The presence of unistd.h is assumed by gnulib these days, so we + * might as well assume it too. + */ +#include + +#include + +#if !defined(SIGCHLD) && defined(SIGCLD) +#define SIGCHLD SIGCLD +#endif + +#include "verify.h" +#include "wait.h" +#include "quotearg.h" +#include "findutils-version.h" + + +#ifdef STDC_HEADERS +#include +#else +extern int errno; +#endif + +#ifdef HAVE_LOCALE_H +#include +#endif +#if ENABLE_NLS +# include +# define _(Text) gettext (Text) +#else +# define _(Text) Text +#define textdomain(Domain) +#define bindtextdomain(Package, Directory) +#endif +#ifdef gettext_noop +# define N_(String) gettext_noop (String) +#else +/* See locate.c for explanation as to why not use (String) */ +# define N_(String) String +#endif + +#include "buildcmd.h" + + +/* Return nonzero if S is the EOF string. */ +#define EOF_STR(s) (eof_str && *eof_str == *s && !strcmp (eof_str, s)) + +/* Do multibyte processing if multibyte characters are supported, + unless multibyte sequences are search safe. Multibyte sequences + are search safe if searching for a substring using the byte + comparison function 'strstr' gives no false positives. All 8-bit + encodings and the UTF-8 multibyte encoding are search safe, but + the EUC encodings are not. + BeOS uses the UTF-8 encoding exclusively, so it is search safe. */ +#if defined __BEOS__ +# define MULTIBYTE_IS_SEARCH_SAFE 1 +#endif +#define DO_MULTIBYTE (HAVE_MBLEN && ! MULTIBYTE_IS_SEARCH_SAFE) + +#if DO_MULTIBYTE +# if HAVE_MBRLEN +# include +# else + /* Simulate mbrlen with mblen as best we can. */ +# define mbstate_t int +# define mbrlen(s, n, ps) mblen (s, n) +# endif +#endif + +/* Not char because of type promotion; NeXT gcc can't handle it. */ +typedef int boolean; +#define true 1 +#define false 0 + +#if __STDC__ +#define VOID void +#else +#define VOID char +#endif + +#include +#include "closein.h" +#include "gnulib-version.h" + +void error PARAMS ((int status, int errnum, char *message,...)); + +extern char *version_string; + +/* The name this program was run with. */ +char *program_name; + +static FILE *input_stream; + +/* Buffer for reading arguments from input. */ +static char *linebuf; + +static int keep_stdin = 0; + +/* Line number in stdin since the last command was executed. */ +static int lineno = 0; + +static struct buildcmd_state bc_state; +static struct buildcmd_control bc_ctl; + +/* Did we already complain about NUL characters in the input? */ +static int nullwarning_given = 0; + + +/* If nonzero, when this string is read on stdin it is treated as + end of file. + IEEE Std 1003.1, 2004 Edition allows this to be NULL. + In findutils releases up to and including 4.2.8, this was "_". +*/ +static char *eof_str = NULL; + +/* Number of chars in the initial args. */ +/* static int initial_argv_chars = 0; */ + +/* true when building up initial arguments in `cmd_argv'. */ +static boolean initial_args = true; + +/* If nonzero, the maximum number of child processes that can be running + at once. */ +static int proc_max = 1; + +/* Total number of child processes that have been executed. */ +static int procs_executed = 0; + +/* The number of elements in `pids'. */ +static int procs_executing = 0; + +/* List of child processes currently executing. */ +static pid_t *pids = NULL; + +/* The number of allocated elements in `pids'. */ +static int pids_alloc = 0; + +/* Exit status; nonzero if any child process exited with a + status of 1-125. */ +static volatile int child_error = 0; + +static volatile int original_exit_value; + +/* If true, print each command on stderr before executing it. */ +static boolean print_command = false; /* Option -t */ + +/* If true, query the user before executing each command, and only + execute the command if the user responds affirmatively. */ +static boolean query_before_executing = false; + +/* The delimiter for input arguments. This is only consulted if the + * -0 or -d option had been given. + */ +static char input_delimiter = '\0'; + + +static struct option const longopts[] = +{ + {"null", no_argument, NULL, '0'}, + {"arg-file", required_argument, NULL, 'a'}, + {"delimiter", required_argument, NULL, 'd'}, + {"eof", optional_argument, NULL, 'e'}, + {"replace", optional_argument, NULL, 'I'}, + {"max-lines", optional_argument, NULL, 'l'}, + {"max-args", required_argument, NULL, 'n'}, + {"interactive", no_argument, NULL, 'p'}, + {"no-run-if-empty", no_argument, NULL, 'r'}, + {"max-chars", required_argument, NULL, 's'}, + {"verbose", no_argument, NULL, 't'}, + {"show-limits", no_argument, NULL, 'S'}, + {"exit", no_argument, NULL, 'x'}, + {"max-procs", required_argument, NULL, 'P'}, + {"version", no_argument, NULL, 'v'}, + {"help", no_argument, NULL, 'h'}, + {NULL, no_argument, NULL, 0} +}; + +static int read_line PARAMS ((void)); +static int read_string PARAMS ((void)); +static boolean print_args PARAMS ((boolean ask)); +/* static void do_exec PARAMS ((void)); */ +static int xargs_do_exec (const struct buildcmd_control *cl, struct buildcmd_state *state); +static void exec_if_possible PARAMS ((void)); +static void add_proc PARAMS ((pid_t pid)); +static void wait_for_proc PARAMS ((boolean all)); +static void wait_for_proc_all PARAMS ((void)); +static long parse_num PARAMS ((char *str, int option, long min, long max, int fatal)); +static void usage PARAMS ((FILE * stream)); + + + +static char +get_char_oct_or_hex_escape(const char *s) +{ + const char * p; + int base = 8; + unsigned long val; + char *endp; + + assert ('\\' == s[0]); + + if ('x' == s[1]) + { + /* hex */ + p = s+2; + base = 16; + } + else if (isdigit(s[1])) + { + /* octal */ + p = s+1; + base = 8; + } + else + { + p = NULL; /* Silence compiler warning. */ + error(1, 0, + _("Invalid escape sequence %s in input delimiter specification."), + s); + } + errno = 0; + endp = (char*)p; + val = strtoul(p, &endp, base); + + /* This if condition is carefully constructed to do + * the right thing if UCHAR_MAX has the same + * value as ULONG_MAX. IF UCHAR_MAX==ULONG_MAX, + * then val can never be greater than UCHAR_MAX. + */ + if ((ULONG_MAX == val && ERANGE == errno) + || (val > UCHAR_MAX)) + { + if (16 == base) + { + error(1, 0, + _("Invalid escape sequence %s in input delimiter specification; character values must not exceed %lx."), + s, (unsigned long)UCHAR_MAX); + } + else + { + error(1, 0, + _("Invalid escape sequence %s in input delimiter specification; character values must not exceed %lo."), + s, (unsigned long)UCHAR_MAX); + } + } + + /* check for trailing garbage */ + if (0 != *endp) + { + error(1, 0, + _("Invalid escape sequence %s in input delimiter specification; trailing characters %s not recognised."), + s, endp); + } + + return (char) val; +} + + +static char +get_input_delimiter(const char *s) +{ + if (1 == strlen(s)) + { + return s[0]; + } + else + { + if ('\\' == s[0]) + { + /* an escape code */ + switch (s[1]) + { + case 'a': + return '\a'; + case 'b': + return '\b'; + case 'f': + return '\f'; + case 'n': + return '\n'; + case 'r': + return '\r'; + case 't': + return'\t'; + case 'v': + return '\v'; + case '\\': + return '\\'; + default: + return get_char_oct_or_hex_escape(s); + } + } + else + { + error(1, 0, + _("Invalid input delimiter specification %s: the delimiter must be either a single character or an escape sequence starting with \\."), + s); + /*NOTREACHED*/ + return 0; + } + } +} + +static void +noop (void) +{ + /* does nothing. */ +} + +static void +fail_due_to_env_size (void) +{ + error (1, 0, _("environment is too large for exec")); +} + + +int +main (int argc, char **argv) +{ + int optc; + int show_limits = 0; /* --show-limits */ + int always_run_command = 1; + char *input_file = "-"; /* "-" is stdin */ + char *default_cmd = "/bin/echo"; + int (*read_args) PARAMS ((void)) = read_line; + void (*act_on_init_result)(void) = noop; + enum BC_INIT_STATUS bcstatus; + enum { XARGS_POSIX_HEADROOM = 2048u }; + + program_name = argv[0]; + original_exit_value = 0; + +#ifdef HAVE_SETLOCALE + setlocale (LC_ALL, ""); +#endif + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + atexit (close_stdin); + atexit (wait_for_proc_all); + + /* xargs is required by POSIX to allow 2048 bytes of headroom + * for extra environment variables (that perhaps the utliity might + * want to set before execing something else). + */ + bcstatus = bc_init_controlinfo(&bc_ctl, XARGS_POSIX_HEADROOM); + + /* The bc_init_controlinfo call may have determined that the + * environment is too big. In that case, we will fail with + * an error message after processing the command-line options, + * as "xargs --help" should still work even if the environment is + * too big. + * + * Some of the argument processing depends on the contents of + * bc_ctl, which will be in an undefined state if bc_init_controlinfo() + * failed. + */ + if (BC_INIT_ENV_TOO_BIG == bcstatus) + { + act_on_init_result = fail_due_to_env_size; + } + else if (BC_INIT_CANNOT_ACCOMODATE_HEADROOM == bcstatus) + { + /* All POSIX systems are required to support ARG_MAX of at least + * 4096. For everything to work the total of (command line + + * headroom + environment) must fit into this. POSIX requires + * that we use a headroom of 2048 bytes. The user is in control + * of the size of the environment. + * + * In general if bc_init_controlinfo() returns + * BC_INIT_CANNOT_ACCOMODATE_HEADROOM, its caller can try again + * with a smaller headroom. However, in the case of xargs, this + * would not be POSIX-compliant. + */ + act_on_init_result = fail_due_to_env_size; + } + else + { + /* IEEE Std 1003.1, 2003 specifies that the combined argument and + * environment list shall not exceed {ARG_MAX}-2048 bytes. It also + * specifies that it shall be at least LINE_MAX. + */ +#ifdef _SC_ARG_MAX + long val = sysconf(_SC_ARG_MAX); + if (val > 0) + { + /* Note that val can in fact be greater than ARG_MAX + * and bc_ctl.arg_max can also be greater than ARG_MAX. + */ + assert (bc_ctl.arg_max <= (val-XARGS_POSIX_HEADROOM)); + } + else + { +# if defined ARG_MAX + assert (bc_ctl.arg_max <= (ARG_MAX-XARGS_POSIX_HEADROOM)); +# endif + } +#else + /* No _SC_ARG_MAX */ + assert (bc_ctl.arg_max <= (ARG_MAX-XARGS_POSIX_HEADROOM)); +#endif + + +#ifdef LINE_MAX + /* This assertion ensures that this xargs implementation + * conforms to the POSIX requirement that the default command + * line length shall be at least LINE_MAX. + */ + assert (bc_ctl.arg_max >= LINE_MAX); +#endif + + bc_ctl.exec_callback = xargs_do_exec; + + /* Start with a reasonable default size, though this can be + * adjusted via the -s option. + */ + bc_use_sensible_arg_max(&bc_ctl); + } + + while ((optc = getopt_long (argc, argv, "+0a:E:e::i::I:l::L:n:prs:txP:d:", + longopts, (int *) 0)) != -1) + { + switch (optc) + { + case '0': + read_args = read_string; + input_delimiter = '\0'; + break; + + case 'd': + read_args = read_string; + input_delimiter = get_input_delimiter(optarg); + break; + + case 'E': /* POSIX */ + case 'e': /* deprecated */ + if (optarg && (strlen(optarg) > 0)) + eof_str = optarg; + else + eof_str = 0; + break; + + case 'h': + usage (stdout); + return 0; + + case 'I': /* POSIX */ + case 'i': /* deprecated */ + if (optarg) + bc_ctl.replace_pat = optarg; + else + bc_ctl.replace_pat = "{}"; + /* -i excludes -n -l. */ + bc_ctl.args_per_exec = 0; + bc_ctl.lines_per_exec = 0; + break; + + case 'L': /* POSIX */ + bc_ctl.lines_per_exec = parse_num (optarg, 'L', 1L, -1L, 1); + /* -L excludes -i -n. */ + bc_ctl.args_per_exec = 0; + bc_ctl.replace_pat = NULL; + break; + + case 'l': /* deprecated */ + if (optarg) + bc_ctl.lines_per_exec = parse_num (optarg, 'l', 1L, -1L, 1); + else + bc_ctl.lines_per_exec = 1; + /* -l excludes -i -n. */ + bc_ctl.args_per_exec = 0; + bc_ctl.replace_pat = NULL; + break; + + case 'n': + bc_ctl.args_per_exec = parse_num (optarg, 'n', 1L, -1L, 1); + /* -n excludes -i -l. */ + bc_ctl.lines_per_exec = 0; + if (bc_ctl.args_per_exec == 1 && bc_ctl.replace_pat) + /* ignore -n1 in '-i -n1' */ + bc_ctl.args_per_exec = 0; + else + bc_ctl.replace_pat = NULL; + break; + + /* The POSIX standard specifies that it is not an error + * for the -s option to specify a size that the implementation + * cannot support - in that case, the relevant limit is used. + */ + case 's': + { + size_t arg_size; + act_on_init_result(); + arg_size = parse_num (optarg, 's', 1L, + bc_ctl.posix_arg_size_max, 0); + if (arg_size > bc_ctl.posix_arg_size_max) + { + error (0, 0, + _("warning: value %ld for -s option is too large, " + "using %ld instead"), + arg_size, bc_ctl.posix_arg_size_max); + arg_size = bc_ctl.posix_arg_size_max; + } + bc_ctl.arg_max = arg_size; + } + break; + + case 'S': + show_limits = true; + break; + + case 't': + print_command = true; + break; + + case 'x': + bc_ctl.exit_if_size_exceeded = true; + break; + + case 'p': + query_before_executing = true; + print_command = true; + break; + + case 'r': + always_run_command = 0; + break; + + case 'P': + proc_max = parse_num (optarg, 'P', 0L, -1L, 1); + break; + + case 'a': + input_file = optarg; + break; + + case 'v': + display_findutils_version("xargs"); + return 0; + + default: + usage (stderr); + return 1; + } + } + + /* If we had deferred failing due to problems in bc_init_controlinfo(), + * do it now. + * + * We issue this error message after processing command line + * arguments so that it is possible to use "xargs --help" even if + * the environment is too large. + */ + act_on_init_result(); + assert (BC_INIT_OK == bcstatus); + + if (0 == strcmp (input_file, "-")) + { + input_stream = stdin; + } + else + { + keep_stdin = 1; /* see prep_child_for_exec() */ + input_stream = fopen (input_file, "r"); + if (NULL == input_stream) + { + error (1, errno, + _("Cannot open input file %s"), + quotearg_n_style(0, locale_quoting_style, input_file)); + } + } + + if (bc_ctl.replace_pat || bc_ctl.lines_per_exec) + bc_ctl.exit_if_size_exceeded = true; + + if (optind == argc) + { + optind = 0; + argc = 1; + argv = &default_cmd; + } + + /* We want to be able to print size_t values as unsigned long, so if + * the cast isn't value-preserving, we have a problem. This isn't a + * problem in C89, because size_t was known to be no wider than + * unsigned long. In C99 this is no longer the case, but there are + * special C99 ways to print such values. Unfortunately this + * program tries to work on both C89 and C99 systems. + */ +#if defined SIZE_MAX +# if SIZE_MAX > ULONG_MAX +# error "I'm not sure how to print size_t values on your system" +# endif +#else + /* Without SIZE_MAX (i.e. limits.h) this is probably + * close to the best we can do. + */ + verify_true (sizeof(size_t) <= sizeof(unsigned long)); +#endif + + if (show_limits) + { + fprintf(stderr, + _("Your environment variables take up %lu bytes\n"), + (unsigned long)bc_size_of_environment()); + fprintf(stderr, + _("POSIX upper limit on argument length (this system): %lu\n"), + (unsigned long)bc_ctl.posix_arg_size_max); + fprintf(stderr, + _("POSIX smallest allowable upper limit on argument length (all systems): %lu\n"), + (unsigned long)bc_ctl.posix_arg_size_min); + fprintf(stderr, + _("Maximum length of command we could actually use: %ld\n"), + (unsigned long)(bc_ctl.posix_arg_size_max - + bc_size_of_environment())); + fprintf(stderr, + _("Size of command buffer we are actually using: %lu\n"), + (unsigned long)bc_ctl.arg_max); + + if (isatty(STDIN_FILENO)) + { + fprintf(stderr, + _("\n" + "Execution of xargs will continue now, and it will " + "try to read its input and run commands; if this is " + "not what you wanted to happen, please type the " + "end-of-file keystroke.\n")); + if (always_run_command) + { + fprintf(stderr, + _("Warning: %s will be run at least once. " + "If you do not want that to happen, then press " + "the interrupt keystroke.\n"), + argv[optind]); + } + } + } + + linebuf = xmalloc (bc_ctl.arg_max + 1); + bc_state.argbuf = xmalloc (bc_ctl.arg_max + 1); + + /* Make sure to listen for the kids. */ + signal (SIGCHLD, SIG_DFL); + + if (!bc_ctl.replace_pat) + { + for (; optind < argc; optind++) + bc_push_arg (&bc_ctl, &bc_state, + argv[optind], strlen (argv[optind]) + 1, + NULL, 0, + initial_args); + initial_args = false; + bc_ctl.initial_argc = bc_state.cmd_argc; + bc_state.cmd_initial_argv_chars = bc_state.cmd_argv_chars; + + while ((*read_args) () != -1) + if (bc_ctl.lines_per_exec && lineno >= bc_ctl.lines_per_exec) + { + xargs_do_exec (&bc_ctl, &bc_state); + lineno = 0; + } + + /* SYSV xargs seems to do at least one exec, even if the + input is empty. */ + if (bc_state.cmd_argc != bc_ctl.initial_argc + || (always_run_command && procs_executed == 0)) + xargs_do_exec (&bc_ctl, &bc_state); + + } + else + { + int i; + size_t len; + size_t *arglen = xmalloc (sizeof (size_t) * argc); + + for (i = optind; i < argc; i++) + arglen[i] = strlen(argv[i]); + bc_ctl.rplen = strlen (bc_ctl.replace_pat); + while ((len = (*read_args) ()) != -1) + { + /* Don't do insert on the command name. */ + bc_clear_args(&bc_ctl, &bc_state); + bc_state.cmd_argv_chars = 0; /* begin at start of buffer */ + + bc_push_arg (&bc_ctl, &bc_state, + argv[optind], arglen[optind] + 1, + NULL, 0, + initial_args); + len--; + initial_args = false; + + for (i = optind + 1; i < argc; i++) + bc_do_insert (&bc_ctl, &bc_state, + argv[i], arglen[i], + NULL, 0, + linebuf, len, + initial_args); + xargs_do_exec (&bc_ctl, &bc_state); + } + } + + original_exit_value = child_error; + return child_error; +} + + +/* Read a line of arguments from the input and add them to the list of + arguments to pass to the command. Ignore blank lines and initial blanks. + Single and double quotes and backslashes quote metacharacters and blanks + as they do in the shell. + Return -1 if eof (either physical or logical) is reached, + otherwise the length of the last string read (including the null). */ + +static int +read_line (void) +{ +/* States for read_line. */ + enum read_line_state + { + NORM = 0, + SPACE = 1, + QUOTE = 2, + BACKSLASH = 3 + }; + static boolean eof = false; + /* Start out in mode SPACE to always strip leading spaces (even with -i). */ + enum read_line_state state = SPACE; /* The type of character we last read. */ + int prevc; /* The previous value of c. */ + int quotc = 0; /* The last quote character read. */ + int c = EOF; + boolean first = true; /* true if reading first arg on line. */ + boolean seen_arg = false; /* true if we have seen any arg (or part of one) yet */ + int len; + char *p = linebuf; + /* Including the NUL, the args must not grow past this point. */ + char *endbuf = linebuf + bc_ctl.arg_max - bc_state.cmd_initial_argv_chars - 1; + + if (eof) + return -1; + while (1) + { + prevc = c; + c = getc (input_stream); + + if (c == EOF) + { + /* COMPAT: SYSV seems to ignore stuff on a line that + ends without a \n; we don't. */ + eof = true; + if (p == linebuf) + return -1; + *p++ = '\0'; + len = p - linebuf; + if (state == QUOTE) + { + exec_if_possible (); + error (1, 0, _("unmatched %s quote; by default quotes are special to xargs unless you use the -0 option"), + quotc == '"' ? _("double") : _("single")); + } + if (first && EOF_STR (linebuf)) + return -1; + if (!bc_ctl.replace_pat) + bc_push_arg (&bc_ctl, &bc_state, + linebuf, len, + NULL, 0, + initial_args); + return len; + } + switch (state) + { + case SPACE: + if (ISSPACE (c)) + continue; + state = NORM; + /* aaahhhh.... */ + + case NORM: + if (c == '\n') + { + if (!ISBLANK (prevc)) + lineno++; /* For -l. */ + if (p == linebuf) + { + if (seen_arg) + { + /* An empty argument, add it to the list as normal. */ + } + else + { + /* Blank line. */ + state = SPACE; + continue; + } + } + *p++ = '\0'; + len = p - linebuf; + if (EOF_STR (linebuf)) + { + eof = true; + return first ? -1 : len; + } + if (!bc_ctl.replace_pat) + bc_push_arg (&bc_ctl, &bc_state, + linebuf, len, + NULL, 0, + initial_args); + return len; + } + seen_arg = true; + + /* POSIX: In the POSIX locale, the separators are and + * , but not or . + */ + if (!bc_ctl.replace_pat && ISBLANK (c)) + { + *p++ = '\0'; + len = p - linebuf; + if (EOF_STR (linebuf)) + { + eof = true; + return first ? -1 : len; + } + bc_push_arg (&bc_ctl, &bc_state, + linebuf, len, + NULL, 0, + initial_args); + p = linebuf; + state = SPACE; + first = false; + continue; + } + switch (c) + { + case '\\': + state = BACKSLASH; + continue; + + case '\'': + case '"': + state = QUOTE; + quotc = c; + continue; + } + break; + + case QUOTE: + if (c == '\n') + { + exec_if_possible (); + error (1, 0, _("unmatched %s quote; by default quotes are special to xargs unless you use the -0 option"), + quotc == '"' ? _("double") : _("single")); + } + if (c == quotc) + { + state = NORM; + seen_arg = true; /* Makes a difference for e.g. just '' or "" as the first arg on a line */ + continue; + } + break; + + case BACKSLASH: + state = NORM; + break; + } + + if ( (0 == c) && !nullwarning_given ) + { + /* This is just a warning message. We only issue it once. */ + error (0, 0, + _("warning: a NUL character occurred in the input. " + "It cannot be passed through in the argument list. " + "Did you mean to use the --null option?")); + nullwarning_given = 1; + } + +#if 1 + if (p >= endbuf) + { + exec_if_possible (); + error (1, 0, _("argument line too long")); + } + *p++ = c; +#else + append_char_to_buf(&linebuf, &endbuf, &p, c); +#endif + } +} + +/* Read a null-terminated string from the input and add it to the list of + arguments to pass to the command. + Return -1 if eof (either physical or logical) is reached, + otherwise the length of the string read (including the null). */ + +static int +read_string (void) +{ + static boolean eof = false; + int len; + char *p = linebuf; + /* Including the NUL, the args must not grow past this point. */ + char *endbuf = linebuf + bc_ctl.arg_max - bc_state.cmd_initial_argv_chars - 1; + + if (eof) + return -1; + while (1) + { + int c = getc (input_stream); + if (c == EOF) + { + eof = true; + if (p == linebuf) + return -1; + *p++ = '\0'; + len = p - linebuf; + if (!bc_ctl.replace_pat) + bc_push_arg (&bc_ctl, &bc_state, + linebuf, len, + NULL, 0, + initial_args); + return len; + } + if (c == input_delimiter) + { + lineno++; /* For -l. */ + *p++ = '\0'; + len = p - linebuf; + if (!bc_ctl.replace_pat) + bc_push_arg (&bc_ctl, &bc_state, + linebuf, len, + NULL, 0, + initial_args); + return len; + } + if (p >= endbuf) + { + exec_if_possible (); + error (1, 0, _("argument line too long")); + } + *p++ = c; + } +} + +/* Print the arguments of the command to execute. + If ASK is nonzero, prompt the user for a response, and + if the user responds affirmatively, return true; + otherwise, return false. */ + +static boolean +print_args (boolean ask) +{ + int i; + + for (i = 0; i < bc_state.cmd_argc - 1; i++) + fprintf (stderr, "%s ", bc_state.cmd_argv[i]); + if (ask) + { + static FILE *tty_stream; + int c, savec; + + if (!tty_stream) + { + tty_stream = fopen ("/dev/tty", "r"); + if (!tty_stream) + error (1, errno, "/dev/tty"); + } + fputs ("?...", stderr); + fflush (stderr); + c = savec = getc (tty_stream); + while (c != EOF && c != '\n') + c = getc (tty_stream); + if (savec == 'y' || savec == 'Y') + return true; + } + else + putc ('\n', stderr); + + return false; +} + + +/* Close stdin and attach /dev/null to it. + * This resolves Savannah bug #3992. + */ +static void +prep_child_for_exec (void) +{ + if (!keep_stdin) + { + const char inputfile[] = "/dev/null"; + /* fprintf(stderr, "attaching stdin to /dev/null\n"); */ + + close(0); + if (open(inputfile, O_RDONLY) < 0) + { + /* This is not entirely fatal, since + * executing the child with a closed + * stdin is almost as good as executing it + * with its stdin attached to /dev/null. + */ + error (0, errno, "%s", quotearg_n_style(0, locale_quoting_style, inputfile)); + } + } +} + + +/* Execute the command that has been built in `cmd_argv'. This may involve + waiting for processes that were previously executed. */ + +static int +xargs_do_exec (const struct buildcmd_control *ctl, struct buildcmd_state *state) +{ + pid_t child; + + (void) ctl; + (void) state; + + bc_push_arg (&bc_ctl, &bc_state, + (char *) NULL, 0, + NULL, 0, + false); /* Null terminate the arg list. */ + + if (!query_before_executing || print_args (true)) + { + if (proc_max && procs_executing >= proc_max) + wait_for_proc (false); + if (!query_before_executing && print_command) + print_args (false); + /* If we run out of processes, wait for a child to return and + try again. */ + while ((child = fork ()) < 0 && errno == EAGAIN && procs_executing) + wait_for_proc (false); + switch (child) + { + case -1: + error (1, errno, _("cannot fork")); + + case 0: /* Child. */ + prep_child_for_exec(); + execvp (bc_state.cmd_argv[0], bc_state.cmd_argv); + error (0, errno, "%s", bc_state.cmd_argv[0]); + _exit (errno == ENOENT ? 127 : 126); + /*NOTREACHED*/ + } + add_proc (child); + } + + bc_clear_args(&bc_ctl, &bc_state); + return 1; /* Success */ +} + +/* Execute the command if possible. */ + +static void +exec_if_possible (void) +{ + if (bc_ctl.replace_pat || initial_args || + bc_state.cmd_argc == bc_ctl.initial_argc || bc_ctl.exit_if_size_exceeded) + return; + xargs_do_exec (&bc_ctl, &bc_state); +} + +/* Add the process with id PID to the list of processes that have + been executed. */ + +static void +add_proc (pid_t pid) +{ + int i; + + /* Find an empty slot. */ + for (i = 0; i < pids_alloc && pids[i]; i++) + ; + if (i == pids_alloc) + { + if (pids_alloc == 0) + { + pids_alloc = proc_max ? proc_max : 64; + pids = xmalloc (sizeof (pid_t) * pids_alloc); + } + else + { + pids_alloc *= 2; + pids = xrealloc (pids, + sizeof (pid_t) * pids_alloc); + } + memset (&pids[i], '\0', sizeof (pid_t) * (pids_alloc - i)); + } + pids[i] = pid; + procs_executing++; + procs_executed++; +} + +/* If ALL is true, wait for all child processes to finish; + otherwise, wait for one child process to finish. + Remove the processes that finish from the list of executing processes. */ + +static void +wait_for_proc (boolean all) +{ + while (procs_executing) + { + int i, status; + + do + { + pid_t pid; + + while ((pid = wait (&status)) == (pid_t) -1) + if (errno != EINTR) + error (1, errno, _("error waiting for child process")); + + /* Find the entry in `pids' for the child process + that exited. */ + for (i = 0; i < pids_alloc && pid != pids[i]; i++) + ; + } + while (i == pids_alloc); /* A child died that we didn't start? */ + + /* Remove the child from the list. */ + pids[i] = 0; + procs_executing--; + + if (WEXITSTATUS (status) == 126 || WEXITSTATUS (status) == 127) + exit (WEXITSTATUS (status)); /* Can't find or run the command. */ + if (WEXITSTATUS (status) == 255) + error (124, 0, _("%s: exited with status 255; aborting"), bc_state.cmd_argv[0]); + if (WIFSTOPPED (status)) + error (125, 0, _("%s: stopped by signal %d"), bc_state.cmd_argv[0], WSTOPSIG (status)); + if (WIFSIGNALED (status)) + error (125, 0, _("%s: terminated by signal %d"), bc_state.cmd_argv[0], WTERMSIG (status)); + if (WEXITSTATUS (status) != 0) + child_error = 123; + + if (!all) + break; + } +} + +/* Wait for all child processes to finish. */ + +static void +wait_for_proc_all (void) +{ + static boolean waiting = false; + + if (waiting) + return; + + waiting = true; + wait_for_proc (true); + waiting = false; + + if (original_exit_value != child_error) + { + /* wait_for_proc() changed the value of child_error(). This + * function is registered via atexit(), and so may have been + * called from exit(). We now know that the original value + * passed to exit() is no longer the exit status we require. + * The POSIX standard states that the behaviour if exit() is + * called more than once is undefined. Therefore we now have to + * exit with _exit() instead of exit(). + */ + _exit(child_error); + } + +} + +/* Return the value of the number represented in STR. + OPTION is the command line option to which STR is the argument. + If the value does not fall within the boundaries MIN and MAX, + Print an error message mentioning OPTION. If FATAL is true, + we also exit. */ + +static long +parse_num (char *str, int option, long int min, long int max, int fatal) +{ + char *eptr; + long val; + + val = strtol (str, &eptr, 10); + if (eptr == str || *eptr) + { + fprintf (stderr, _("%s: invalid number for -%c option\n"), + program_name, option); + usage (stderr); + exit(1); + } + else if (val < min) + { + fprintf (stderr, _("%s: value for -%c option should be >= %ld\n"), + program_name, option, min); + if (fatal) + { + usage (stderr); + exit(1); + } + else + { + val = min; + } + } + else if (max >= 0 && val > max) + { + fprintf (stderr, _("%s: value for -%c option should be < %ld\n"), + program_name, option, max); + if (fatal) + { + usage (stderr); + exit(1); + } + else + { + val = max; + } + } + return val; +} + +static void +usage (FILE *stream) +{ + fprintf (stream, _("\ +Usage: %s [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]\n\ + [-E eof-str] [-e[eof-str]] [--eof[=eof-str]]\n\ + [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]\n\ + [-I replace-str] [-i[replace-str]] [--replace[=replace-str]]\n\ + [-n max-args] [--max-args=max-args]\n\ + [-s max-chars] [--max-chars=max-chars]\n\ + [-P max-procs] [--max-procs=max-procs] [--show-limits]\n\ + [--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]\n\ + [--version] [--help] [command [initial-arguments]]\n"), + program_name); + fputs (_("\nReport bugs to .\n"), stream); +} -- 2.11.4.GIT