하위 폴더 트리에 스크립트 적용

하위 폴더 트리에 스크립트 적용

하위 폴더 트리에 다음 스크립트를 적용해야 하지만 트리의 각 하위 폴더에서 실행되도록 이 스크립트를 어떻게 호출해야 하는지 잘 모르겠습니다. 한 번만 하면 돼요. 미리 감사드립니다.

#!/bin/bash
for file in *.*
do
    [[ -d "$file" || $file =~ _[[:digit:]]{3}\. ]] && continue
    echo -n "Considering $file: " >&2

    extn="${file/*.}"
    versions=()
    keep="$file"

    # Look at matching files
    for version in "${file%.$extn}"_???."$extn"
    do
        [[ -f "$version" ]] || continue

        # Save every one. Identify the current last
        versions+=($version)
        keep="$version"
        echo -n "$version " >&2
    done
    echo "==> keep $keep" >&2

    # Delete them all except the last
    for version in "${versions[@]}"
    do
        [[ "$version" != "$keep" ]] && echo rm -f "$version"
    done
    [[ "$keep" != "$file" ]] && echo mv "$keep" "$file"
done

답변1

myrename이름이 이고 디렉토리에 있다고 가정하고 위의 스크립트에 이름을 지정합니다 $HOME. 그런 다음 find에서 execdir을 사용하여 트리를 탐색합니다.

find /root/of/tree -depth -type d -execdir "$HOME/myrename" \{\} \;

myrename을 다음과 같이 사용해 보세요.

#!/bin/bash

echo "directory $1"

답변2

스크립트가 작동할 디렉터리에서 시작되어야 하는 경우 cd먼저 해당 디렉터리로 이동해야 합니다. 이 같은:

find -type d -exec sh -c 'cd -- "$1"; exec /path/to/script.sh' sh {} \;

(물론 스크립트 경로를 변경하십시오.)

또는 스크립트를 수정하여 디렉터리 이름을 매개변수로 사용할 수 있습니다. 이는 cd스크립트 시작 부분에 를 추가하는 것만큼 간단합니다.

#!/bin/bash
if [ "$1" ]; then
    cd -- "$1" || exit 1
fi
for file in *.*
...

먼저 기본 동작이 현재 디렉터리에서 계속 작동하도록 비어 있는지 테스트합니다 $1(그리고 인수 없이 실수로 호출되지 않습니다 cd. 사용자의 로 이동합니다 $HOME).

find -exec그런 다음 디렉토리 이름을 스크립트에 대한 인수로 제공하는 간단한 명령을 실행하십시오 .

find -type d -exec /path/to/script.sh {} \;

답변3

다음 방법을 사용하여 테스트했는데 훌륭하게 작동합니다.

find path  -depth -type d -exec sh /tmp/l.sh {} \;

/tmp/l.sh==> Its the script path

관련 정보