
users
각 사용자의 이름을 딴 폴더로 가득 찬 디렉토리가 있습니다 . 이 폴더에는 이라는 파일이 있는데 이 파일을 userinfo.csv
폴더에서 꺼내서 에 넣으려고 합니다 users
. 사용자 폴더의 모든 파일은 userInfo라고 불리기 때문에 폴더에 해당 사용자 이름이 포함되도록 이름을 바꾸고 싶습니다. 다음을 시도했지만 사용자 이름이 $dir
전체 디렉터리이기 때문에 작동하지 않습니다. 나는 이름을 사용자 이름으로 바꾸고 싶지 않습니다. 단지 이름을 바꿔서 이동할 때 users
파일과 많은 오류만 남지 않도록 해야 합니다.
어떻게 하면 이를 개선할 수 있나요?
# for every subdirectory, copy userinfo.csv to /users and rename to avoid confusion/errors
for dir in /path/to/users/*/; do
(
cd "$dir" && cp userinfo.csv _$("dir").csv && cp _$("dir").csv /path/to/users/
)
done
답변1
최종 파일 이름에 사용자 이름이 필요하지 않은 경우
for i in /path/to/users/*/userinfo.csv ; do
mv $i /path/to/users/userinfo-$RANDOM.csv
done
귀하의 사용 사례에 적합합니까?
그렇지 않은 경우 bash의 매개변수 대체를 사용할 수도 있습니다.
for i in /path/to/users/*/userinfo.csv ; do
mv $i /path/to/users/${i//\/-}
done
그러면 변수 /
(경로 + 파일 이름)의 모든 내용이 대체됩니다. 예를 들어 다음과 같이 끝납니다.-
$i
/path/to/users/path-to-users-john-userinfo.csv
/path/to/users/path-to-users-jack-userinfo.csv
답변2
for i in $(ls -1 /path/to/users/); do
mv /path/to/users/$i/*/userinfo.csv /path/to/users/userinfo_$i.csv
done
userinfo.csv
위치가 다음과 같다고 가정하면 작동합니다 /path/to/users/$user/userinfo.csv
. 파일이 없거나 파일만 /path/to/users/
있는 폴더를 포함하는 경우 아무 작업도 수행되지 않으며 무시할 수 있습니다.userinfo.csv
mv
이 경우 $i
파일이나 폴더의 각 항목 이름이 포함됩니다./path/to/users/