이 글의 제목을 처음 보면 뭔가 기술적으로 잘못된 것 같다고 느낄 수 있습니다. 어쨌든 Linux는 Windows 운영체제의 일부가 아니잖아요? 두 운영체제는 완전히 다른 시스템입니다. 과거에는 Windows에서 Linux 스크립팅을 사용하려면 Cygwin 같은 도구를 설치하거나, 듀얼 부트 Linux 시스템을 구성하거나, Samba를 설치하는 방법밖에 없었습니다.
하지만 Windows 10에서는 상황이 완전히 달라졌습니다! 이제 Microsoft Store에서 여러 Linux 배포판을 손쉽게 설치할 수 있습니다. Appuals의 이전 Kali Linux 관련 글에서도 Windows 10 환경에서 특정 Linux 배포판을 설치하는 방법 중 하나를 소개한 바 있습니다.
Windows 머신에서 Linux 스크립트를 사용하는 장점 중 하나는 강력한 Linux 스크립팅 언어로 작업을 자동화할 수 있다는 점입니다. 특히 PowerShell이나 DOS 배치 파일보다 Linux 스크립팅에 더 익숙한 사용자라면 그 효과가 큽니다. 이 글에서는 일반적인 Windows 바탕화면을 깔끔하게 정리해 주는 Linux "bash" 스크립트 작성 방법을 설명합니다. Linux가 처음인 분이라면 이 글을 통해 기본기를 익히면서 실용적인 유틸리티까지 만들 수 있습니다.
여기서는 기본 Ubuntu Linux 터미널(Windows 10용 Microsoft Store에서 제공)을 사용합니다. 이 터미널에서는 bash, ssh, git, apt 등 다양한 Linux 명령어를 사용할 수 있습니다. 아직 설치하지 않았다면 먼저 설치해야 하며, 설치 방법은 여기에서 확인할 수 있습니다.
Linux 명령줄 시작하기
Ubuntu를 설치하고 실행하면 아래와 비슷한 명령줄 창이 열립니다. 이것이 bash Linux 명령줄입니다:

이제 스크립트를 작성해 보겠습니다. 파일은 어떤 편집기로든 수정할 수 있습니다. Windows의 메모장(notepad)을 사용해도 되고, vi 같은 Linux 편집기에 익숙하다면 그것을 사용해도 좋습니다.
Ubuntu 터미널을 열면 현재 위치는 Ubuntu 워크스페이스의 홈 디렉터리입니다. 명령 프롬프트에서 다음 명령을 입력하면 확인할 수 있습니다:
echo $HOME
그러면 아래 스크린샷처럼 홈 디렉터리가 출력됩니다. 참고로 Linux 경로는 디렉터리 구분자로 슬래시("/")를 사용한다는 점을 기억하세요.

편의상 스크립트는 홈 디렉터리에 저장하겠습니다.
다음 단계는 바탕화면(Desktop) 폴더가 Linux 경로로 어디에 있는지 확인하는 것입니다. 올바른 디렉터리에서 파일 작업을 수행하려면 이 경로가 필요합니다.
터미널에 "cd /"를 입력하면 Ubuntu 환경의 루트 영역으로 이동합니다.
그다음 "ls"를 입력합니다.
이 명령은 Linux의 모든 최상위 디렉터리를 나열합니다. 터미널에서 대략 다음과 같은 화면을 볼 수 있습니다:

이제 사용자의 바탕화면 위치를 찾아야 합니다. C 드라이브에 있다고 가정하면 "mnt" 디렉터리로 이동합니다. Windows 드라이브들은 이곳에 마운트되어 다음과 같이 표시됩니다:

그다음 바탕화면이 어느 디렉터리에 있는지 알아야 합니다. 보통 Windows 파일 탐색기의 "빠른 액세스" 목록에서 바탕화면 아이콘을 마우스 오른쪽 버튼으로 클릭하면 경로를 확인할 수 있습니다:

확인한 경로를 터미널에서 cd 명령으로 이동하면 됩니다. 예를 들어 이 경우에는 다음과 같습니다. Windows 경로의 백슬래시(\)는 Linux에서 슬래시(/)로 바꿔야 한다는 점에 유의하세요.
cd /mnt/c/Users/gofor/OneDrive/Desktop
이제 "ls" 명령으로 바탕화면의 모든 파일을 나열할 수 있습니다:
제 바탕화면처럼 복잡하다면 아래와 같이 긴 파일 목록이 출력될 것입니다:

실제로 Windows에서 제 바탕화면이 얼마나 지저분한지 아래에서 확인할 수 있습니다:

다른 모니터 2대에도 아이콘이 더 있었기 때문에, 이 파일들을 분류하고 정리할 필요가 있었습니다! 앞으로 만들 스크립트는 각 파일 유형을 판별해서 바탕화면에 이름 붙은 폴더로 자동 이동시켜 줍니다.
예를 들어 바로 가기 파일(*.lnk)은 "SHORTCUTS" 폴더로 이동합니다.
마찬가지로 .jpg, .png, .bmp, .svg 같은 이미지 파일은 "IMAGES" 폴더로 이동합니다.
워드 문서(.docx), PDF(.pdf), 엑셀(.xls) 같은 문서 및 오피스 문서는 "OFFICEDOCS" 폴더에 넣습니다.
이렇게 스크립트를 실행하면 모든 문서가 파일 카테고리별로 생성된 해당 디렉터리 안에 체계적으로 정리됩니다. 바탕화면이 깔끔해지고 파일 관리도 쉬워집니다. 폴더 종류와 파일 기준은 원하는 만큼 자유롭게 정의할 수 있습니다. 반드시 파일 유형별로만 정리할 필요는 없으며, "HRFILES", "PROJECTFILES" 같은 업무 카테고리 폴더를 만들어 분류할 수도 있습니다. 이 예제에서는 파일 유형별로 정리해 보겠습니다.
카테고리 및 파일 목록 만들기
이 유틸리티를 사용하려면 두 개의 파일이 필요합니다:
A) 카테고리 이름과 해당 카테고리에 넣을 파일 확장자를 담은 쉼표로 구분된 CSV 파일. 각 카테고리 이름은 바탕화면에 생성될 디렉터리 이름이 됩니다. CSV 파일은 선호하는 어떤 편집기로든 만들 수 있으며, 이 예제에서는 메모장을 사용합니다.
B) 카테고리 파일을 읽어 정리 작업을 수행하는 Linux 스크립트.
터미널에서 현재 디렉터리에 파일을 생성하려면 다음을 입력합니다:
notepad cleanup.csv
파일이 아직 존재하지 않으므로 새 파일을 만들겠냐는 메시지가 뜹니다. "예(Yes)"를 누르면 됩니다.
이제 "카테고리,파일형식1,파일형식2,파일형식3,..." 형식으로 카테고리당 한 줄씩 다음 내용을 입력합니다:
SHORTCUTS,lnk
IMAGES,jpg,png,svg
DOCUMENTS,txt,docx,doc,pdf
첫 번째 필드는 바탕화면에 생성될 디렉터리 이름이며, 나머지 필드는 해당 폴더로 이동할 파일 확장자입니다.
따라서 SHORTCUTS 폴더에는 모든 *.lnk 파일이 이동하고, IMAGES 폴더에는 *.jpg, *.png, *.svg 파일이 이동합니다. 마지막으로 *.txt, *.docx, *.doc, *.pdf 파일은 DOCUMENTS 폴더로 이동합니다. 이런 식으로 파일을 올바른 디렉터리로 분류하는 것입니다.
CSV 파일을 만들었으면 이제 스크립트를 작성할 차례입니다. 스크립트 이름은 cleanup.sh로 하겠습니다. 참고로 이 스크립트는 최소한의 검증만 수행하므로, CSV 파일 형식이 올바른지 반드시 확인해야 합니다. 그렇지 않으면 동작하지 않습니다! 스크립트에서 하는 검증은 파일과 폴더의 존재 여부 확인 정도입니다.
vi 같은 Unix 계열 편집기에 익숙하다면 터미널에서 바로 편집할 수 있고, 아니면 간단히 메모장을 사용해도 됩니다:
notepad cleanup.sh
스크립트의 역할은 읽어 들일 CSV 파일 이름과 정리할 바탕화면 위치를 설정하는 것입니다. 변수에 CSV 파일명과 바탕화면 경로를 지정합니다. 제 경우는 다음과 같습니다. 여러분은 바탕화면 경로를 자신의 환경에 맞게 교체해야 합니다. 참고로 "<"와 ">" 사이의 내용은 여러분의 정보를 입력해야 하는 자리표시자(placeholder)입니다.
따라서 스크립트의 첫 두 줄은 다음과 같습니다:
DESKTOP=/mnt/c/Users/<your windows location>/Desktop
CSV=cleanup.csv
전체 스크립트는 아래에서 확인할 수 있습니다. 명령어의 의미를 이해하려면 주석을 읽어보고, 잘 모르는 명령이 있다면 Linux 명령줄에서 "man <command name>"을 입력해 해당 명령의 동작 방식을 자세히 살펴보세요.
정리 스크립트 실행 권한 부여 및 실행
홈 디렉터리의 명령줄에서 스크립트를 실행하려면 먼저 다음 명령으로 실행 권한을 부여해야 합니다:
chmod +x cleanup.sh
스크립트는 현재 디렉터리에 있으므로 다음과 같이 입력하여 실행합니다:
./cleanup.sh
아래는 스크립트 실행 전후의 제 바탕화면 모습입니다. 이동된 파일을 담는 폴더들이 생성되었고, 바탕화면이 한결 깔끔해진 것을 확인할 수 있습니다:
Before:
After: 
그리고 바탕화면에서 모든 바로 가기가 이동된 SHORTCUTS 디렉터리의 모습입니다.

Windows용 전체 바탕화면 정리 Linux 스크립트
스크립트에서 "#"으로 시작하는 주석을 참고하세요. 주석에는 스크립트의 동작 방식이 설명되어 있습니다. # 로컬 바탕화면 또는 정리하고 싶은 임의의 디렉터리 위치와 CSV 파일 이름을 변수로 설정합니다.
DESKTOP=/mnt/c/Users/gofor/OneDrive/Desktop
CSV=cleanup.csv
# Linux "test" 명령과 파일 존재 여부를 확인하는 "-f" 플래그를 사용해 cleanup.csv 파일이 존재하는지 검사합니다.
# 파일이 없으면 오류 메시지를 출력하고 스크립트를 종료합니다.
if [ ! -f ${CSV} ]then
echo The cleanup.csv file does not exist.
exit -1
fi# CSV 파일이 DOS 형식으로 저장된 경우 캐리지 리턴 문자를 제거해 Unix 형식으로 변환합니다.
# 결과를 임시 파일에 저장한 후, 임시 파일을 원래 이름으로 변경합니다.
tr -d '\r' < $CSV > temp.csv
mv temp.csv $CSV
# 이제 CSV 파일을 한 줄씩 읽으면서 첫 번째 인수(카테고리/디렉터리 이름)를 저장합니다.
# 나머지 인수들은 해당 디렉터리로 이동할 파일 확장자들입니다.
while read csvline
do
count=1
for filetype in `echo "$csvline" | tr , '\n'`
do
if [ $count -eq 1 ] then
# 첫 번째 인수이므로 폴더가 이미 존재하는지 확인하고, 없으면 생성합니다.
if [ ! -d ${DESKTOP}/$filetype ] then
# 디렉터리가 없으므로 새로 생성합니다.
mkdir ${DESKTOP}/$filetype
fi
CATEGORY=${filetype}
else
# 스크립트가 무엇을 하는지 친절한 메시지를 출력합니다.
echo "moving *.${filetype} to ${CATEGORY}"
# 파일이 없을 경우를 대비해 이동 시 오류 메시지를 표시하지 않습니다(즉, >/dev/null).
# 따라서 "mv" 명령은 조용히(silent) 실행됩니다.
mv ${DESKTOP}/*.${filetype} ${DESKTOP}/${CATEGORY} 2> /dev/null
fi
count=`expr $count + 1`
done
done < cleanup.csv