Найдите папки, содержащие файл

Для преобразования каждой страницы справочника в PDF, я сделал man -k . > temp. Я создал временный файл и названный сценарий file.sh:

#! /bin/bash
if [ $# -eq 1 ] ; then
    to_pdf=$(which ps2pdf)
    if [ -z "$to_pdf" ] ; then
    to_pdf=$(which pstopdf)
    fi
    name="$1"
    case "$to_pdf"  in
        *pstopdf) man -t "$name" | "$to_pdf" -i -o "$fname.pdf" ;;
        *ps2pdf)  man -t "$name" | "$to_pdf" - "$name.pdf" ;;
        *)        man -t "$name" > "$fname.ps"
    esac
    exit $?
fi
echo "Wrong number of parameters"
exit 1

Я записал файл Python pythonfile.py

import os
f=open("temp","r")
for i in f:
    c="bash file.sh "+str(i)
    os.system(c)`

Затем я сделал

python pythonfile.py 

Это создаст PDF для каждой страницы справочника отдельно в Вашем рабочем каталоге.

2
12.01.2013, 03:32
5 ответов

Просто найдите свой файл и возвратите dirname:

find -name 'level.dat' -exec dirname {} \;
7
27.01.2020, 21:50

Или, найдите свои файлы и извлеките имена каталогов оптом:

find starting_directory –name level.dat –print | sed 's@/level.dat$@@'

2
27.01.2020, 21:50
    find ~ -type f -name "level.dat" -printf '%h\n'

если может быть более затем один файл с этим именем, то передайте по каналу к uniq

1
27.01.2020, 21:50

Или реализуйте свою находку сами ;)

myfind(){ shopt -s nullglob; [[ -f $1 ]] && pwd; for i in */ ; do ( cd $i;myfind $1 ) done }
myfind level.dat
1
27.01.2020, 21:50

Можно использовать find распечатать только файлы, которые проходят определенный тест. Мне нравится этот подход:

find . -type d -execdir test -f {}/level.dat \; -print

Это находит все каталоги, который содержит названный файл level.dat.

0
27.01.2020, 21:50

Теги

Похожие вопросы