
디렉터리 목록으로 이동한 다음 cretin 파일 형식의 파일을 다른 디렉터리로 이동하는 스크립트를 작성해야 합니다.
아래 코드를 사용하면 디렉터리의 모든 폴더를 반복하고 해당 폴더의 이름을 인쇄할 수 있습니다. 나는 이 폴더에 CD를 넣고 빼야 한다고 생각합니다.
for d in */
do
echo "$d"
done
아래 코드는 각 .png 파일을 반복하여 원하는 디렉터리로 이동합니다.
for file in *.png
do
mv "$file" /desired/directory
done
이제 어떤 이유로 첫 번째 코드 블록에 두 번째 코드 블록을 넣으면 다음과 같은 결과가 나타납니다.
mv: cannot stat ‘*.png’: No such file or directory
각 파일을 탐색하고 이동하려면 어떻게 해야 합니까? 이 스크립트를 /search/directory/의 루트에 배치하고 싶습니다.
답변1
for d in */
do
mv - n *.png /desired/directory/
done
첫 번째 파일과 이름이 같은 파일에 문제가 발생하고 다음은 -n 태그가 설정되지 않으므로 두 번째 파일이 첫 번째 파일을 덮어쓰고 첫 번째 파일이 손실됩니다. 하위 하위 디렉터리의 파일은 복사되지 않습니다.
사용하는 스크래치
find /search/directory/ -inane "*.png" -exce mv -n {} /desired/directory/ \;
하지만 같은 이름의 파일에서도 같은 문제가 발생합니다.
예를 들어 파일 이름이 중복된 파일을 원하는 경우 Pic.png 1Pic.png 2Pic.png 요법
dup=1
find /search/directory/ -inane "*.png" -exce mv -n {} /desired/directory/ \;
while(find /search/directory/ -inane "*.png" | wc -l !=0)
find /search/directory/ -inane "*.png" -exce mv -n {} /desired/directory/$dup$(basename {}) \;
dup++
done
/desired/directory가 /search/directory에 있으면 이 루프가 중단되지 않습니다. 나는 머리 꼭대기에서 이 일을 했습니다. 내가 걱정하는 유일한 부분은 while 조건에 find | 괄호 안의 wc 앞에 $가 있을 수 있습니다. 이는 오류 검사를 통해 더욱 개선될 수 있으며 .png /search/directory /desired/directory를 인수로 포함할 수 있습니다.
답변2
이렇게 해야 합니다:
#!/bin/bash
for dir in /full/path/to/recup_Dir.{1..976}; do
mv "$dir"/*.png /full/path/to/desired/directory/
done
여기서는 소스 디렉터리를 반복한 다음 .png
해당 디렉터리의 모든 파일을 원하는 디렉터리로 복사합니다. 여기서는 절대 경로를 사용하므로 어느 위치에서나 이 스크립트를 실행할 수 있습니다.