정렬되지 않은 폴더의 다양한 파일 형식을 새로 생성된 디렉터리로 정렬하고 처리하는 대화형 스크립트가 있습니다.
필요한 경우 실행된 스크립트와 해당 정렬 프로세스를 다시 폴더(미리 정렬된) 상태로 확장/실행 취소할 수 있도록 작은 스크립트를 작성하거나 기존 스크립트를 수정하는 방법을 알고 싶습니다.
이를 달성하는 가장 효율적인 방법은 무엇입니까?
#!/bin/bash
read -p "Good Morning, Please enter your file type name for sorting [ENTER]:" all_extensions
if cd /Users/christopherdorman/desktop
then while read extension
do destination="folder$extension"
mkdir -p "$destination"
mv -v unsorted/*."$extension" "$destination"
done <<< "${all_extensions// /$'\n'}"
mkdir -p foldermisc
if mv -v unsorted/* "foldermisc"
then echo "Good News, the rest of Your files have been successfully processed"
fi
for i in folder*/; do
ls -S "$i" > "${i}filelist"
cat "${i}filelist" >> ~/desktop/summary.txt
done
fi
답변1
다음은 (성공한) 명령 후에 호출할 수 있는 함수로 mv
, 와 동일한 인수를 제공하며 mv
, 함수는 파일을 원래 위치로 되돌려 놓아야 하는 해당 명령을 에코합니다. 또한 이러한 명령을 대체 파일로 리디렉션할 수도 있습니다. 또한 안전 예방 조치로 주석 처리됩니다.
function mvbackout {
declare -a files
for f
do
files+=("$f")
done
# remove the last parameter (the destination)
unset files[$(( $# - 1 ))]
dest=$f
printf "# cd -- %s\n" "$PWD"
for f in "${files[@]}"
do
printf "# mv -- '%s' '%s'\n" "${dest}/$(basename "$f")" "$f"
done
}
이 함수는 데이터 손실 상황(초기 mv 명령으로 인해 실수로 파일이 손상되었거나 나중에 파일이 이동 또는 삭제됨)에서 복구할 수 없지만 기본적으로는 작동해야 합니다.
중요한 경고
셸 명령을 다시 셸로 다시 인용하는 것은 까다롭기 때문에 파일 이름을 작은따옴표로 묶었습니다. 이는 결과 명령을 복사/붙여넣기가 작동하지 않음을 의미합니다.만약에이 명령의 모든 파일 이름에는 작은따옴표가 포함되어 있습니다.
실행 예시는 다음과 같습니다.
$ mkdir dest
$ touch a b
$ mkdir -p subdir1/subdir2/subdir3 mkdir fun\'d\'ir fun\'d\'ir/fun\"d\"ir
$ touch subdir1/c subdir1/subdir2/d subdir1/subdir2/subdir3/e
$ mv a b subdir1/c subdir1/subdir2/d subdir1/subdir2/subdir3/e dest
$ mvbackout a b subdir1/c subdir1/subdir2/d subdir1/subdir2/subdir3/e dest
# cd -- /home/schaller/tmp/dir
# mv -- 'dest/a' 'a'
# mv -- 'dest/b' 'b'
# mv -- 'dest/c' 'subdir1/c'
# mv -- 'dest/d' 'subdir1/subdir2/d'
# mv -- 'dest/e' 'subdir1/subdir2/subdir3/e'
스크립트의 경우 mv
다음과 같이 각각 뒤에 다른 줄을 추가할 수 있습니다.
...
mv -v unsorted/*."$extension" "$destination"
mvbackout unsorted/*."$extension" "$destination"
...
if mv -v unsorted/* "foldermisc"
then
mvbackout unsorted/* "foldermisc"
echo "Good News, the rest of Your files have been successfully processed"
fi