2010-10-27 37 views
6

Về cơ bản tôi chỉ muốn tar tất cả các tệp trong một thư mục, nhưng không nhận được tất cả thư mục mẹ trong tệp lưu trữ.Ngăn thư mục gốc bị tard

Tôi đã thử -C, nhưng tôi đoán tôi không sử dụng đúng.

tar -cjf archive.tar.bz2 -C /var/some/log/path ./* 

Kết quả này cố gắng thêm tất cả các tệp vào TKT. Sử dụng đường dẫn đầy đủ làm đối số cuối cùng sẽ không ngăn các thư mục được thêm vào.

Có vẻ đơn giản, nhưng không thể hiểu được. Bằng cách nào đó tar không tar ./* như là liên quan đến-C, mặc dù nó nên thay đổi để dir đó.

Giúp đánh giá cao.

+0

Đó là trình bao mở rộng './*' vào danh sách tên tệp. 'tar' chỉ thấy danh sách tên tập tin này. – Gilles

Trả lời

11

Thư mục mẹ (/var/some/log) được bao gồm, vì /var/some/log/path/.. được bao gồm khi bạn thực hiện ./*. Cố gắng chỉ làm

tar -cjf archive.tar.bz2 -C /var/some/log/path . 

Chạy thử:

$ find tmp/some_files 
tmp/some_files 
tmp/some_files/dir1 
tmp/some_files/dir1/dir1file 
tmp/some_files/hello 
tmp/some_files/world 
tmp/some_files/dir2 
tmp/some_files/dir2/dir2file 
$ tar -cvjf archive.tar.bz2 -C tmp/some_files/ . 
./ 
./dir1/ 
./dir1/dir1file 
./hello 
./world 
./dir2/ 
./dir2/dir2file 
$ cd tmp/unpacked 
/tmp/unpacked$ mv /home/aioobe/archive.tar.bz2 . 
/tmp/unpacked$ tar -xvjf archive.tar.bz2 
./ 
./dir1/ 
./dir1/dir1file 
./hello 
./world 
./dir2/ 
./dir2/dir2file 
/tmp/unpacked$ ls 
archive.tar.bz2 dir1 dir2 hello world 
/tmp/unpacked$ 
+0

Đó là một phần tốt hơn, nhưng bây giờ nó quảng cáo "." như một thư mục cha trong tar. Tôi chỉ muốn các tập tin. – Joe

+0

Không, tiền tố "./" chỉ là ký hiệu. Nó chứa các tập tin trong thư mục gốc của kho lưu trữ. – aioobe

+0

Ah. Tôi hiểu rồi. Lỗi của tôi. – Joe

0

Có một cách dễ dàng hơn để làm điều này:

  1. cd xuống vào thư mục bạn muốn được cấp cao nhất, tức là. .

    cd /var/lib/mysql

  2. thư mục Remove mẹ từ lệnh tar bạn

    /var/lib/mysql/DATABASE_NAME trở thành chỉ DATABASE_NAME

Thông tin chi tiết có thể được tìm thấy trong this blog writeup.

Các vấn đề liên quan