![Список файлов в определенных подкаталогах](https://rvso.com/image/1558685/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%20%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%20%D0%B2%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B0%D1%85.png)
У меня такая структура папок:
/1/a/x
/1/b/y
/2/a/z
/2/b/d
/3/a/r
/3/b/e
Я хочу вывести список файлов + размер файлов для всех файлов в подпапках в папках 'a'. Я пробовал использовать find, но застрял. Какая команда будет правильной?
решение1
Чтобы распечатать размер и полный путь, попробуйте это.
find /[123]/a/* -type f -printf '%s %p\n'
Видетьman find
для других строк формата, которые вы могли бы использовать с -printf
. В частности, вы можете захотеть %P
или %f
вместо %p
и, возможно, %b
вместо %s
.
[123]
соответствует имени, которое представляет собой одну цифру в диапазоне от 1 до 3; возможно, расширьте его до *
или сделайте что-то более ограниченное, если ваш пример не совсем соответствует реальности, которую вы пытаетесь описать.
GNU find
должен быть стандартным в CentOS, но если вам нужен должным образом переносимый код, возможно, используйте find ... -exec stat {} \;
(но учтите, что stat
у него тоже есть проблемы с переносимостью; команда должна существовать на большинстве платформ, но как именно заставить ее напечатать что-то конкретное, зависит от реализации). Другой вариант — find ... -ls
но тогда вы столкнетесь сразбор ls
.
Если вам не нужно просматривать подкаталоги, вам не нужен find
.
stat -c '%s %n\n' /[123]/a/*/*